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

    本人也是菜鸟一枚,从网上搜索了很久,封装备注了一套运动框架,加强大家对此的理解,希望多多提议。

        getId:function(elemId){
            return document.getElementById(elemId);
        },
        getStyle:function(obj,attr){
            return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj, false)[attr];
        },
        startMove:function(obj,json,fnEnd){
            /*
                obj 代表需要运动的对象
                json 需要运动的属性的集合 例如{'width':100,'height':100}
                fnEnd 运动结束时的函数
            */
            var _this = this;
            clearInterval(obj.timer); //若物体有运动,先清除计时器
    
            obj.timer = setInterval(function(){
                var eStop = true;  //表示物体运动
                for(var attr in json){
                    var start = 0;
                    if(attr == 'opacity'){ //如果是透明度的属性
                        start = Math.round(Math.floor(_this.getStyle(obj,attr)*100));
                    }else{
                        start = parseInt(_this.getStyle(obj,attr));
                    }
                    //如果
                    if(start != json[attr]){
                        eStop = false;
                    }
    
                    //设置速度的值
                    var speed = (json[attr] - start)/6
                    //如果大于0就向上取整,否则就向下取整;
                    speed > 0 ? Math.ceil(speed) : Math.floor(speed);
                    //如果透明度的变化
                    if(attr == 'opacity'){
                        obj.style.filter = 'alpha(opacity:'+ (start + speed) +')';//设置IE
                        obj.style.opacity = (start+ speed)/100;
                    }else{
                        //此时就是除了透明度的其他属性
                        obj.style[attr] = start + speed + 'px';
                    }
                }
                //如果eStop == true 时 完成运动 到达目标点 清除计时器
                if(eStop){
                    clearInterval(obj.timer);
                    if(fnEnd) fnEnd();
                }
            },30)
    
        }

    上面是我封装的三个方法:

    调用如下

        elemMouse:function(){
            var _this = this;
            var conPhone = this.getId('conPhone');
            this.addEvent(conPhone,'mouseover',function(){
                _this.startMove(conPhone,{'width':500,'height':500,},function(){
                    alert('运动结束')
                })
            })
            this.addEvent(conPhone,'mouseout',function(){
                _this.startMove(conPhone,{'width':300,'height':50},function(){
                    alert('运动结束')
                })
            })
        }
  • 相关阅读:
    如果获取 上传域的文件名
    更改织梦后台广告
    html5 让IE6,7支持HTML5语义化标签的文件
    如何获取选中的复选框
    手机下的ev.pageX无效
    Ajax
    列出远程git的全部分支
    扫描局域网中Gogs服务器(ruby)
    Xcode删除无用的Symbols信息
    Docker
  • 原文地址:https://www.cnblogs.com/my-effort/p/6146025.html
Copyright © 2011-2022 走看看