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 速度取整 跟随页面滚动的缓冲侧边栏 潜在问题:目标值不是整数时 缓冲运动的停止条件 ...
随机推荐
- 剑指offer-旋转数组的最小数字-数组-python
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转 ...
- express热更新nodemon,自启动项目
一.说一下 每次修改文件,我们都需要重启服务器npm start,很麻烦,所以使用引入nodemon插件,解决这个问题,实现保存文件,即自启动刷新项目 二.直接开码 npm install nodem ...
- GROUP BY关键字优化
1.group by实质是先排序后进行分组,遵照索引建的最佳左前缀 2.当无法使用索引列,增大max_length_for_sort_data参数的设置+增大sort_buffer_size参数的设置 ...
- 看CLRS 对B树的浅显理解
定义及特点: 每个结点有n个关键字和n+1个指向子结点的指针,即有n+1个孩子结点. n个关键字按非递减的顺序存储. 最小度数t>=2,除了根结点的所有内部结点(非叶结点)的孩子数>=t且 ...
- 微信小程序(19)-- 从底部向上滑出的动画效果
从底部向上滑出的动画效果: 用到了小程序的触摸事件bindtouchmove,以及创建一个annimation对象,完成动画操作之后使用animation这个对象的export()方法导出动画数据. ...
- 定时任务crond、crontab
crontab命令是用来设置定时任务规则的配置命令,配置文件/etc/crontab 与/var/spool/cron/目录下当前用户名的文件. -l 显示当前定时任务 -e 编辑定时任务 对于roo ...
- CCPC-Wannafly Winter Camp Day1 (Div2, onsite) - I 起起落落
题目描述 无聊的wlswls正在观察某个商品的价格,wlswls一共观察了nn天,每天这个商品都会有一个价格p_ipi. 定义一个长度为2m+1(3\leq2m+1\leq n)2m+1(3≤2m+ ...
- 计蒜客 蓝桥模拟 F. 结果填空:数独
代码: #include <cstdio> #include <cstdlib> #include <cstring> #include <iostream& ...
- 《码出高效:Java开发手册》第四章学习记录,内容想当的多,前后花了几天的时间才整理好。
<码出高效:Java开发手册>第四章学习记录,内容想当的多,前后花了几天的时间才整理好. https://naotu.baidu.com/file/e667435a4638cbaa15eb ...
- Codeforces 矩阵题 题单
Matrix CF 166E Tetrahedron dp方程设为 f[i] 最后在 D点,g[i] 表示最后不在D点.最后 g[] 可以通过矩阵加速数列求得,数据可以强化,复杂度 \(O(logn) ...