zoukankan      html  css  js  c++  java
  • js原生复杂实现animate操作Css3属性(升级版!)

    <!DOCTYPE html>
    <html>
    <head>
        <title>
            sadsadsadsadsadsadsa
        </title>
    
        <style type="text/css" media="screen">
            #box {
                width: 200px;
                height: 200px;
                background: red;
                
            }
        </style>
    
        <script type="text/javascript">
        /**
         * [animate 动画效果(可操作CSS2和CSS3)直接书写CSS3动画效果就可直接识别]
         * @param  {[type]}   obj   [要操作的对象]
         * @param  {[type]}   json  [属性]
         * @param  {[type]}   speed [时间]
         * @param  {Function} fn    [回调]
         * @return {[type]}         [description]
         */
        function animate(obj ,json ,speed ,fn) {
            var startTime = new Date();
            var iCur = 0;
            var iSpeed = 0;
            var Css3 = [];
            var i = 0;
            var px = '';
            clearInterval(obj.timer);
            obj.timer = setInterval(function() {
            var iStop = true;
                i++;
                document.title = i;
                for (var name in json) {
                    var iTarget = parseInt(json[name].match(/([0-9])+/g, "" ));
                    iCur = parseInt(obj.style[name].match(/([0-9])+/g, "" )) || parseInt(css(obj ,name).match(/([0-9])+/g, "" )) || 0;
                    var percentage = Math.min(1, (new Date - startTime) / speed);
    
                    if(!inArray(name ,Css3)) {
                        iSpeed = ( iTarget - iCur ) / 8;
                        iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
                        iSpeed = (iCur + (iTarget - iCur) * percentage);
                        iValue = iSpeed + css(obj ,name).match(/([a-z])+/g, "" );
                    }
                    else {
                    }
                    if(iCur != iTarget && json[name].match(/([a-z])+((.)+)/g, "" )) {
                        iStop = false;
                        iValue = json[name].replace(/([0-9])+/, iSpeed)
                    }
                    if(iCur != iTarget) {
                        iStop = false;
                        obj.style[name] = iValue;
                    }
                }
    
                if(iStop) {
                    console.log(new Date - startTime);
                    clearInterval(obj.timer);
                    fn && fn.call(obj);
                }
                
            } ,13);
        }
        function inArray(b,a){
                for (var i = 0; i <= a.length - 1; i++) {
                    if(a[i] == b){
                        return true;
                    }
                    return false;
                };
            }
        function css(obj, attr) {
            if(obj.currentStyle) {
                return obj.currentStyle[attr];
            }
            else {
                return getComputedStyle(obj ,false )[attr];
            }
    
        }
        window.onload = function() {
            box.onclick = function() {
                animate(box ,{'width':'400px','height':'600px'} ,1000 ,function() {
                    animate(this ,{'transform':'rotate(180deg)'},1000 ,function() {
                        animate(this ,{'width':'100px'},1000 ,function() {
                            animate(this ,{'height':'100px'},1000 ,function() {
                            alert(1)
                            })
                        })
                    })
                })
            }
        }
        </script>
    </head>
    <body>
    <div id="box">
        
    </div>
    </body>
    </html>
  • 相关阅读:
    让HTML5来为你定位(转)
    Web开发者应知的URL编码知识(转)
    Web开发:URL编码与解码(转)
    用virtualenv建立多个Python独立开发环境(转)
    使用Ajax方式POST JSON数据包(转)
    俞敏洪:我和马云就差了8个字...(转)
    HTTP返回码中301与302的区别(转)
    Postgresql 正则表达式(转)
    【双十一狂欢,一触即发!】安全圈的学习节|绝对省钱攻略
    安全运维中基线检查的自动化之ansible工具巧用
  • 原文地址:https://www.cnblogs.com/dsphper/p/4303225.html
Copyright © 2011-2022 走看看