首页 > 其他 > 详细

多属性运动

时间:2020-07-09 21:07:00      阅读:75      评论:0      收藏:0      [点我收藏+]

代码

<!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>

 

效果

技术分享图片

多属性运动

原文:https://www.cnblogs.com/shihaiying/p/13276029.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!