郭志敏的程序员书屋前端学习笔记前端那些事儿

JS运动搞不定 你缺少一个运动框架而已

2016-11-16  本文已影响1835人  小夫特

写在前面 初学者 大家一起学习 有不对的请指出哦~

简书1.jpg

01


可以解决的运动

02


辅助函数

需要用到的一个小函数,当我们获取样式时,通过 Elements.style.attribute 只能获取到行间样式 ,而我们需要操作的大都是css代码内的,所以使用这个函数

function getStyle(obj, attr) {
    if(obj.currentStyle) {
        return obj.currentStyle[attr];
    } else {
        return getComputedStyle(obj, false)[attr];
    }
}

03


运动框架

function startMove(obj, json, endFun) {
    //开始前关闭之前obj上的定时器
    clearInterval(obj.timer); 

    //定时器
    obj.timer = setInterval(function() {

        var bStop = true; //假设所有值都到目标
        for(var attr in json) {//循环json数组
            
            //单独处理透明度
            if(attr == 'opacity') {
                var cur = Math.round(parseFloat(getStyle(obj, attr)) * 100);
            } else {
                var cur = parseInt(getStyle(obj, attr));
            }
            //速度处理
            var speed = (json[attr] - cur) / 6;
            speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);

            //如果当前的没到目标值
            if(cur != json[attr]) 
                bStop = false;
            
            //运动
            if(attr == 'opacity') {
                obj.style.opacity = (cur + speed) / 100;
                obj.style.filter = 'alpha(opacity:' + (cur + speed) + ')';
            } else {
                obj.style[attr] = cur + speed + 'px';
            }
        }
        //所有的都到达目标值
        if(bStop) {
            clearInterval(obj.timer);
            if(endFun) endFun();
        }
    }, 30);  }

04


使用

  1. 引入JS
  2. 在你需要的地方使用startMove()函数
  3. 这里只是展示一个简单的小例子,其实可以用的远比这多,图片从高度的运动,能使得图片看上去是从上往下的 等等
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            #div1 {
                height: 50px;width: 50px;
                background: red;opacity: 0.5;
                filter: alpha(opacity: 50);
                position: absolute;top: 0;
                                border: 1px solid black;
            }
        </style>
        <script src="Move2.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript">
            window.onload = function() {
                var oDiv = document.getElementById('div1');
                oDiv.onmouseover = function() {
                    startMove(oDiv, {width: 100,height: 150,opacity: 100}, function() {
                        startMove(oDiv, {width: 150});
                    });
                };
                oDiv.onmouseout = function() {
                    startMove(oDiv, {borderWidth:10});
                };
            };
        </script>
    </head>
    <body>
        <div id="div1"></div>
    </body>
</html>

05


Move.js 框架下载

上一篇 下一篇

猜你喜欢

热点阅读