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

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

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

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

Использовать будем 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. У этой статьи есть продолжение

 

Расскажите друзьям

Оцените статью:
  • 1
  • 2
  • 3
  • 4
  • 5

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

GiN
Мега-круто. Можно просто сидеть и играться ))
Спасибо. Попробую прикрутить на свой сайтик. Благо надо переписывать форму регистрации.
#
GiN
Shimon
Не пытаясь ничего критиковать...

А почему не проще сделать одну форму вместо трех и то выежать третье поле то съежать до одного?
С одной стороны интерактивность интерфейса на месте, с другой помоему более логично и проще для восприятия.
Alex
Класс! jQuery творит чудеса
Артём Сапегин
Shimon, такая форма (кстати, намного лучше этой :) есть на ruphotography.ru.
Женя
Артем, на ruphotography я не увидел то, о чем вы говорите.
На форме авторизации я нажал, что не помню пароль, но поле для ввода пароля осталось, кнопка по-прежнему называется "Впустите меня".
Внимание вопрос: почему лучше? Я тоже хочу лучше!
Robotti
Супер! Надеюсь что где-нибудь пригодится...
Да, что ни говори, jQuery - сила!
sanchosrancho
Думаю, было бы лучше надписи «Войти», «Зарегестрироваться» и «Вспомнить пароль» сделать ниже этого плавающего блока (не скрывать их), тогда выезжание блока будет происходить с ожидаемой стороны.
rmaksim
var er0 = ...
var er1 = ...
может их массивом сделать ? красивше будет однако...
#
rmaksim
alex
Прикольно...
sise
Оригинально! А есть сайты где такая форма авторизации есть? ниразу не видел такого....
Евгений
Я тоже не видел. Именно поэтому сделал.

ЗЫ. Санчосранчо дело говорит.
ЗЫЫ. Рмаксим тоже голова.
Grin
Евгений, улучши-ка формочку и код )
Влада
Оригинально! Поставлю на заметку. Только, правда, их бы минимизировать (предложение Санчо).
Sender
Спасибо огромное! Очень понравилось, появилась идея использовать ту же схему работы, но не для регистрации, а для прокручивания страничек сайта, не знаю, насколько удачно получится, но повозиться всеже стоит!
#
Sender
Victor
От себя добавил бы фокус на первое текстовое поле после перелистывания.
#
Victor
Roman
Прикольная штука. Спасибо!
fuckir
а как прикрутить чтобы нажав на кнопку Войти перекидывало на обработчик ?
#
fuckir
nova5
Урок класс, но вопрос к автору: что за слово "напоминация"? Программирование программированием, но русский язык не стоит забывать ;)
Женя
Слушай, брат, нерусский я. Не обижай, да?

alvira
Спосибо за информацию, много нового узнала.
marienplatz
Прекрасный пример. От себя добавлю, что надо все таки прописать еще и ссылки в noscript на случай отключенного яваскрипта. Ну и там потом можно поупражнятся обрабатывая переменную из get - в зависимости от нее показывая то или иное меню
iu-pi)
а как ее прикрепить к своиму сайту??
#
iu-pi)
Arius
"Функция UserWithEmailExists(email) должна отправлять запрос к серверу, чтобы узнать, есть ли пользователь с таким емэйлом в системе. Если есть, то возвращать true, в противном случае false."

Серверу? То есть еще нужна база данных? и как тогда прикручивать эту регистрацию?
#
Arius
Shiza
Оооо! Это Спешл! Ато думала не найду - а тут целый пост попался ;) !

Спасибо!
#
Shiza
muftaliev
а это просто надо вставить на страницу да и какой формат должен быть у страницы html или php или че там?Заранее спасибо .Если можно ответьте на майл borch-05@mail.ru
#
muftaliev

Новый комментарий

как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
counter strike mt2 silkroad pvp metin2 metin2 pvp knight pvp gm olarak başlayan pvpler pvp silkroad pvp serverler counter strike serverler msn show cam show görüntülü sohbet oyunlar suskunlar gazete oku