Создание необычной формы авторизации, регистрации и напоминации

7 мая 2009, 9:00 Евгений Белодед Дизайн рейтинг +30-

Буэнос диаз, амигос!

Сегодня мы с вами сделаем необычную форму регистрации-авторизации-напоминания пароля.

Использовать будем jQuery и jQuery easing plugin, который расширяет возможности анимации jQuery. Об этом плагине мы уже писали. Сейчас же будем использовать на реальном примере.

NB. У этой статьи есть продолжение.

Суть того, что я хочу сделать заключается в следующем. Все три формы: регистрация, авторизация и напоминание пароля — на странице есть. Но две из них не видны. При клике на соответствующую псевдоссылку (про ссылки всем советую прочитать статью Павла Марковнина) появляется нужная форма. 

В общем-то смотрим пример, и все станет понятно:

Демо

HTML и CSS

Код страницы будет выглядеть примерно следующим образом:

следующие строчки в css

делают возможным следующую картинку в браузере:

Каждый loginBlock содержит в себе инпуты, кнопки и блоки для показа ошибок. Взглянем на signin:

Блок #error1 изначально невидим и пуст. Если валидация полей не будет пройдена, мы будем его заполнять текстом ошибки и показывать.

JavaScript

Первое, что мы делаем — на $(document).ready() вешаем обработчики кликов на псевдоссылки. У нас имеется три пары ссылок, которые должны приводить к одному и тому же результату, каждая пара имеет свой класс. По нему-то мы и будем искать ссылки:

 $(document).ready(function() {
$('a.remindPass').click(function(e) {
e.preventDefault();
GoTo(2);
});
$('a.signin').click(function(e) {
e.preventDefault();
GoTo(1);
});
$('a.signup').click(function(e) {
e.preventDefault();
GoTo(0);
});
});

 Функция GoTo(num) будет перематывать #wr на нужное значение левого отступа. Здесь всплывает использование плагина jQuery easing:

 function GoTo(num) {
margin = num * 382;
$('#wr').animate({ marginLeft: -margin },
{ duration: 800, easing: 'easeInOutBack' });
}

 

382px — ширина одного .loginBlock'a с учетом всех отступов и бордеров.

Для каждой кнопки действий - регистрации, авторизации и отправки пароля на почту, мы напишем функцию обработчика клика. Здесь приведу только один пример. Остальные можно увидеть в js-файле (ссылка на архив будет внизу статьи).

 function SignUp() {
email = $('#email').val();
pass = $('#password').val();
passAgain = $('#passwordAgain').val();
if (!ValidEmail(email)) {
ShowError(0);
}
else {
if ((pass!="")&&(pass == passAgain)) {
if (!UserWithEmailExists(email)) {
//Register User
HideError()
}
} else {
ShowError(1);
}
}
}

Функция UserWithEmailExists(email) должна отправлять запрос к серверу, чтобы узнать, есть ли пользователь с таким емэйлом в системе. Если есть, то возвращать true, в противном случае false.

Теперь поговорим про показ ошибок и неошибок. Выглядеть это должно примерно так:

Ошибка валидации емэйла:

 

Ошибка совпадения паролей:

Неошибка:

Для каждой ошибки имеется код, каждая ошибка соответствует своей форме, поэтому можно завести следующий список констант:

 

 var er0 = "Неправильный формат email'a"; //0
var er1 = "Пароли не совпадают"; //0
var er2 = "Пользователь с таким email'ом уже зарегистрирован"; //0
var er3 = "Не угадали пароль. Или email. Попробуйте еще раз"; //1
var er4 = "Пользователя с таким email'oм у нас еще нету"; //2
var er5 = "Неправильный формат email'a"; //2

А сам показ ошибок реализует следующая функция:

 function HideError() {
$('.error').hide();
}
function ShowError(code) {
HideError();
switch (code) {
case 0:
$('#error0').html(er0).slideDown();
break;
case 1:
$('#error0').html(er1).slideDown();
break;
case 2:
$('#error0').html(er2).slideDown();
break;
case 3:
$('#error1').html(er3).slideDown();
break;
case 4:
$('#error2').html(er4).slideDown();
break;
case 5:
$('#error2').html(er5).slideDown();
break;
}
}

Аналогичным образом реализуется показ неошибок.

Демо Скачать

Надеюсь вам понравилось.

¡Адьёс!

 

UPD. У этой статьи есть продолжение

 

Рекламное место, которое может стать вашим

Понравилась статья?

Тогда подпишись на обновления через RSS или воспользуйся
другими способами подписки.

Читать в Яндекс.Ленте Добавить в Google Добавить в Netvibes
  •  

Комментарии — 25

RSS
  • Аватарка
    7 мая 2009 в 2:50 ]]>GiN]]>
    Мега-круто. Можно просто сидеть и играться ))
    Спасибо. Попробую прикрутить на свой сайтик. Благо надо переписывать форму регистрации.
  • Аватарка
    7 мая 2009 в 3:37 ]]>Shimon]]>
    Не пытаясь ничего критиковать...

    А почему не проще сделать одну форму вместо трех и то выежать третье поле то съежать до одного?
    С одной стороны интерактивность интерфейса на месте, с другой помоему более логично и проще для восприятия.
  • Аватарка
    7 мая 2009 в 9:18 ]]>Alex]]>
    Класс! jQuery творит чудеса
  • Аватарка
    7 мая 2009 в 9:46 ]]>Артём Сапегин]]>
    Shimon, такая форма (кстати, намного лучше этой :) есть на ruphotography.ru.
  • Аватарка
    7 мая 2009 в 10:07 ]]>Женя]]>
    Артем, на ruphotography я не увидел то, о чем вы говорите.
    На форме авторизации я нажал, что не помню пароль, но поле для ввода пароля осталось, кнопка по-прежнему называется "Впустите меня".
    Внимание вопрос: почему лучше? Я тоже хочу лучше!
  • Аватарка
    7 мая 2009 в 10:15 ]]>Robotti]]>
    Супер! Надеюсь что где-нибудь пригодится...
    Да, что ни говори, jQuery - сила!
  • Аватарка
    7 мая 2009 в 11:36 ]]>Алексей]]>
    Да, класно получилось!
  • Аватарка
    7 мая 2009 в 14:43 ]]>sanchosrancho]]>
    Думаю, было бы лучше надписи «Войти», «Зарегестрироваться» и «Вспомнить пароль» сделать ниже этого плавающего блока (не скрывать их), тогда выезжание блока будет происходить с ожидаемой стороны.
  • Аватарка
    7 мая 2009 в 15:09 rmaksim
    var er0 = ...
    var er1 = ...
    может их массивом сделать ? красивше будет однако...
  • Аватарка
    7 мая 2009 в 17:39 ]]>alex]]>
    Прикольно...
  • Аватарка
    8 мая 2009 в 18:36 ]]>sise]]>
    Оригинально! А есть сайты где такая форма авторизации есть? ниразу не видел такого....
  • Аватарка
    8 мая 2009 в 18:40 ]]>Евгений]]>
    Я тоже не видел. Именно поэтому сделал.

    ЗЫ. Санчосранчо дело говорит.
    ЗЫЫ. Рмаксим тоже голова.
  • Аватарка
    8 мая 2009 в 18:54 ]]>Grin]]>
    Евгений, улучши-ка формочку и код )
  • Аватарка
    8 мая 2009 в 19:50 ]]>Влада]]>
    Оригинально! Поставлю на заметку. Только, правда, их бы минимизировать (предложение Санчо).
  • Аватарка
    9 мая 2009 в 0:51 Sender
    Спасибо огромное! Очень понравилось, появилась идея использовать ту же схему работы, но не для регистрации, а для прокручивания страничек сайта, не знаю, насколько удачно получится, но повозиться всеже стоит!
  • Аватарка
    10 мая 2009 в 17:13 Victor
    От себя добавил бы фокус на первое текстовое поле после перелистывания.
  • Аватарка
    23 мая 2009 в 12:50 ]]>Roman]]>
    Прикольная штука. Спасибо!
  • Аватарка
    26 мая 2009 в 23:12 fuckir
    а как прикрутить чтобы нажав на кнопку Войти перекидывало на обработчик ?
  • Аватарка
    31 мая 2009 в 10:44 ]]>nova5]]>
    Урок класс, но вопрос к автору: что за слово "напоминация"? Программирование программированием, но русский язык не стоит забывать ;)
  • Аватарка
    31 мая 2009 в 12:44 ]]>Женя]]>
    Слушай, брат, нерусский я. Не обижай, да?

  • Аватарка
    1 июня 2009 в 7:29 ]]>alvira]]>
    Спосибо за информацию, много нового узнала.
  • Аватарка
    24 июля 2009 в 0:55 ]]>marienplatz]]>
    Прекрасный пример. От себя добавлю, что надо все таки прописать еще и ссылки в noscript на случай отключенного яваскрипта. Ну и там потом можно поупражнятся обрабатывая переменную из get - в зависимости от нее показывая то или иное меню
  • Аватарка
    24 июля 2009 в 10:32 ]]>Evgenij]]>
    Дельные замечания, marienplatz. У этой статьи есть захватывающее продолжение.
    http://vremenno.net/html-css/nice-forms-upd/
  • Аватарка
    24 октября 2009 в 17:42 iu-pi)
    а как ее прикрепить к своиму сайту??
  • Аватарка
    17 мая в 22:17 Arius
    "Функция UserWithEmailExists(email) должна отправлять запрос к серверу, чтобы узнать, есть ли пользователь с таким емэйлом в системе. Если есть, то возвращать true, в противном случае false."

    Серверу? То есть еще нужна база данных? и как тогда прикручивать эту регистрацию?
  • Эл. почта (используется для Граватарки)
  • Домашняя страница
  • Имя в Твиттере
  • Разрешенные теги Текст сообщения (надо бы заполнить это поле)
  • как выглядит какой тег
    жирный текст <b>жирный текст</b>
    курсивный тект <i>курсивный тект</i>
    зачеркнутый текст <s>зачеркнутый текст</s>
    подчеркнутый текст <u>подчеркнутый текст</u>
    ссылка <a href="адрес">ссылка</a>
    function foo() { ... }
    <pre><code>function foo() { ... } </code></pre>