多属性运动

代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        #box {
            width: 150px;
            height: 150px;
            background: darkcyan;
            opacity: 0.2;
            position: absolute;
            border: 2px solid #ccc;
            left: 0;
            top: 0;
        }
    </style>
</head>

<body>
    <div id="box"></div>

    <script>
        var box = document.getElementById('box');
        box.onclick = function () {
            run(box, {            // 将多个元素属性作为对象方式传进来
                'width': 400,
                'height': 400,
                'opacity': 100
            });
        }





        function run(ele, json) {  // json 对象
            clearInterval(ele.timer);
            ele.timer = setInterval(function () {  // 开启每个元素自己的定时器
                var tag = true;  // 开关标志
                for (var i in json) {  // i:属性名   json[i]:属性值
                    if (i == 'opacity') {
                        var cur = parseFloat(getStyle(ele, i)) * 100;  // 透明度
                    } else {
                        var cur = parseInt(getStyle(ele, i));  // 大小,位置等 当前值
                    }
                    //  (目标值 - 当前值)/ 缩放比例
                    var speed = (json[i] - cur) / 10;  // 变速
                    speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);  // 向右走 变速正,需要向上取整,反之向左走 变速负数,需要向下取整

                    if(cur != json[i]){  // 当前值未达到目标值时
                        tag = false;
                    }
                    // 赋值
                    if (i == 'opacity') {  // 透明度赋值
                        ele.style[i] = (cur + speed) / 100;
                    } else {
                        ele.style[i] = cur + speed + 'px';
                    }

                    if(tag){
                        clearInterval(ele.timer);
                    }

                }
            }, 50)
        }



        // 获取元素非行间样式
        function getStyle(ele, attr) {
            if (window.getComputedStyle) {  // 标准
                return getComputedStyle(ele)[attr];
            } else {  // ie
                return ele.currentStyle[attr];
            }
        }
    </script>
</body>

</html>

 

效果

posted @ 2020-07-09 20:32  石海莹  阅读(124)  评论(0编辑  收藏  举报