day41—JavaScript运动的停止条件
转行学开发,代码100天——2018-04-26
前面学过了JavaScript运动的两种常用情形:匀速运动与缓冲运动。在这两种运动的处理过程中最大的区别在于速度的处理和到达目标点的处理。
即本文需要学习和记录的JavaScript运动的停止条件问题。
1.匀速运动的停止条件
匀速运动框架:
var timer = null;
function startMove(iTarget)
{
var oDiv = document.getElementById("div1");
clearInterval(timer);
var speed=0; timer = setInterval(function(){
if (oDiv.offsetLeft<iTarget) {
speed = 7;
}else
{
speed=-7;
}
oDiv.style.left = oDiv.offsetLeft+speed+"px";
},300);
}

假设让图中红色物体匀速移动到左100位置和左300位置。
<input id="btn1" type="button" value="到100" onclick="startMove(100);">
<input id="btn2" type="button" value="到300" onclick="startMove(300);">
<div id="div1"> </div>
<div id="div2"> </div>
<div id="div3"> </div>
<style type="text/css">
#div1{width: 100px;height: 100px ;position: absolute;top: 50px;left: 400px;background: red;}
#div2{width: 1px;height: 100px ;position: absolute;top: 50px;left: 100px;background: black;}
#div3{width: 1px;height: 100px ;position: absolute;top: 50px;left: 300px;background: black;}
</style>
执行后发现物体在目标点位置附近来回移动,无法停止。
究其原因,可以发现加上速度±7之后,使物体总是在目标点附近,多一步就超了,少一步就不足。
这时,按照绝对要求是没法很好解决的。因此我们采用一个折中的办法。即在目标点附近,可以默认到达。
这时我们就需要一个在目标位置附近的判断,用到一个数学中的绝对值方法,Math.abs();
完善后的匀速运动框架:
var timer = null;
function startMove(iTarget)
{
var oDiv = document.getElementById("div1");
clearInterval(timer);
var speed=0; timer = setInterval(function(){
if (oDiv.offsetLeft<iTarget) {
speed = 7;
}else
{
speed=-7;
}
if (Math.abs(oDiv.offsetLeft-iTarget)<=7) {
oDiv.style.left = iTarget+"px";
}else
{
oDiv.style.left = oDiv.offsetLeft+speed+"px";
}
},300);
}
执行后发现,基本达到预期效果(肉眼看不出的小处理效果)
                 
2.缓冲运动的停止条件
在缓冲运动中,由于速度变化可调,只需要物体缓冲运动的最终位置为目标位置即可停止。
详情可见缓冲运动的学习笔记:
正常执行缓冲运动框架即可。这里需要特别注意以下几点:
1>速度必须取整,方法是Math.ceil()向上取整;Math.floor()向下取整。
2>目标点必须是整像素点。方法是parseInt();
day41—JavaScript运动的停止条件的更多相关文章
- 原生JavaScript运动功能系列(五):定时定点运动
		
原生JavaScript运动功能系列(一):运动功能剖析与匀速运动实现 原生JavaScript运动功能系列(二):缓冲运动 原生JavaScript运动功能系列(三):多物体多值运动 原生JavaS ...
 - javascript运动系列第一篇——匀速运动
		
× 目录 [1]简单运动 [2]定时器管理 [3]分享到效果[4]移入移出[5]运动函数[6]透明度[7]多值[8]多物体[9]回调[10]函数完善[11]最终函数 前面的话 除了拖拽以外,运动也是j ...
 - Popmotion – 小巧,灵活的 JavaScript 运动引擎
		
Popmotion 是一个只有12KB的 JavaScript 运动引擎,可以用来实现动画,物理效果和输入跟踪.原生的DOM支持:CSS,SVG,SVG路径和DOM属性的支持,开箱即用.Popmoti ...
 - javascript运动框架(三)
		
迟到了好几天,不好意思哈!继续来优化一下javascript运动框架的代码.之前的代码存在bug,当重复点击时速度会加快,那么怎么解决这个bug呢? 现在我们就来解决一下,其实很简单,在开始运动时,关 ...
 - 好程序员技术教程分享JavaScript运动框架
		
好程序员技术教程分享JavaScript运动框架,有需要的朋友可以参考下. JavaScript的运动,即让某元素的某些属性由一个值变到另一个值的过程.如让div的width属性由200px变到400 ...
 - 原生JavaScript运动功能系列(四):多物体多值链式运动
		
原生JavaScript运动功能系列(一):运动功能剖析与匀速运动实现 原生JavaScript运动功能系列(二):缓冲运动 原生JavaScript运动功能系列(三):多物体多值运动 多物体多值链式 ...
 - 原生JavaScript运动功能系列(二):缓冲运动
		
匀速运动实现回顾 缓冲运动剖析 示例实现 方法提取 匀速运动实现回顾及缓冲运动剖析: 在这个系列的上一篇博客中原生JavaScript运动功能系列(一):运动功能剖析与匀速运动实现就运动的核心功能组成 ...
 - 【repost】JavaScript运动框架之速度时间版本
		
一.JavaScript运动框架之速度版 1.1 运动框架的实现思路 运动,其实就是在一段时间内改变 left . right . width . height . opactiy 的值,到达目的地之 ...
 - javaScript运动框架之缓冲运动
		
缓冲运动 逐渐变慢,最后停止 距离越远速度越大 速度由距离决定 速度=(目标值-当前值)/缩放系数 存在Bug 速度取整 跟随页面滚动的缓冲侧边栏 潜在问题:目标值不是整数时 缓冲运动的停止条件 ...
 
随机推荐
- 四:JVM调优原理与常见异常处理方案
			
在jvm调优之前,我们必须先了解jvm的内存模型与GC回收机制,这些在我前面的文章里面有介绍!接下来我们通过一个案例来调整jvm性能. 一测试案例: 1.1 编写demo import java.te ...
 - 为ASP.NET按钮(Button)添加确认对话框
			
http://www.cnblogs.com/blodfox777/articles/1261303.html Button有两个点击事件: onclick 触发服务端事件,脚本为c#或VB.NET ...
 - Android数据库使用指南(下)
			
前言 上面已经说了,对表进行修改,其实就是对数据库进行升级,删除表也算升级啊,反正就是发生变化,数据库就需要升级. 所以老实说其实有个地方决定了数据库的版本 public class DBHelper ...
 - Java List对象集合按对象属性分组、分组汇总、过滤等操作示例
			
import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Col ...
 - Spring基础07——配置集合属性
			
1.集合属性 在Spring中可以通过一组内置的xml标签(例如<list>,<set>或<map>)来配置集合属性. 2.配置List集合 配置java.util ...
 - numpy中的range()
			
1.arange返回一个array对象,arange(5)=([0,1,2,3,4]) 2.如果是两个参数,第一个参数是起点,第二个参数是终点 3.如果是三个参数,那么第三个参数就是步长
 - 苹果ios开发
			
苹果上架:https://blog.csdn.net/pcf1995/article/details/79650345
 - activity manager
			
首先 activity manager 作为一个独立的服务存在,所有系统中的所有 app 的 activity 都通过这个 service 来管理 同时 activity manager 维护着多个 ...
 - Qt的QSettings类和.ini文件读写
			
Detailed Description QSettings类提供了持久的跨平台的应用程序设置.用户通常期望应用程序记住它的设置(窗口大小.位置等)所有会话.这些信息通常存储在Windows系统注册表 ...
 - maven 坐标获取方式
			
问题:我们在开发时pom.xml文件中的 <dependencies> <dependency> <groupId>org.mybatis& ...