简单动画实现代码

简介:

动画的实现原型

复制代码
<div id="div1" style="width:100px;height:50px;background:red;cursor:pointer;color:#fff;text-align:center;line-height:50px;">点击</div>

<script type="text/javascript">
//dom
var oDiv = document.getElementById('div1');
//调用
oDiv.onclick = function() {
    $('#div1').run({
        'width': '500'
    }).run({
        'width': '300'
    }).run({
        'width': '1000'
    });
};
</script>
复制代码

JS

复制代码
(function($) {

    window.$ = $;

})(function() {

    var rquickExpr = /^(?:#([\w-]*))$/;

    function aQuery(selector) {
        return new aQuery.fn.init(selector);
    }

    /**
     * 动画
     * @return {[type]} [description]
     */
    var animation = function(){
        var self    = {};
        var Queue   = []; //动画队列
        var fireing = false //动画锁
        var first   = true;//通过add接口触发

        var getStyle = function(obj, attr) {
            return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj, false)[attr];
        }

        var makeAnim = function(element, options, func) {
            var width = options.width
                //包装了具体的执行算法
                //css3
                //setTimeout
            element.style.webkitTransitionDuration = '2000ms';
            element.style.webkitTransform = 'translate3d(' + width + 'px,0,0)';

            //监听动画完结
            element.addEventListener('webkitTransitionEnd', function() {
                func()
            });
        }

        var _fire = function() {
            //加入动画正在触发
            if (!fireing) {
                var onceRun = Queue.shift();
                if (onceRun) {
                    fireing = true;
                    //next
                    onceRun(function() {
                        fireing = false;
                        _fire();
                    });
                } else {
                    fireing = true;
                }
            }
        }

        return self = {
            //增加队列
            add: function(element,options) {
                Queue.push(function(func) {
                    makeAnim(element, options, func);
                });

                //如果有一个队列立刻触发动画
                if(first && Queue.length ){
                    first = false;
                    self.fire();
                }
            },
            //触发
            fire: function() {
                _fire();
            }
        }
    }();


    aQuery.fn = aQuery.prototype = {
        run:function(options){
            animation.add(this.element,options);
            return this;
        }
    }

    var init = aQuery.fn.init = function(selector) {
        var match    = rquickExpr.exec(selector);
        var element  = document.getElementById(match[1])
        this.element = element;
        return this;
    }

    init.prototype = aQuery.fn;

    return aQuery;
}());
复制代码

本文转自艾伦 Aaron博客园博客,原文链接:http://www.cnblogs.com/aaronjs/p/3858672.html,如需转载请自行联系原作者
相关文章
|
12天前
|
前端开发
Filp动画
Filp动画基于First、Last、Inverse、Play四步实现复杂前端动画效果。首先记录元素初始位置,接着记录目标位置,然后使用transform属性将元素逆向平移回初始位置,最后通过移除transform并添加transition属性实现平滑动画效果。这是一种高效解决CSS不支持过渡动画问题的方法。
29 1
|
2月前
|
前端开发
HarmonyNext动画大全02-显式动画
HarmonyNext动画大全02-显式动画
37 2
HarmonyNext动画大全02-显式动画
|
7月前
|
JavaScript 前端开发
jQuery 第五章(效果,滑动,动画,停止动画)
jQuery 第五章(效果,滑动,动画,停止动画)
86 0
|
移动开发 前端开发 JavaScript
【前端动画】实现动画的6种方式
【前端动画】实现动画的6种方式
1214 0
|
存储 文件存储 云计算
不瞒了,我们和追光动画有一个《杨戬》!
不瞒了,我们和追光动画有一个《杨戬》!
194 0
|
JavaScript 前端开发
【jQuery动画】停止动画、淡入淡出、自定义动画
动画队列中所有动画都是按照顺序执行的,默认只有当前的一个动画执行完毕,才会执行后面的动画。为此,jQuery提供了stop()方法用于停止动画效果。通过此方法,可以让动画队列后面的动画提前执行。
An动画优化之遮罩层动画
An动画优化之遮罩层动画
271 0
An动画优化之遮罩层动画
|
XML 图形学 数据格式
Animation组合动画踩坑-实现循环播放动画,可控制次数
Animation组合动画踩坑-实现循环播放动画,可控制次数
|
前端开发
动画
动画
145 0
|
Dart 开发者
【Flutter】Animation 动画 ( AnimatedBuilder 动画使用流程 | 创建动画控制器 | 创建动画 | 创建动画作用的组件 | 关联动画与组件 | 动画执行 )(三)
【Flutter】Animation 动画 ( AnimatedBuilder 动画使用流程 | 创建动画控制器 | 创建动画 | 创建动画作用的组件 | 关联动画与组件 | 动画执行 )(三)
184 0
【Flutter】Animation 动画 ( AnimatedBuilder 动画使用流程 | 创建动画控制器 | 创建动画 | 创建动画作用的组件 | 关联动画与组件 | 动画执行 )(三)