这是一款非常实用的 jQuery和css3登陆注册表单插件。当用户打开了登陆或注册的模态窗口,他们很容易就可以在登陆和注册或忘记密码等操作窗口中来回切换,十分方便。

HTML结构

登陆注册导航按钮的结构如下:

<nav class="main-nav">
  <ul>
    <!-- all your main menu links here -->
    <li><a class="cd-signin" href="#0">Sign in</a></li>
    <li><a class="cd-signup" href="#0">Sign up</a></li>
  </ul>
</nav>
                

为了制作模态窗口,我们使用了一个嵌套的div结构,最外边的div是模态窗口。

<div class="cd-user-modal"> <!-- this is the entire modal form, including the background -->
  <div class="cd-user-modal-container"> <!-- this is the container wrapper -->
    <ul class="cd-switcher">
      <li><a href="#0">Sign in</a></li>
      <li><a href="#0">New account</a></li>
    </ul>
  </div>
</div>
                

提交表单的结构

<div class="cd-user-modal">
  <div class="cd-user-modal-container">
    <!-- switcher tab here -->
    <div id="cd-login"> 
      <!-- form here -->    
      <p class="cd-form-bottom-message"><a href="#0">Forgot your password?</a></p>
    </div> 
    <div id="cd-signup">
      <!-- form here -->
    </div>
    <div id="cd-reset-password">
      <!-- form here -->
      <p class="cd-form-bottom-message"><a href="#0">Back to log-in</a></p>
    </div>
  </div> 
  <a href="#0" class="cd-close-form">Close</a>
</div>
                

CSS样式

开始时模态窗口是隐藏的,我们设置其visibility: hidden;opacity: 0;。这两个属性可以通过.is-visible来同时修改。

.cd-user-modal {
  visibility: hidden;
  opacity: 0;
  transition: opacity 0.3s 0, visibility 0 0.3s;
}
 
.cd-user-modal.is-visible {
  visibility: visible;
  opacity: 1;
  transition: opacity 0.3s 0, visibility 0 0;
}
                

我们为visibility 的 transition 添加一个延时,使动画更加平滑。

关闭按钮(.cd-close-form)在台式设备上设置了display: none;。在台式设备上关闭模态窗口,点击非表单的任意地方或按ESC键要比点击一个按钮自然得多。在小屏幕上,因为空间有限,所以使用一个关闭按钮是很有帮助的。

JAVASCRIPT

在这个登陆注册表单中,密码是可以切换的,实现的原理是通过jQuery将表单改为password类型或text类型:

$('.hide-password').on('click', function(){
  var $this= $(this),
    $password_field = $this.prev('input');
    
    ( 'password' == $password_field.attr('type') ) ? $password_field.attr('type', 'text') : $password_field.attr('type', 'password');
    ( 'Hide' == $this.text() ) ? $this.text('Show') : $this.text('Hide');
    //focus and move cursor to the end of input field
    $password_field.putCursorAtEnd();
});
                

.putCursorAtEnd()函数将焦点移入当前字段,请参考Move Cursor To End of Textarea or Input