本文详解JavaScript中多物体同时运动的实现方法。核心在于为每个运动对象绑定独立的定时器与属性,避免状态冲突。通过具体HTML与JS代码示例,展示如何控制多个元素的宽度、透明度等属性变化,适用于前端交互开发参考。
多物体运动核心原理
本文详细介绍JavaScript中实现多物体同时运动的方案,旨在为开发者提供实用的参考案例。
实现的关键点在于:每个运动物体的定时器必须作为该物体的独立属性存在,彼此互不干扰。这些属性需与具体的运动对象严格绑定,严禁多个对象共用同一个定时器或属性,否则会导致运动状态混乱。
实际运行效果如下图所示:

代码实现示例
具体实现代码示例如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>多物体运动</title>
<style>
div{ width:100px; height:100px; background:red; float:left; margin:10px; border:1px solid black; opacity:0.3; filter:alpha(opacity=30);}
</style>
<script>
window.onload = function()
{
var aDiv = document.getElementsByTagName('div');
aDiv[0].onmouseover = function()
{
startMove(this, 'width', 300);
};
aDiv[0].onmouseout = function()
{
startMove(this, 'width', 100);
};
aDiv[1].onmouseover = function()
{
startMove(this, 'height', 300);
};
aDiv[1].onmouseout = function()
{
startMove(this, 'height', 100);
};
aDiv[2].onmouseover = function()
{
startMove(this, 'opacity', 100);
};
aDiv[2].onmouseout = function()
{
startMove(this, 'opacity', 30);
};
aDiv[3].onmouseover = function()
{
startMove(this, 'borderWidth', 20);
};
aDiv[3].onmouseout = function()
{
startMove(this, 'borderWidth', 1);
};
};
function getStyle(obj, attr)
{
if(obj.currentStyle){
return obj.currentStyle[attr];
}else{
return getComputedStyle(obj, false)[attr];
}
}
function startMove(obj, attr, iTarget)
{
clearInterval(obj.timer);
obj.timer = setInterval(function(){
var iCur = 0;
if(attr == 'opacity'){
iCur = parseInt(parseFloat(getStyle(obj, attr)) * 100);
}else{
iCur = parseInt(getStyle(obj, attr));
}
var iSpeed = (iTarget - iCur) / 8;
iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
if(iCur == iTarget){
clearInterval(obj.timer);
}else{
if(attr == 'opacity'){
obj.style.filter = 'alpha(opacity='+ (iCur+iSpeed) +')';
obj.style.opacity = (iCur+iSpeed)/100;
}else{
obj.style[attr] = iCur + iSpeed + 'px';
}
}
}, 30);
}
</script>
</head>
<body>
<div></div>
<div></div>
<div></div>
<div></div>
</body>
</html>
如需了解更多JavaScript运动效果相关技巧,可参考本站专题:《JavaScript运动效果与技巧汇总》。
希望本文提供的实现思路与方法,能对大家的JavaScript程序设计工作有所帮助。