Javascript 多物体运动的实现
2015-01-23 14:46
447 查看
这篇文章主要介绍了Javascript 多物体运动的实现,需要的朋友可以参考下
我们先来看下之前的运动的代码,是否支持多物体运动,会出现怎么样的问题。
代码如下:
代码如下:
以下是Javascript 代码:
代码如下:
此时当鼠标移入到第一个div 时,他是正常运行的。但是如果现在又移动到第二个或者第三个div时候就会出现bug。
image 这个是什么原因呢? 看图可以看出并没有运动完成。实际上是这样的,
整个程序就一个定时器, 比如第一个div开始动了,第二个div 鼠标移入了 前一个定时器就被干掉了,那么自然就卡在那里了。
所以最大的问题就是整个程序就只有一个定时器。那么怎么解决这个问题呢?
解决方案:
其实很简单,把定时器作为一个物体的属性加上,那么每个物体都有一个定时器在,当关闭定时器的时候是关闭物体上的定时器,开也是物体上的定时器
那么他们之间就可以完全互不干扰的运行。
看下修改后的Javascript代码:
代码如下:
这样程序就没有问题了,能够支持多物体的运动。
下面是一个多物体运动的实例哦。
效果:
思路:
利用setInterval计时器进行运动,offsetWidth实现宽度的变动,在用onmouseover将终点和所选中的DIV放入参数再进行缓冲运动。
代码如下:
我们先来看下之前的运动的代码,是否支持多物体运动,会出现怎么样的问题。
代码如下:
<style type="text/css"> div { width: 100px; height: 50px; background: red; margin: 10px; } </style>
代码如下:
<body> <div></div> <div></div> <div></div> </body>
以下是Javascript 代码:
代码如下:
<script type="text/javascript"> window.onload = function() { var aDiv = document.getElementsByTagName('div'); for (var i = 0; i < aDiv.length; i++) { aDiv[i].onmouseover = function() { startMove(this, 400); }; aDiv[i].onmouseout = function() { startMove(this, 100); }; } } var timer = null; function startMove(obj, iTarget) { clearInterval(timer); timer = setInterval(function() { var speed = (iTarget - obj.offsetWidth) / 6; speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); if (obj.offsetWidth == iTarget) { clearInterval(timer); } else { obj.style.width = obj.offsetWidth + speed + 'px'; } }, 30); } </script>
此时当鼠标移入到第一个div 时,他是正常运行的。但是如果现在又移动到第二个或者第三个div时候就会出现bug。
image 这个是什么原因呢? 看图可以看出并没有运动完成。实际上是这样的,
整个程序就一个定时器, 比如第一个div开始动了,第二个div 鼠标移入了 前一个定时器就被干掉了,那么自然就卡在那里了。
所以最大的问题就是整个程序就只有一个定时器。那么怎么解决这个问题呢?
解决方案:
其实很简单,把定时器作为一个物体的属性加上,那么每个物体都有一个定时器在,当关闭定时器的时候是关闭物体上的定时器,开也是物体上的定时器
那么他们之间就可以完全互不干扰的运行。
看下修改后的Javascript代码:
代码如下:
<script type="text/javascript"> 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, 100); }; } } 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>
这样程序就没有问题了,能够支持多物体的运动。
下面是一个多物体运动的实例哦。
效果:
思路:
利用setInterval计时器进行运动,offsetWidth实现宽度的变动,在用onmouseover将终点和所选中的DIV放入参数再进行缓冲运动。
代码如下:
<head runat="server"> <title></title> <style type="text/css"> div { width: 100px; height: 50px; background: #0000FF; margin: 10px; } </style> <script type="text/javascript"> window.onload = function () { var oDiv = document.getElementsByTagName('div'); for (var i = 0; i < oDiv.length; i++) { oDiv[i].timer = null; //给买个DIV做个标记,用以关闭相应DIV的定时器 oDiv[i].onmouseover = function () { move(this, 400); //给定时器输出参数 } oDiv[i].onmouseout = function () { move(this, 100); } } }; function move(div, end) { clearInterval(div.timer); div.timer = setInterval(function () { var speed = (end - div.offsetWidth) / 5; //(终点-要走的宽度)/缩放系数=DIV移动的速度 speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); //小数取整,也就是进位取整 if (div.offsetWidth == end) { //当到达终点时关闭计时器 clearInterval(div.timer); } else { div.style.width = div.offsetWidth + speed + 'px'; //移动DIV的宽度 } }, 30) } </script> </head> <body> <div> </div> <div> </div> <div> </div> </body>
相关文章推荐
- Javascript 多物体运动的实现
- javascript多物体运动实现方法分析
- Javascript 多物体运动的实现
- javascript多物体运动实现方法分析
- 浅谈Javascript如何实现匀速运动
- JavaScript实现的抛物线运动效果
- JS实现多物体width缓冲运动实例
- javascript实现椭圆运动轨迹
- javascript运动框架多物体运动---1
- 使用“天地图”实现“百度地图”的 GPS单点沿线运动,来模拟物体运动轨迹。
- HTML+JavaScript实现链式运动特效
- javascript实现10个球随机运动、碰撞实例详解
- Javascript实现重力弹跳拖拽运动效果
- javascript原生代码实现通用运动框架
- 物体匀速运动的实现
- JS实现多物体缓冲运动实例代码
- javascript 多物体任意运动框架
- javascript每日一练(十一)——多物体运动
- JS实现多物体缓冲运动实例代码
- JavaScript 创建运动框架的实现代码