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)
                        })
                    })
                })
            })
        }
    }  // 本人Gmail:lvfujun2015#gmail.com
    </script>
</head>
<body>
<div id="box">

</div>
</body>
</html>
时间: 2024-10-15 12:56:29

js原生复杂实现animate操作Css3属性(升级版!)的相关文章

js原生简单实现animate操作Css3属性

最近写HTML5+CSS3页面发现Jquery没法操作transform:旋转等一些效果所以自己简单写了个 <script type="text/javascript"> window.onload = function(){var func = function(){ var isdie = false; this.animate = function(obj,name,time){ var arr1 = ['rotate']; if(!isdie){ var num =

js原生设计模式——8单例模式之简约版属性样式方法库

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>单例模式——在js中就是指的单个对象,可用于命名空间声明</title> </head><body>    <div id="box"></div></body><

写插件时遇到的一个小问题,关于animate和css3的问题

昨天写代码时,偶然想到了如果我们把css3属性放在animate中,指定时间.能否实现动画呢.举个例子吧: <script> $(".box").animate({ "-webkit-transform":"rotate(90deg)" },1000); </script> 如上代码,box会在一秒种从0deg旋转到90deg吗?答案是否定的. 于是我查了下jquery的手册,发现animate的第一参数中确实不能放css

认识JQuery,JQuery的优势、语法、多库冲突、JS原生对象和JQuery对象之间相互转换和DOM操作,常用的方法

(一)认识JQuery  JQuery是一个JavaScript库,它通过封装原生的JavaScript函数得到一套定义好的方法    JQuery的主旨:以更少的代码,实现更多的功能 (二)JQuery的优势 1)可以像CSS一样访问和操作DOM 2)修改CSS控制页面外观 3)简化JS代码操作 4)事件代理更加容易 5)动画效果使用方便 6) Ajax技术更加完美 7)大量的基于Jquery的插件 8)可以自定义扩展功能插件 (三)JQuery的语法 格式:$(selector).actio

Java节点操作(JS原生+JQuery)

Java节点操作(JS原生+JQuery) 节点关系与类型 任何HTML元素,都有nodeType属性.值有1~12,常用的有: 1.元素节点 2.文本节点 8.注释节点 9.document节点(HTML文档对象) 10.DTD(文档类型定义) box.nodeType       //返回值1,获得nodeType属性 box.childNodes            //获得全部子元素 //兼容性问题 注意:在chrome,IE9 IE10高版本的浏览器里面的回车都认为是节点,IE6,7

jQuery框架使用,jq选择器,jq操作页面内容, jq操作类名,jq操作全局属性,jq获取盒子信息,jq获取位置信息,js/jq页面加载完毕事件,jq事件

jq选择器 // 获取所有的页面元素jq对象 $('css3选择器语法'); var $box = $(".box:nth-child(1)"); 获取的是jq对象数组 // 拿到指定的页面元素jq对象 $('css3选择器语法').eq(index); var $box = $(".box").eq(1); 获取的是jq对象数组 // jq 转 js ( jq对像就是由数组包裹的js对象 ) box1 = $box[0] 从数组里取出来 box1 = $box.g

move.js操作CSS3动画

move.js是一款简单的支持CSS3动画的JavaScript库,对于对CSS3的操作不是很熟悉的人来说,使用move.js提供的方法操作CSS3动画更简单方便. 要想使用move.js提供的方法,首先应在我们的HTML页面中引入move.js: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8

js原生的url操作函数,及使用方法。(附:下边还有jquery对url里的中文解码函数)

js原生的url操作函数,完善的. /*****************************/ /* 动态修改url */ /*****************************/ var LG=(function(lg){ var objURL=function(url){ this.ourl=url||window.location.href; this.href="";//?前面部分 this.params={};//url参数对象 this.jing="&q

JS判断浏览器是否支持某一个CSS3属性

1.引子 css3的出现让浏览器的表现更加的丰富多彩,表现冲击最大的就是动画了,在日常书写动画的时候,很有必要去事先判断浏览器是否支持,尤其是在写CSS3动画库的时候.比如transition的animation-play-state,就只有部分浏览器支持. 2.检测方法 下面的方法可以使用脚本判断浏览器是否支持某一个CSS3属性: Js代码   /** * 判断浏览器是否支持某一个CSS3属性 * @param {String} 属性名称 * @return {Boolean} true/fa