问题1

http://www.cnblogs.com/huaci/p/3854216.html

在上一讲问题1,我们可以整理出2点:

1,定时器作为运动物体的属性

2,startMove方法,参数要传递2个:物体,目标值

那么,如果运动物体的属性值改变,是通过一个变量值来改变的话,这时候会有什么问题呢?

示例:多个Div淡入淡出

现象:onmouseover时,透明度降低;onmouseout时,透明度增加

看看它会有什么问题,请看下面代码

html部分:

<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
<div id="div4"></div> <style>
div { float:left; width:150px; height:200px; margin:20px; filter:alpha(opacity:30); opacity:0.3; background:green;}
</style>

  

js部分:

<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,100);
}
aDiv[i].onmouseout = function(){
startMove(this,30);
}
}
} var vAlpha = 30;
function startMove(obj, iTarget){
clearInterval(obj.timer);
obj.timer = setInterval(function(){
var speed = (iTarget - vAlpha)/6;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); if(vAlpha == iTarget){
clearInterval(obj.timer);
} else {
vAlpha +=speed;
obj.style.filter = "alpha(opacity:" + vAlpha + ")";
obj.style.opacity = vAlpha; document.title = vAlpha; //检测问题现象
} },30);
} </script>

  

运行上面代码,发现

问题现象:快速的在几个div之间移动,然后在其中一个div上停止。

会发现每个div的透明度色彩不一样。

检测:document.title = vAlpha;

原因:vAlpha作为全局变量引起的。当从A中移出时,它减小。再迅速移入B中,它增加。一个要减小,一个要增加,这两个就这样绷着。

解决:

将vAlpha作为物体的属性

aDiv[i].vAlpha = 30;

启示:对于多物体运动来说,所有东西都不能共用

修改后的代码如下

完整示例:

<script>

window.onload = function(){
var aDiv = document.getElementsByTagName("div"); for(var i=; i<aDiv.length; i++){
aDiv[i].timer = null;
aDiv[i].vAlpha = ;
aDiv[i].onmouseover = function(){
startMove(this,);
}
aDiv[i].onmouseout = function(){
startMove(this,);
}
}
} //var vAlpha = 30;
function startMove(obj, iTarget){
clearInterval(obj.timer);
obj.timer = setInterval(function(){
var speed = (iTarget - obj.vAlpha)/;
speed = speed > ? Math.ceil(speed) : Math.floor(speed); if(obj.vAlpha == iTarget){
clearInterval(obj.timer);
} else {
obj.vAlpha +=speed;
obj.style.filter = "alpha(opacity:" + obj.vAlpha + ")";
obj.style.opacity = obj.vAlpha; document.title = obj.vAlpha; //检测问题现象
} },);
} </script>

综上,发现:

可以整理以下几条:

多物体运动框架:

1,定时器作为物体的属性

2,参数的传递:物体,目标值

例子:多个Div淡入淡出

1,所有东西都不能共用

2,属性与运动对象绑定:速度,其它属性值(如透明度等)

js多个物体运动问题2的更多相关文章

  1. js多个物体运动的问题1

    问题2 http://www.cnblogs.com/huaci/p/3854304.html 用js写一个物体的运动很简单.如果一个页面有多个物体在运动,它会不会出问题呢? ok,我们来看一个示例 ...

  2. js动画---多物体运动

    对于多物体运动和单个物体运动来说,没有特别大的区别,实现原理基本上是一样的,都是通过定时器来实现的,但是多物体有一些地方需要注意,具体哪些需要注意,我将在下面的程序中说明. 首先,我们需要建立几个li ...

  3. JS定时器做物体运动

    JS定时器是函数 setInterval(函数体/函数名  , 时间) 清楚定时器 clearInterval(函数) 时间单位(毫秒) 1000毫秒  = 1秒 首先我们要知道用JS定时器能干什么? ...

  4. js实现多物体运动框架并兼容各浏览器

    首先,我们须要知道在js中获取对象的宽度如offsetWidth等.可能会存在一些小小的bug.原因之中的一个在于offsetWidth只不过获取盒子模型中内容的部分宽度.并不包括内边距,边框和外边距 ...

  5. js 运动函数篇 (一) (匀速运动、缓冲运动、多物体运动、多物体不同值运动、多物体多值运动)层层深入

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS写 匀速运动.缓冲运动.多物体运 ...

  6. js动画之多物体运动

    多个物体这不能使用一个定时器了,要给每个物体一个定时器 <!DOCTYPE html> <html lang="en"> <head> < ...

  7. [js]多个物体的运动

    与单个的区别:得知道哪个在动,所以运动函数需要两个参数,出了目标iTarget之外,还要obj.另外需要多个计数器,否则当一个还没运动完就移入另一个物体会发生卡壳 window.onload=func ...

  8. three.js之让物体动起来方式(一)移动摄像机

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 【unity3d游戏开发脚本笔记之一:坐标系选择对物体运动的影响】

    时间:2016年9月24日17:38:21   作者:yexiaopeng 博客园     在unity3d的世界中,其坐标系可分为四种,世界坐标系-WorldSpace   本地坐标系-LocalS ...

随机推荐

  1. Company Story | Vistaprint

    Company Story | Vistaprint Company Story A Gap in the Small Business Marketplace It’s rare that a hi ...

  2. HDU 4616 Game (搜索)、(树形dp)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4616 这道题目数据可能比较弱,搜索都可以AC,但是不敢写,哎…… 搜索AC代码: #include & ...

  3. ZOJ 1610 间隔染色段树

    要长8000仪表板.间染色的范围,问:最后,能看到的颜色,而且颜色一共有段出现 覆盖段 数据对比水   水可太暴力 段树: #include "stdio.h" #include ...

  4. windows 2003 自动安全设置

    @echo offecho.echo.echo.echo 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓echo.echo.echo windows 2003 自动安全设置程序 echo. ec ...

  5. commons.net.telnet使用示例

    import org.apache.commons.net.telnet.TelnetClient; import java.io.IOException; public class TelnetDe ...

  6. VB6.0数据库开发五个实例——罗列的总结

    实例一: 系统登录对话框 设计分析:数据库管理系统登录对话框两种基本方法:数据库中建立数据表用于保存系统用户登录信息:支持安全验证的数据库管理系统,可将系统用户定义为数据库用户. 技术要领:1.Ent ...

  7. 多线程之join方法

    join方法的功能就是使异步执行的线程变成同步执行.也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方 ...

  8. vi 按了ctrl+s之后

    再windows不管是写程序.还是用Word写文件.已经习惯了按ctrl+s 保存代码. 在用vi的时候.常常无意中按了ctrl+s,结果就是如同终端死掉了一样. 这是由于ctrl+s 终止屏幕输出( ...

  9. hibernate之关于使用连接表实现多对一关联映射

    [Hibernate]之关于使用连接表实现多对一关联映射 在我们项目使用中採用中间表最多的一般就是多对一,或者是多对多,当然一对一使用中间表也是能够的,可是这样的几率通常少之又少!所以这里重点介绍多对 ...

  10. C++ 复制功能

    C++ 复制功能 说C++复制功能,它可能不是很熟悉.类中的拷贝构造函数和赋值操作符.可是其实或许我们一不小心就会忽略编译器所做的一些默认操作.引起晦涩的错误.以下分析几种场景: 一.场景一:所有默认 ...