zoukankan      html  css  js  c++  java
  • 运动框架

    完美运动框架,包括有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>
  • 相关阅读:
    git fetch 和git pull 的差别
    解决npm install安装慢的问题
    Git本地分支和远程分支关联
    phalapi 2.14 使用(一)增加顶级命名空间、调整返回结构字段
    vue-element-template实战(五) 获取后端路由表动态生成权限
    vue-element-template实战(四)使用mock数据,新增用户管理界面
    使用phalapi 2.14版本的问题及解决办法
    关于vue
    git详细操作
    三次握手四次挥手理解
  • 原文地址:https://www.cnblogs.com/double405/p/4637505.html
Copyright © 2011-2022 走看看