• 运动框架


    完美运动框架,包括有style和opacity的样式实现

    //以下是运动框架的内容
    
    function getStyle(obj, name)
    {
        if(obj.currentStyle) //仅IE
        {
            return obj.currentStyle[name];
        }
        else  //兼容FF浏览器
        {
            return getComputedStyle(obj, false)[name];
        }
    }
    
    function startMove(obj,json,fnEnd)//比普通的运动框架写多了一个函数,说明下一阶段要执行的运动
    {
        clearInterval(obj.timer);
        obj.timer=setInterval(function (){
            var bStop = true; //假设:所有值都已经到了
    
            for(var attr in json){
            var cur=0;
            
            if(attr=='opacity')
            {
                cur=Math.round(parseFloat(getStyle(obj, attr))*100);
            }
            else
            {
                cur=parseInt(getStyle(obj, attr));
            }
            
            var speed=(json[attr]-cur)/10;
            speed=speed>0?Math.ceil(speed):Math.floor(speed);
            
            if(cur!=json[attr]) //如果有没有到达的值
            bStop = false;
        
                if(attr=='opacity')
                {
                    obj.style.filter='alpha(opacity:'+(cur+speed)+')';
                    obj.style.opacity=(cur+speed)/100;
                }
                else
                {
                    obj.style[attr]=cur+speed+'px';
                }
            }
                //结束循环后,清除定时器
            if(bStop){
                    clearInterval(obj.timer);
                    if(fnEnd) fnEnd();
                    //alert("a");
            }
        }, 30);
    }

    完整实现代码如下:

    <!doctype html>
    <html lang="en">
     <head>
      <meta charset="UTF-8">
     
      <title>完美运动框架</title>
      <style>
            #div1{width:200px;height:200px; background:red; filter:alpha(opacity:30);opacity:0.3;}
      </style>
        <script>
    
      window.onload = function(){
            var oBtn = document.getElementById('btn1');
            var oDiv = document.getElementById('div1');
    
            oBtn.onclick = function(){
                startMove(oDiv,{ 300,height: 300,opacity:100}
                );
            }
      }
        //以下是运动框架的内容
    
    function getStyle(obj, name)
    {
        if(obj.currentStyle) //仅IE
        {
            return obj.currentStyle[name];
        }
        else  //兼容FF浏览器
        {
            return getComputedStyle(obj, false)[name];
        }
    }
    
    function startMove(obj,json,fnEnd)//比普通的运动框架写多了一个函数,说明下一阶段要执行的运动
    {
        clearInterval(obj.timer);
        obj.timer=setInterval(function (){
            var bStop = true; //假设:所有值都已经到了
    
            for(var attr in json){
            var cur=0;
            
            if(attr=='opacity')
            {
                cur=Math.round(parseFloat(getStyle(obj, attr))*100);
            }
            else
            {
                cur=parseInt(getStyle(obj, attr));
            }
            
            var speed=(json[attr]-cur)/10;
            speed=speed>0?Math.ceil(speed):Math.floor(speed);
            
            if(cur!=json[attr]) //如果有没有到达的值
            bStop = false;
        
                if(attr=='opacity')
                {
                    obj.style.filter='alpha(opacity:'+(cur+speed)+')';
                    obj.style.opacity=(cur+speed)/100;
                }
                else
                {
                    obj.style[attr]=cur+speed+'px';
                }
            }
                //结束循环后,清除定时器
            if(bStop){
                    clearInterval(obj.timer);
                    if(fnEnd) fnEnd();
                    //alert("a");
            }
        }, 30);
    }
      </script>
     </head>
     <body>
    
      <input id ="btn1" type="button" value="运动"/>
      <div id="div1"></div>
     </body>
    </html>

    多物体运动框架js代码:

    首先还是做了style兼容处理,接着是startMove函数

    //以下是运动框架的内容
    
    function getStyle(obj, name)
    {
        if(obj.currentStyle) //仅IE
        {
            return obj.currentStyle[name];
        }
        else  //兼容FF浏览器
        {
            return getComputedStyle(obj, false)[name];
        }
    }
    
    function startMove(obj, attr, iTarget,fnEnd)//比普通的运动框架写多了一个函数,说明下一阶段要执行的运动
    {
        clearInterval(obj.timer);
        obj.timer=setInterval(function (){
            var cur=0;
            
            if(attr=='opacity')
            {
                cur=Math.round(parseFloat(getStyle(obj, attr))*100);
            }
            else
            {
                cur=parseInt(getStyle(obj, attr));
            }
            
            var speed=(iTarget-cur)/10;
            speed=speed>0?Math.ceil(speed):Math.floor(speed);
            
            if(cur==iTarget)
            {
                clearInterval(obj.timer);
                
                if(fnEnd)fnEnd();
            }
            else
            {
                if(attr=='opacity')
                {
                    obj.style.filter='alpha(opacity:'+(cur+speed)+')';
                    obj.style.opacity=(cur+speed)/100;
                }
                else
                {
                    obj.style[attr]=cur+speed+'px';
                }
            }
        }, 30);
    }

    完整代码实现如下:

    <!DOCTYPE HTML>
    <!--链式运动框架:运动分阶段进行,当运动停止的时候,执行下一个运动-->
    <html>
    <head>
    <meta charset="utf-8">
    <title></title>
    <style>
    div{width:100px;height:50px;background:red;filter:alpha(opacity:30);opacity:0.3;margin:10px;}
    </style>
    <script src="多物体move.js"></script>
    <script>
    window.onload=function ()
    {
        //var oDiv=document.getElementsByTagName('div');//先获取div元素
        var oDiv = document.getElementsByTagName('div');
        for(var i=0;i<oDiv.length;i++){
                //var 
                oDiv[i].onmouseover=function ()
                {        var that = this;
                        startMove(that,'width',300,function(){//先是宽变300
                        startMove(that,'height',300,function(){//当宽变300的时候,即运动结束时候开启另一个运动,使其高变为300
                        startMove(that,'opacity',100);//使透明度变成100,原来是30
    
                        });
                    
                    });
                };
                oDiv[i].onmouseout=function ()//当鼠标移出的时候,跟移进的时候效果相反即可。
                {
                        var that = this;
                        startMove(that,'width',100,function(){
                        startMove(that,'height',100,function(){
                        startMove(that,'opacity',30);
                        });
                
                    });
                };
        }
    };
    </script>
    </head>
    <body>
        <div id="div1"></div>
        <div id="div1"></div>
        <div id="div1"></div>
    </body>
    </html>
  • 相关阅读:
    CentOS6.0/RedHat Server 6.4安装配置过程 详细图解!
    关于Haproxy安装和配置:负载配置【haproxy.cfg】问题记录
    菜鸟学习Struts——bean标签库
    2013——2014总结
    高效程序员的45个习惯读书 ——敏捷开发修炼之道笔记之态度决定一切
    Hive深入浅出
    Java从入门到精通——调错篇之SVN 出现 Loced错误
    考试系统优化——准备工作
    深入解析:分布式系统的事务处理经典问题及模型(转载分享)
    黑客攻击 UVa11825
  • 原文地址:https://www.cnblogs.com/double405/p/4637505.html
Copyright © 2020-2023  润新知