JS弹性运动实现方法分析


Posted in Javascript onDecember 15, 2016

本文实例分析了JS弹性运动实现方法。分享给大家供大家参考,具体如下:

描述:像弹簧一样左右弹动,最后缓慢停下来

一、加减速运动

1.加速运动

var iSpeed=0;
iSpeed++;

速度越来越快,最后冲出去

2.减速运动

var iSpeed=20;
iSpeed--;

速度越来越慢,降到0后开始变负值往反方向运动

二、弹性运动

1.在目标点左边,加速;目标点右边,减速,如

if(div1.offsetLeft<300){
 iSpeed=iSpeed+1;  //等同iSpeed++;
}
else{
 iSpeed=iSpeed-1;
}

这是最简单的弹性运动,缺陷:加速度恒定(应该根据松紧带而变)

if(div1.offsetLeft<300){
 iSpeed=iSpeed+(300-div1.offsetLeft)/50; 
}
else{
 iSpeed=iSpeed-(div1.offsetLeft-300)/50;
}
iSpeed=iSpeed+(300-div1.offsetLeft)/50; ==>iSpeed=iSpeed+300/50-div1.offsetLeft/50;
iSpeed=iSpeed-(div1.offsetLeft-300)/50; ==>iSpeed=iSpeed-div1.offsetLeft/50+300/50;

这两个完全一样 所以不需要if/else

iSpeed+=(300-div1.offsetLeft)/50; 
div1.style.left=div1.offsetLeft+iSpeed+'px';

缺陷2:不会停下来(缺少摩擦力)

iSpeed+=(300-div1.offsetLeft)/50; 
iSpeed*=0.95; //乘一个小数,越来越小
div1.style.left=div1.offsetLeft+iSpeed+'px';

三、带摩擦力的弹性运动

比较好的组合

iSpeed+=(300-div1.offsetLeft)/5; 
iSpeed*=0.7;

注:var iSpeed=0;要放在定时器外面,不然每次都从0开始,加啊乘啊就没用了

四、整合好的弹性运动框架

var iSpeed=0;
var left=0;
function startMove(obj,iTarget){
 clearInterval(obj.timer);
 obj.timer=setInterval(function(){
  iSpeed+=(iTarget-obj.offsetLeft)/5;
  iSpeed*=0.7;  //计算出来的速度是一个小数,如果给它取整,会一直左右移动
  left+=iSpeed;  //把速度存在变量里,变量是可以有小数的
  if(Math.abs(iSpeed)<1 && Math.abs(left-iTarget)<1){ //因为iSpeed和left都是小数,所以永远达不到0和目标点,只能无限接近
   clearInterval(obj.timer);  //虽然速度最后接近于0,看似运动停止了,但定时器还一直开着,所以当速度=0并且到达目标点,关掉(只是速度=0关掉,运动到最右边准备回来那一刹那,速度=0,同理只是到达目标点关掉,一开始往右运动经过中间时会达到目标点,所以必须两者同时满足)
   obj.style.left=iTarget+'px'; //小数无法完全贴合,所以最后直接让他等于目标点,一般人肉眼看不出来
  }
  else{
   obj.style.left=left+'px';  //style.left只能是一个整数,所以每次会把小数抹掉,误差是累计的,最终累加起来就会有1-2像素,用obj.offsetLeft+iSpeed就会无法完全贴合
  }
 },30);
};

五、弹性运动不适用的地方

样式会过界的

比如高度,先变大后变小,如果物体本身高度很小,可能会变成负值,就不对了

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js 弹出框 替代浏览器的弹出框
Oct 29 Javascript
js判断ie版本号的简单实现代码
Mar 05 Javascript
js限制checkbox选中个数以限制六个为例
Jul 15 Javascript
javascript父子页面通讯实例详解
Jul 17 Javascript
JS实现生成会变大变小的圆环实例
Aug 05 Javascript
js实现简单的验证码
Dec 25 Javascript
js中遍历Map对象的方法
Jul 27 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
Aug 08 Javascript
微信小程序授权获取用户详细信息openid的实例详解
Sep 20 Javascript
JavaScript实现创建自定义对象的常用方式总结
Jul 09 Javascript
在vue中高德地图引入和轨迹的绘制的实现
Oct 11 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
Oct 31 Javascript
JS经典正则表达式笔试题汇总
Dec 15 #Javascript
javascript中闭包概念与用法深入理解
Dec 15 #Javascript
javascript读取文本节点方法小结
Dec 15 #Javascript
EditPlus中的正则表达式 实战(4)
Dec 15 #Javascript
jQuery validate插件功能与用法详解
Dec 15 #Javascript
EditPlus 正则表达式 实战(3)
Dec 15 #Javascript
js实现点击每个li节点,都弹出其文本值及修改
Dec 15 #Javascript
You might like
深入浅析php中sprintf与printf函数的用法及区别
2016/01/08 PHP
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
jQuery遍历Table应用示例
2014/04/09 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
微信小程序 石头剪刀布实例代码
2017/01/04 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
2017/02/08 Javascript
ReactNative实现Toast的示例
2017/12/31 Javascript
使用webpack将ES6转化ES5的实现方法
2019/10/13 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
JavaScript的垃圾回收机制与内存管理
2020/08/06 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
python下载文件时显示下载进度的方法
2015/04/02 Python
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
Python简单操作sqlite3的方法示例
2017/03/22 Python
python爬取m3u8连接的视频
2018/02/28 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
在Python中调用Ping命令,批量IP的方法
2019/01/26 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
通过python-pptx模块操作ppt文件的方法
2020/12/26 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
酒店实习个人鉴定
2013/12/07 职场文书
电脑教师的自我评价
2013/12/18 职场文书
《找不到快乐的波斯猫》教学反思
2014/02/24 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
python游戏开发Pygame框架
2022/04/22 Python