这是一款非常有创意的jQueryCSS3表单提交按钮动画特效。该提交按钮在用户点击的时候会转换为一个进度条,用以表示当前提交的进程,当提交结束后,进度条优惠转换为一个圆形的成功符号,效果非常酷。

制作方法

HTML结构

该提交按钮特效的HTML结构使用一个<div>来包裹一个按钮。按钮中div.fill是进度条元素,.fa-check是font-awesome图标,这是提交成功后的圆形图标。

<div id="button-wrapper">
    <button>
        <p>Upload Something</p>
        <div class="fill"></div>
        <div class="fa fa-check"></div>
    </button>
</div>
              
CSS样式

该提交按钮特效的按钮包裹元素#button-wrapper被绝对定位到屏幕中间,宽度设置为450像素,并添加了ease平滑过渡效果。

#button-wrapper {
    width: 450px;
    text-align: center;
    padding: 0 100px;
    box-sizing: border-box;
    -webkit-transition: .3s all ease .3s;
    transition: .3s all ease .3s;
    position: absolute;
    top: 50%;
    left: 50%;
    -webkit-transform: translate3d(-50%, -50%, 0);
    transform: translate3d(-50%, -50%, 0);
}              
              

按钮元素使用相对定位,设置了一个大圆角和ease平滑过渡效果。

button {
    width: 100%;
    background: #8e44ad;
    border: none;
    border-radius: 50px;
    padding: 5px 0;
    cursor: pointer;
    -webkit-transition: .3s all ease;
    transition: .3s all ease;
    position: relative;
}              
              

进度条.fill元素使用绝对定位,开始时宽度被设置为0,并设置了一个圆角。

button .fill {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    width: 0%;
    background: #8e44ad;
    border-radius: 50px;
}             
              

该提交按钮特效中使用jQuery来处理按钮的点击事件,在按钮被点击的时候,它的父元素被添加了clicked class。在clicked样式中,按钮上的文字被隐藏,按钮的高度被减小到25px,进度条的宽度被设置为100%。这样便制作出了按钮转换为进度条并开始动画的效果。

#button-wrapper.clicked {
    padding: 0;
}

#button-wrapper.clicked button {
    background: #ccc;
    margin-top: 25px;
}

#button-wrapper.clicked button p {
    max-height: 0;
    overflow: hidden
}

#button-wrapper.clicked button .fill {
    width: 100%;
    -webkit-transition: .3s all ease .3s;
    transition: 2s all ease .6s;
}                
              

最后进度条转换为圆形图标的原理基本类似,具体请参考源文件代码。

JAVASCRIPT

该进度条特效中使用jQuery来处理按钮的点击事件,在按钮被点击的时候为它的父元素添加.clicked class,并在延迟2600毫秒后为按钮添加.success class。.clicked class或激活进度条动画,.success class会使进度条转换为圆形的图标。

(function () {
    'use strict';
    var $button = $('button');
    $button.on('click', function () {
        $(this).parent().addClass('clicked').delay(2600).queue(function () {
            $(this).addClass('success');
        });
    });
}());