JS实现多物体运动

Ida ·
更新时间:2024-09-21
· 1961 次阅读

本文实例为大家分享了JS实现多物体运动的具体代码,供大家参考,具体内容如下

实现效果图:

描述:用JS实现简单的多物体运动动画,淡出淡化效果,当鼠标放在不同div上时,div会由宽100PX慢慢变成200PX,当鼠标移开之后div恢复原状,依次来,实现多物体运动效果。

基本步骤:

1.通过getElementsByTagName获取到要做多物体运动的元素

2.然后for循环遍历元素,添加事件

3.定义startMove函数,需要两个参数,当前“做运动”的元素,和目标值target

具体代码如下:

HTML代码:

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <title>Document</title>     <script src="startMove.js"></script>     <style>         div{             width: 100px;             height: 100px;             background: red;             /* opacity: 1; */             margin: 10px 0;         }     </style> </head> <body>     <div></div>     <div></div>     <div></div>     <div></div>     <div></div>     <script>         // 改变div的width 、height、透明度、边框 {width:500,height:500,opacity:0.5}         var divs = document.getElementsByTagName('div');         for(var i = 0;i<divs.length;i++){             divs[i].onmouseenter = startMove(divs[i],{width:200,height:200,opacity:50},function(){                 alert('over!')             });         }         for(var i = 0;i<divs.length;i++){             divs[i].onmouseleave = startMove(divs[i],{width:100,height:100,opacity:100});         }     </script> </body> </html>

js代码:

/**  *   * @param {*} dom 改变形态的dom对象  * @param {*} attrObj 要改变的所有元素的属性形成的对象  * @param {*} target 改变的目标值  * @returns   */ function startMove(dom, attrObj, callback) {     var timer = null;     var speed = null;     // 元素属性的当前值     var iCur = null;     return function() {         clearInterval(dom.timer);         dom.timer = setInterval(function() {             var flag = true;             // 0. 循环遍历改变的属性对象 将每一个属性的形态都进行运动             for (var param in attrObj) {                 // 1. 判断改变的属性是不是透明度                 if (param === 'opacity') {                     iCur = getComputedStyle(dom)['opacity'] * 100;                     // console.log(iCur);                 } else {                     iCur = +getComputedStyle(dom)[param].slice(0, -2);                     console.log(iCur);                 }                 // 2. 求出speed                 speed = (attrObj[param] - iCur) / 7;                 // 如果正值 向上取整(0.28 -> 1)  如果是负值 向下取整(-0.28 -> -1)                 speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);                 // 改变div的属性的值                 if (param === 'opacity') {                     dom.style.opacity = (iCur + speed) / 100;                 } else {                     dom.style[param] = iCur + speed + 'px';                 }                 // 判断div所有属性是否到达目标值                 if (iCur !== attrObj[param]) {                     flag = false;                 }             }             if (flag) {                 // 所有属性值都到了目标阶段 可以清除定时器                 clearInterval(dom.timer);                 //                  typeof callback === 'function' && callback();             }             // 上一个属性运动结束之后 再让下一个属性开始运行             // 让一个属性的目标值到达就停止定时器         }, 60)     } }



js实现 运动 js

需要 登录 后方可回复, 如果你还没有账号请 注册新账号