js多个物体运动的问题1
问题2
http://www.cnblogs.com/huaci/p/3854304.html
用js写一个物体的运动很简单。如果一个页面有多个物体在运动,它会不会出问题呢?
ok,我们来看一个示例
让多个div变宽
现象:onmouseover时,div宽度变宽;onmouseout时,div恢复原大小
html部分
<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
<style>
div { width:100px; height:30px; margin:10px; background:green;}
</style>
js部分
<script> 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停住了,收不回去了
原因:分析上面代码,原来是进入一个新的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,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>
下一节,问题2
http://www.cnblogs.com/huaci/p/3854304.html
js多个物体运动的问题1的更多相关文章
- js多个物体运动问题2
问题1 http://www.cnblogs.com/huaci/p/3854216.html 在上一讲问题1,我们可以整理出2点: 1,定时器作为运动物体的属性 2,startMove方法,参数要传 ...
- js动画---多物体运动
对于多物体运动和单个物体运动来说,没有特别大的区别,实现原理基本上是一样的,都是通过定时器来实现的,但是多物体有一些地方需要注意,具体哪些需要注意,我将在下面的程序中说明. 首先,我们需要建立几个li ...
- JS定时器做物体运动
JS定时器是函数 setInterval(函数体/函数名 , 时间) 清楚定时器 clearInterval(函数) 时间单位(毫秒) 1000毫秒 = 1秒 首先我们要知道用JS定时器能干什么? ...
- js实现多物体运动框架并兼容各浏览器
首先,我们须要知道在js中获取对象的宽度如offsetWidth等.可能会存在一些小小的bug.原因之中的一个在于offsetWidth只不过获取盒子模型中内容的部分宽度.并不包括内边距,边框和外边距 ...
- js 运动函数篇 (一) (匀速运动、缓冲运动、多物体运动、多物体不同值运动、多物体多值运动)层层深入
前言: 本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽. 本篇文章为您分析一下原生JS写 匀速运动.缓冲运动.多物体运 ...
- js动画之多物体运动
多个物体这不能使用一个定时器了,要给每个物体一个定时器 <!DOCTYPE html> <html lang="en"> <head> < ...
- [js]多个物体的运动
与单个的区别:得知道哪个在动,所以运动函数需要两个参数,出了目标iTarget之外,还要obj.另外需要多个计数器,否则当一个还没运动完就移入另一个物体会发生卡壳 window.onload=func ...
- three.js之让物体动起来方式(一)移动摄像机
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 【unity3d游戏开发脚本笔记之一:坐标系选择对物体运动的影响】
时间:2016年9月24日17:38:21 作者:yexiaopeng 博客园 在unity3d的世界中,其坐标系可分为四种,世界坐标系-WorldSpace 本地坐标系-LocalS ...
随机推荐
- java学习笔记06--正则表达式
java学习笔记06--正则表达式 正则表达式可以方便的对数据进行匹配,可以执行更加复杂的字符串验证.拆分.替换等操作. 例如:现在要去判断一个字符串是否由数字组成,则可以有以下的两种做法 不使用正则 ...
- STL的一些泛型算法
源地址:http://blog.csdn.net/byijie/article/details/8142859 从福州大学资料里摘下来的我现在能理解的泛型算法 algorithm min(a,b) 返 ...
- 访何红辉:谈谈Android源码中的设计模式
最近Android 6.0版本的源代码开放下载,刚好分析Android源码的技术书籍<Android源码设计模式解析与实战>上市,我们邀请到它的作者何红辉,来谈谈Android源码中的设计 ...
- PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区
PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区 PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具
- Servlet:通过初始参数实现权限访问某个文件、页面
目录结构 src 目录下com.xieyuan包MyServlet.java文件(Servlet文件) package com.xieyuan; import java.awt.Color; impo ...
- tomcat实现多端口、多域名访问
tomcat实现多端口访问 tomcat可以实现:多个端口访问同一个web应用.不同的应用通过不同的域名进行访问. 本文介绍的都是只启动一个tomcat服务的情况下,当然,实现这些功能也可以通过启动多 ...
- hdu3001(状压dp)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=3001 题意:n 个城市已经 m 条路 以及对应路费 c,要求遍历所有城市最少的路费,每个城市不能超过2 ...
- NYOJ 12 喷水装置(二)
pid=12">喷水装置(二) 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描写叙述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n( ...
- Phaser是一款专门用于桌面及移动HTML5 2D游戏开发的开源免费框架
Phaser是一款专门用于桌面及移动HTML5 2D游戏开发的开源免费框架,提供JavaScript和TypeScript双重支持,内置游戏对象的物理属性,采用Pixi.js引擎以加快Canvas和W ...
- 使用Visual Studio 创建可视Web Part部件
使用Visual Studio 创建可视Web Part部件 可视Web Part部件是很强大的Web 部件.它提供内置设计器创建你的用户界面. 本文主要解说怎样使用Visual Studio 创建可 ...