本文实例为大家分享了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;
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代码:
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)
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。