【JavaScript】原生js实现多个元素运动、一套运动框架改变任意样式

多个元素运动

注意:多个元素,定时器需要多个。

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {width: 50px;height: 50px;background: red;margin: 20px;}
    </style>
</head>

<body>
    <div></div>
    <div></div>
    <div></div>
    <script>
        window.onload = function () {
            var aDiv = document.getElementsByTagName('div')
            for (var i = 0; i < aDiv.length; i++) {
                aDiv[i].timer = null; //每个元素都有各自对应的定时器
                aDiv[i].onmouseover = function () {
                    startMove(this, '400')
                }
                aDiv[i].onmouseout = function () {
                    startMove(this, '50')
                }
            }
        }
        function startMove(obj, iTarget) { //将元素作为参数传入
            clearInterval(obj.timer) //移除该元素上的定时器
            obj.timer = setInterval(function () {
                var speed = (iTarget - obj.offsetWidth) / 6
                speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed)
                if (obj.offsetWidth == iTarget) {
                    clearInterval(obj.timer)
                } else {
                    obj.style.width = obj.offsetWidth + speed + 'px'
                }
            }, 30)
        }
    </script>
</body>

实例1、改变多个物体的透明度

多个元素运动中,所有的东西都不能共用,如果需要要定义成元素的属性。

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {width: 150px;height: 150px;background: red;margin: 20px;float: left;opacity: 0.3;}
    </style>
</head>

<body>
    <div></div>
    <div></div>
    <div></div>
    <script>
        window.onload = function () {
            var aDiv = document.getElementsByTagName('div')
            for (var i = 0; i < aDiv.length; i++) {
                aDiv[i].alpha = 30  //多元素运动中,所有的东西都不能公用,需要定义成元素的属性
                aDiv[i].timer = null; //每个元素都有各自对应的定时器
                aDiv[i].onmouseover = function () {
                    startMove(this, 100)
                }
                aDiv[i].onmouseout = function () {
                    startMove(this, 30)
                }
            }
        }
        function startMove(obj, iTarget) {
            clearInterval(obj.timer)
            obj.timer = setInterval(function () {
                var speed = (iTarget - obj.alpha) / 3
                speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed)
                if (obj.alpha == iTarget) {
                    clearInterval(obj.timer)
                } else {
                    console.log(speed)
                    obj.alpha = obj.alpha + speed
                    obj.style.opacity = (obj.alpha) / 100
                }
            }, 30)
        }
    </script>
</body>

任意值运动框架

任意改变元素 宽度、高度、字号大小、border大小等,可以设置 px 的属性,以及 opacity。

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 150px; height: 150px; background: yellow; margin: 20px; float: left;
        }
    </style>
</head>

<body>
    <div id="div1">变宽</div>
    <div id="div2">变高</div>
    <div id="div3">改变字号</div>
    <div id="div4">改变透明度</div>
    <script>
        window.onload = function () {
            var oDiv1 = document.getElementById('div1')
            var oDiv2 = document.getElementById('div2')
            var oDiv3 = document.getElementById('div3')
            var oDiv4 = document.getElementById('div4')
            oDiv1.onmouseover = function () {
                startMove(this,'width', 1000)
            }
            oDiv1.onmouseout = function () {
                startMove(this,'width', 300)
            }
            oDiv2.onmouseover = function () {
                startMove(this,'height',1000)
            }
            oDiv2.onmouseout = function () {
                startMove(this,'height', 300)
            }
            oDiv3.onmouseover = function () {
                startMove(this,'fontSize',100)
            }
            oDiv3.onmouseout = function () {
                startMove(this,'fontSize',30)
            }
            oDiv4.onmouseover = function () {
                startMove(this,'opacity',100)
            }
            oDiv4.onmouseout = function () {
                startMove(this,'opacity',30)
            }

        }

        function getStyle(obj, name) { //获取非行间样式
            if (obj.currentStyle) {
                return obj.currentStyle[name]
            } else {
                return getComputedStyle(obj, false)[name]
            }
        }

        function startMove(obj, attr, iTarget) {
            clearInterval(obj.timer)
            obj.timer = setInterval(function () {
                var cur = 0
                if(attr == 'opacity'){ //判断为 opacity 时
                    cur = Math.round(parseFloat(getStyle(obj, attr)) * 100)
                }
                else{
                    cur = parseInt(getStyle(obj, attr))
                }
                var speed = (iTarget - cur) / 6
                speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed)
                if (cur == iTarget) {
                    clearInterval(obj.timer)
                } else {
                    if(attr == 'opacity'){
                        obj.style.opacity = (cur + speed) / 100
                    }else{
                        obj.style[attr] = cur + speed + 'px'
                    }
                    
                }
            }, 30)
        }
    </script>
</body>

猜你喜欢

转载自blog.csdn.net/meichaoWen/article/details/112686403