javascript中的匀速运动(两种方式)
2016-01-29 21:40
691 查看
javascript中的匀速运动
不要小看这个东西呀,机关重重呀
html:
css:
js实现第一步:动起来
动起来了,单你不可能让它一直动撒!设定一个终点!假设是300px
尼玛,运行一看,居然没停下来,我操,我们来分析机关!
![](http://images2015.cnblogs.com/blog/511074/201601/511074-20160130115624771-807983952.png)
那这么办呢?--终止的条件!
尝试方法一
当它们之间的距离相差一个帧的时候,我们就停止下来,最后让它强制对其滴呀
尝试方法二
距离/zhen=0,也就是能够整除的时候,我们才能停在指定的地点滴呀!例如:
![](http://images2015.cnblogs.com/blog/511074/201601/511074-20160130120205005-1479761738.png)
但是,到这一步,还没有完滴呀;当你多次点击按钮是,你会发现,物体运动的越来越快了呀!
那是因为,你每点击一次,那么就会多生成一个setInterval 对象滴呀!
解决方法就是在setInterval(function (){})前面加上clearInterval(Timer)
最终较为完整的代码如下:
看似简单,又不太简单的运动,有了这个基础之后,我们就可以做出其他的了!
再思考,如果我们要它反向运动呢?
然后,我来给出完整的匀速运动的javascript代码滴呀
javascript 实现匀速匀速方式二:
for循环+闭包+setTimeout (不过,不推荐这种做法,不过可以加深对闭包的理解)
具体的原理你可以看另外一边我的文章
/article/6629410.html
感觉还多帅滴呀
两种方式来实现滴呀
不要小看这个东西呀,机关重重呀
html:
<input type="button" value="start" onclick="show()"/> <div id="move"> </div>
css:
#move{ height:100px; width:100px; background:green; position:absolute; top:100px; left:0px; }
js实现第一步:动起来
function show(){ //首先我们要让物体起来 var obj=document.getElementById("move"); var zhen=8; //定时器 setInterval(function(){ obj.style.left=obj.offsetLeft+zhen+"px"; },20) }
动起来了,单你不可能让它一直动撒!设定一个终点!假设是300px
var Timer=null; function show(){ //首先我们要让物体起来 var obj=document.getElementById("move"); var zhen=8; //定时器 Timer=setInterval(function(){ if(obj.offsetLeft==300){ //注意这里,机关重重呀 clearInterval(Timer) } obj.style.left=obj.offsetLeft+zhen+"px"; },20) }
尼玛,运行一看,居然没停下来,我操,我们来分析机关!
![](http://images2015.cnblogs.com/blog/511074/201601/511074-20160130115624771-807983952.png)
那这么办呢?--终止的条件!
尝试方法一
当它们之间的距离相差一个帧的时候,我们就停止下来,最后让它强制对其滴呀
if(Math.abs((obj.offsetLeft-iTarget))<=Math.abs(speed)){ clearInterval(rightTimer); obj.style.left=iTarget+'px'; }
尝试方法二
距离/zhen=0,也就是能够整除的时候,我们才能停在指定的地点滴呀!例如:
![](http://images2015.cnblogs.com/blog/511074/201601/511074-20160130120205005-1479761738.png)
但是,到这一步,还没有完滴呀;当你多次点击按钮是,你会发现,物体运动的越来越快了呀!
那是因为,你每点击一次,那么就会多生成一个setInterval 对象滴呀!
解决方法就是在setInterval(function (){})前面加上clearInterval(Timer)
最终较为完整的代码如下:
var Timer=null; function show(){ var obj=document.getElementById("move"); var zhen=10; clearInterval(Timer) ; Timer=setInterval(function(){ if(obj.offsetLeft==300){ clearInterval(Timer) ; }else{ obj.style.left=obj.offsetLeft+zhen+"px"; } },20) }
看似简单,又不太简单的运动,有了这个基础之后,我们就可以做出其他的了!
再思考,如果我们要它反向运动呢?
var speed=0; //目标来减去物体的位置是否大于零,然后判断速度的正负滴呀 var isPlus=iTarget-obj.offsetLeft; if(isPlus<0){ speed=-7; }else{ speed=7; }
然后,我来给出完整的匀速运动的javascript代码滴呀
//下面我来给出完整的代码区域 //运动的几大要素; //物体自身的位置:obj.offsetLeft; //目标终点: iTarget; //帧 speed; //Timer var Timer=null; function JavaScriptMove(iTarget,Id){ var obj=document.getElementById(Id); var speed=6; if(obj.offsetLeft-iTarget>0){ speed=-speed; }else{ speed=speed; //.... } //为了防止鼠标的多次点击滴呀 clearInterval(Timer); //开始运动 Timer=setInterval(function (){ //物体停止的条件:他们之间的距离差值小于一个帧滴呀就停下来...然后 if(Math.abs(obj.offsetLeft-iTarget)<=Math.abs(speed)){ clearInterval(Timer); //强制移动到目标 obj.style.left=iTarget+"px"; //这样就算是移动到了指定的地点滴呀 }else{ obj.style.left=obj.offsetLeft+speed+'px'; } },30) } //最后还得尝试着,用面向对象的方式进行代码的改造滴滴 //这个物体的简单运动滴呀
javascript 实现匀速匀速方式二:
for循环+闭包+setTimeout (不过,不推荐这种做法,不过可以加深对闭包的理解)
具体的原理你可以看另外一边我的文章
/article/6629410.html
感觉还多帅滴呀
两种方式来实现滴呀
相关文章推荐
- JavaScript设计模式学习笔记2
- js阻止表单提交默认行为的两种方式
- JavaScript的学习整理(一)
- 使用Backbone将两个json对象合并到一个Collection对象中
- javascript实现减速运动
- javascript实现图片的淡入淡出
- javascript实现(分享到xxx)的小实例
- javascript中奇怪事件
- JSP自定义标签笔记
- 部署arcgis for JavaScript环境
- 利用JS做到隐藏div和显示div
- JavaScript跨浏览器绑定事件函数的优化
- js获取项目根路径及get参数
- JSON数据中存在单个转义字符“\”的处理
- 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)
- Javascript 面向对象编程
- 读书——javascript异步编程
- 教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
- js实现div固定在下方
- javascript中new Date()构造函数在fireFox和ie不兼容的问题