
<body> <div id="vrWrapper"> <div id="wr" class="wr"> <div class='loginBlock' id="signup"> <!--Форма регистрации --> </div> <div class='loginBlock' id="signin"> <!--Форма авторизации --> </div> <div class='loginBlock' id="remindPass"> <!--Форма напоминания --> </div> </div></div></body>следующие строчки в css#vrWrapper{ position: relative; margin: auto; margin-top: 100px; width: 380px; overflow: hidden;}#vrWrapper .wr{ width: 2000px;}.loginBlock{ width: 260px; border: solid 1px Silver; text-align: center; margin: 20px 40px; background: url('../images/longbg.png') repeat-x left -250px; padding: 20px; float: left;}делают возможным следующую картинку в браузере:
<div class='loginBlock' id="signin"> <label for="email">Email:</label> <input id="loginEmail" type="text" class='textinput' /> <label for="password">Пароль:</label> <input id="loginPass" type="password" class='textinput' /> <div id="error1" class="error displaynone"></div> <div class='buttonDiv'> <input id="Button3" type="button" value="Войти" onclick="SignIn()" /> </div> <div class='additional'> <a href="#" class='remindPass'>Вспомнить пароль</a> <a href="#" class='signup'>Зарегистрироваться</a> </div> </div>Блок #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; } } Аналогичным образом реализуется показ неошибок.

