zoukankan      html  css  js  c++  java
  • JS动画完美框架

    html部分

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <link href="../css/default.css" rel="stylesheet">
                <script src="../js/main.js">
                </script>
                <meta charset="utf-8">
                    <title>
                        Document
                    </title>
                    <script type="text/javascript">
                        window.onload=function(){
                            var div=document.getElementsByTagName('div');
                            for(var i=0;i<div.length;i++){
                                div[i].timer=null;
                                
                                  div[i].onmouseover = function() {
                // var _this = this;
                // var _this2 = _this;
                startMove(this, {400,height:400,opacity:100});
                //     startMove(_this, 400, 'height', function() {
                //         startMove(_this2, 100, 'opacity');
                //     });
                // }); //用this可以调取当前的节点对象
            };
            div[i].onmouseout = function() {
                // var _this = this;
                // var _this2 = _this;
                startMove(this,{200,height:200,opacity:30});
                //     startMove(_this, 200, 'height', function() {
                //         startMove(_this2, 200, 'width');
                //     });
                // }); //用this可以调取当前的节点对象
            };
    
                            }
    
    };
                    </script>
                </meta>
            </link>
        </head>
        <body>
            <div id="div1">
            </div>
            <div id="div2">
            </div>
        </body>
    </html>

    js部分

    function getStyle(obj, attr) {
        if (obj.currentStyle) {
            return obj.currentStyle[attr];//针对IE获取样式
        } else {
            return getComputedStyle(obj, false)[attr];//针对非IE获取样式。
        }
    } //获取样式的好处,是防止出现obj.offsetWidth与boder这样的Bug。
    function startMove(obj, json, fn) { //iTarget是具体的数字,attr是宽或高或透明度之类的。json[attr],包括2者
        clearInterval(obj.timer); //清除计时器
        obj.timer = setInterval(function() {
    var flag=true;//假设所有都到达了目标
    for (var attr in json) { //用json,这样的话,可以2个函数同时运行。 var icur = 0; var speed = 0; if (attr == 'opacity') { icur = Math.round(parseFloat(getStyle(obj, attr)) * 100); //这里获取到的是透明度 } else { icur = parseInt(getStyle(obj, attr)); //因为获取到的宽或者高是小数,所以需要强制转换下,这里获取到的是宽高之类的 } /*上面部分是获取具体的值,及是否是透明度*/ speed = (json[attr] - icur) / 8; //因为这里的attr不能直接代表obj.offsetLeft,要用样式去获取. //json[attr]代替iTarget《==》speed=(iTarget-obj.offsetLeft)/8 speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); if(json[attr] != icur) { flag=false; }
                 if(attr == 'opacity') {
                        obj.style[attr] = (icur + speed) / 100; //icur+speed是当前的透明度加上变化的速度
                        obj.style.filter = 'alpha(opacity' + (icur + speed) + ')';
                    } else {
                        obj.style[attr] = icur + speed + 'px';
                    }
                  if(flag) {
                    clearInterval(obj.timer);
                    if (fn) {
                        fn(); //如果有回调函数就执行回调函数。
                    }
                }
            }
        }, 30);
    }

    css部分

    * {
        margin: 0;
        padding: 0
    }
    
    div {
        width: 200px;
        height: 200px;
        filter: alpha(opacity:30);//针对IE的透明度
        opacity: 0.3;//非IE的透明度
        background: blue;
        margin-bottom: 20px;
    }

    js  分4部分  

    1.判断类型,是透明度还是宽或者高

    2.算运动速度

    3.检测停止

    4.清除计时器

  • 相关阅读:
    重写、隐藏基类方法(new, override)
    Java FileHandler
    JMS example
    DB Locker
    计算与所有线段都重合的线段数目
    [转载] linux内存 问题
    oracle rownum & rowid mark a good tool
    java Wget Download
    java new way to implement singleton, use enum
    HttpPut Multipart and handle https request.
  • 原文地址:https://www.cnblogs.com/yi-mi-yangguang/p/6375760.html
Copyright © 2011-2022 走看看