`

一款漂亮的滑动表单

阅读更多
<h1>Fancy Sliding Form with jQuery</h1>
<div id="wrapper">
    <div id="steps">
        <form id="formElem" name="formElem" action="" method="post">
            <fieldset class="step">
                <legend>Account</legend>
                <p>
                    <label for="username">User name</label>
                    <input id="username" name="username" />
                </p>
                <p>
                    <label for="email">Email</label>
                    <input id="email" name="email" type="email" />
                </p>
                <p>
                    <label for="password">Password</label>
                    <input id="password" name="password" type="password" />
                </p>
            </fieldset>
            <fieldset>
            ...
            </fieldset>
        </form>
    </div>
    <div id="navigation" style="display:none;">
        <ul>
            <li class="selected">
                <a href="#">Account</a>
            </li>
            <li>
                <a href="#">Personal Details</a>
            </li>
            <li>
                <a href="#">Payment</a>
            </li>
            <li>
                <a href="#">Settings</a>
            </li>
            <li>
                <a href="#">Confirm</a>
            </li>
        </ul>
    </div>
</div>

 

$(function() {
    /*
    number of fieldsets
    */
    var fieldsetCount = $('#formElem').children().length;
 
    /*
    current position of fieldset / navigation link
    */
    var current     = 1;
 
    /*
    sum and save the widths of each one of the fieldsets
    set the final sum as the total width of the steps element
    */
    var stepsWidth  = 0;
    var widths      = new Array();
    $('#steps .step').each(function(i){
        var $step       = $(this);
        widths[i]       = stepsWidth;
        stepsWidth      += $step.width();
    });
    $('#steps').width(stepsWidth);
 
    /*
    to avoid problems in IE, focus the first input of the form
    */
    $('#formElem').children(':first').find(':input:first').focus(); 
 
    /*
    show the navigation bar
    */
    $('#navigation').show();
 
    /*
    when clicking on a navigation link
    the form slides to the corresponding fieldset
    */
    $('#navigation a').bind('click',function(e){
        var $this   = $(this);
        var prev    = current;
        $this.closest('ul').find('li').removeClass('selected');
        $this.parent().addClass('selected');
        /*
        we store the position of the link
        in the current variable
        */
        current = $this.parent().index() + 1;
        /*
        animate / slide to the next or to the corresponding
        fieldset. The order of the links in the navigation
        is the order of the fieldsets.
        Also, after sliding, we trigger the focus on the first
        input element of the new fieldset
        If we clicked on the last link (confirmation), then we validate
        all the fieldsets, otherwise we validate the previous one
        before the form slided
        */
        $('#steps').stop().animate({
            marginLeft: '-' + widths[current-1] + 'px'
        },500,function(){
            if(current == fieldsetCount)
                validateSteps();
            else
                validateStep(prev);
            $('#formElem').children(':nth-child('+ parseInt(current) +')').find(':input:first').focus();
        });
        e.preventDefault();
    });
 
    /*
    clicking on the tab (on the last input of each fieldset), makes the form
    slide to the next step
    */
    $('#formElem > fieldset').each(function(){
        var $fieldset = $(this);
        $fieldset.children(':last').find(':input').keydown(function(e){
            if (e.which == 9){
                $('#navigation li:nth-child(' + (parseInt(current)+1) + ') a').click();
                /* force the blur for validation */
                $(this).blur();
                e.preventDefault();
            }
        });
    });
 
    /*
    validates errors on all the fieldsets
    records if the form has errors in $('#formElem').data()
    */
    function validateSteps(){
        var FormErrors = false;
        for(var i = 1; i < fieldsetCount; ++i){
            var error = validateStep(i);
            if(error == -1)
                FormErrors = true;
        }
        $('#formElem').data('errors',FormErrors);
    }
 
    /*
    validates one fieldset
    and returns -1 if errors found, or 1 if not
    */
    function validateStep(step){
        if(step == fieldsetCount) return;
 
        var error = 1;
        var hasError = false;
        $('#formElem').children(':nth-child('+ parseInt(step) +')').find(':input:not(button)').each(function(){
            var $this       = $(this);
            var valueLength = jQuery.trim($this.val()).length;
 
            if(valueLength == ''){
                hasError = true;
                $this.css('background-color','#FFEDEF');
            }
            else
                $this.css('background-color','#FFFFFF');
        });
        var $link = $('#navigation li:nth-child(' + parseInt(step) + ') a');
        $link.parent().find('.error,.checked').remove();
 
        var valclass = 'checked';
        if(hasError){
            error = -1;
            valclass = 'error';
        }
        $('<span class="'+valclass+'"></span>').insertAfter($link);
 
        return error;
    }
 
    /*
    if there are errors don't allow the user to submit
    */
    $('#registerButton').bind('click',function(){
        if($('#formElem').data('errors')){
            alert('Please correct the errors in the Form');
            return false;
        }
    });
});

 

#navigation{
    height:45px;
    background-color:#e9e9e9;
    border-top:1px solid #fff;
    -moz-border-radius:0px 0px 10px 10px;
    -webkit-border-bottom-left-radius:10px;
    -webkit-border-bottom-right-radius:10px;
    border-bottom-left-radius:10px;
    border-bottom-right-radius:10px;
}
#navigation ul{
    list-style:none;
    float:left;
    margin-left:22px;
}
#navigation ul li{
    float:left;
    border-right:1px solid #ccc;
    border-left:1px solid #ccc;
    position:relative;
    margin:0px 2px;
}

 

#wrapper{
    -moz-box-shadow:0px 0px 3px #aaa;
    -webkit-box-shadow:0px 0px 3px #aaa;
    box-shadow:0px 0px 3px #aaa;
    -moz-border-radius:10px;
    -webkit-border-radius:10px;
    border-radius:10px;
    border:2px solid #fff;
    background-color:#f9f9f9;
    width:600px;
    overflow:hidden;
}
#steps{
    width:600px;
    overflow:hidden;
}
.step{
    float:left;
    width:600px;
}

 

  • 大小: 31.7 KB
4
1
分享到:
评论
2 楼 guangqiang 2013-03-07  
lgy61 写道
给力,用起来不错的

互相学习!
1 楼 lgy61 2013-03-06  
给力,用起来不错的

相关推荐

    极漂亮的表单验证小弹框

    "极漂亮的表单验证小弹框"是一个专门针对这一需求设计的组件,旨在提升用户的登录页面体验。这个小弹框不仅具有功能上的实用性,还注重美观性,使得交互过程更为愉悦。 表单验证通常涉及到以下几个关键知识点: 1....

    CSS实例教程表单提升-制作漂亮的网页表单.pdf

    CSS实例教程表单提升-制作漂亮的网页表单是网页制作中非常重要的一件事情。高手可以飘过啦,css 表单是网页制作中非常重要的元素, 比如注册表单, 登陆表单, 等等很多地方都是需要用到表单的,所以加强css 表单...

    漂亮的登录页+滑动弹出框+js正则验证

    "漂亮的登录页+滑动弹出框+js正则验证"这个项目,显然着重于实现这三个核心功能,以创建一个既视觉上吸引人又具有实用性的用户界面。 首先,我们来详细探讨“漂亮的登录页”。这通常涉及到以下几个方面: 1. **...

    黑色漂亮点击滑动的CSS模板_黑色 漂亮 Jquery 滑动 质感 精品 图标 整体色 web20_html网站模板.rar

    该压缩包文件包含的是一款设计精美的黑色主题网站模板,主要使用了CSS、JavaScript(特别是Jquery库)以及HTML技术来实现。这个模板的特点在于其动态的点击滑动效果,为用户提供了良好的交互体验,同时整体色调以...

    基于jquery实现的表单向导示例,很精美哦

    在网页设计和开发中,表单向导是一种增强用户体验、引导用户逐步完成复杂表单填写的工具。本示例是基于jQuery库实现的,jQuery是一个轻量级、高性能的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax...

    小巧迷你漂亮的水果网站模板_灰色红色html水果食品迷你窄幻灯滑动漂亮整站.rar

    标题中的“小巧迷你漂亮的水果网站模板_灰色红色html水果食品迷你窄幻灯滑动漂亮整站”揭示了这个压缩包包含的是一款设计精美的HTML网站模板,特别适用于展示水果或食品相关的在线商店或产品页面。这款模板的特点...

    漂亮的登录页+滑动弹出框+JS正则验证功能的实现代码.zip

    2. **滑动弹出框**:这是一种常见的UI设计元素,用于显示额外信息或功能,而不会完全占据整个屏幕。滑动弹出框可能通过点击按钮、链接或某些交互触发,向用户呈现登录表单。这种设计可以提高页面的可用性和可访问性...

    个性滑动切换单页前端模板下载Pc9.zip

    "个性滑动切换单页前端模板下载Pc9"正是这样一款融合了前沿技术与设计理念的模板,它基于Bootstrap框架构建,具有自适应手机电脑的特性,适用于各种设备,为用户提供一致且流畅的浏览体验。 首先,Bootstrap是...

    (分享)一款很漂亮的弹框

    标题中的“一款很漂亮的弹框”指的是在软件或网页开发中使用的用户交互元素,通常称为对话框或提示框。这种弹框在用户界面设计中扮演着重要的角色,用于向用户提供信息、请求确认或接收用户的输入。在编程领域,创建...

    项目管理css3单页模板是一款非常漂亮的html5+css3网站模板 .rar

    同时,作为一款单页模板,它很可能集成了导航、信息展示、项目进度追踪等多种功能于一身,旨在以简洁高效的方式展示项目信息。".rar" 后缀提示这是一个压缩文件,用户需要解压后才能使用其中的文件。 【标签解析】 ...

    红色大气的HTML5红酒企业网站模板-红色 大气 红酒 企业 整站 html5 jquery 精品 滑动 交互 html 漂亮

    "漂亮"一词则暗示了这款模板注重用户体验和视觉美感,可能包含了响应式设计,使得网站在不同设备上都能良好显示,无论是桌面电脑、平板还是手机。 综上所述,这个"红色大气的HTML5红酒企业网站模板"是一个结合了...

    一个个人主页的漂亮模板,赶快下载吧!

    在构建个人主页时,选择一个美观且功能齐全的模板至关重要。这个标题提到的"一个个人主页的漂亮模板",显然是一份专为个人...所以,如果你正在寻找一个能够提升在线形象的解决方案,这款"漂亮模板"无疑是值得考虑的。

    分享10款优雅动人的HTML5教程及

    今天我们要来分享10款优雅动人的HTML5教程及源码,这些HTML5教程都是我们这几天收集过来的,经过我们的挑选,希望能给大家带来帮助。...刚刚我们发布过一款CSS3开关切换滑动按钮,应该[......] 阅读全文&gt;&gt;

    时尚美容造型html5模板是一款暗紫色漂亮时尚美容造型html5模板 .rar

    而主要的文件“时尚美容造型html5模板是一款暗紫色漂亮时尚美容造型html5模板。”可能是压缩包的主文件,包含了所有构成模板的HTML、CSS、JavaScript和其他资源文件。 综上所述,这款“时尚美容造型html5模板”是...

    餐饮酒店类html5黑色模板是一款黑色精品漂亮的餐饮酒店的html5网站模板 .rar

    “餐饮酒店类html5黑色模板是一款黑色精品漂亮的餐饮酒店的html5网站模板。” 这个文件名称看起来是重复的描述,但可能是模板的主文件夹或者包含所有模板文件的压缩包本身的名称。 【相关知识点】 1. HTML5:HTML5...

    项目管理css3单页模板是一款非常漂亮的html5+css3网站模板。.zip

    【压缩包子文件的文件名称列表】中的唯一条目“项目管理css3单页模板是一款非常漂亮的html5+css3网站模板。”看起来像是重复的描述,而非实际的文件名。在真实的压缩包中,通常会包含HTML文件(如index.html)、CSS...

    粉红色婚纱摄影网站模板是一款漂亮粉红的婚纱摄影网站模板下载。.rar

    1. 首页:通常会有一个引人注目的滑动图片展示区,展示精选的婚纱摄影作品,以吸引访问者的注意力。首页还会包括关于摄影师的简介、服务项目以及联系方式等信息。 2. 相册部分:用户可以创建不同的相册类别,如室内...

    C# web 漂亮的界面及组件

    在C# Web开发中,创建一个漂亮的用户界面和使用高效的组件是至关重要的,因为它们直接影响到用户的体验和网站的吸引力。下面将详细讨论C# Web界面设计中的关键知识点,以及可能与提供的压缩包文件相关的资源。 1. *...

Global site tag (gtag.js) - Google Analytics