全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JS弹性运动实现方法分析

本文实例分析了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运动效果与技巧汇总》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

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


# JS  # 弹性运动  # JavaScript拖拽、碰撞、重力及弹性运动实例分析  # 原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面  # JavaScript模拟重力状态下抛物运动的方法  # Javascript实现重力弹跳拖拽运动效果示例  # 纯js模拟div层弹性运动的方法  # JS实现小球的弹性碰撞效果  # js实现带简单弹性运动的导航条  # js弹性势能动画之抛物线运动实例详解  # JavaScript实现重力下落与弹性效果的方法分析  # 是一个  # 减速运动  # 停下来  # 加速运动  # 都是  # 这是  # 就会  # 放在  # 相关内容  # 让他  # 不需要  # 就不  # 遍历  # 感兴趣  # 这两个  # 数据结构  # 就没  # 用了  # 给大家  # 比较好 


相关文章: 如何高效搭建专业期货交易平台网站?  名字制作网站免费,所有小说网站的名字?  如何零基础开发自助建站系统?完整教程解析  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  如何通过商城免费建站系统源码自定义网站主题?  建站之星后台密码遗忘如何找回?  Swift开发中switch语句值绑定模式  网站制作公司排行榜,抖音怎样做个人官方网站  建站主机系统SEO优化与智能配置核心关键词操作指南  制作农业网站的软件,比较好的农业网站推荐一下?  网站制作需要会哪些技术,建立一个网站要花费多少?  济南网站制作的价格,历城一职专官方网站?  如何用IIS7快速搭建并优化网站站点?  小型网站建站如何选择虚拟主机?  如何挑选优质建站一级代理提升网站排名?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  建站主机SSH密钥生成步骤及常见问题解答?  建站之星后台密码遗忘或太弱?如何重置与强化?  建站之星各版本价格是多少?  贸易公司网站制作流程,出口贸易网站设计怎么做?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  音乐网站服务器如何优化API响应速度?  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  学校为何禁止电信移动建设网站?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何在云主机快速搭建网站站点?  如何在香港免费服务器上快速搭建网站?  Java解压缩zip - 解压缩多个文件或文件夹实例  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  定制建站是什么?如何实现个性化需求?  如何快速建站并高效导出源代码?  如何在IIS中新建站点并配置端口与物理路径?  如何生成腾讯云建站专用兑换码?  如何在Windows环境下新建FTP站点并设置权限?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  网站制作员失业,怎样查看自己网站的注册者?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  浅析上传头像示例及其注意事项  头像制作网站在线制作软件,dw网页背景图像怎么设置?  简历在线制作网站免费版,如何创建个人简历?  建站主机是什么?如何选择适合的建站主机?  网站制作说明怎么写,简述网页设计的流程并说明原因?  宝塔新建站点报错如何解决?  XML的“混合内容”是什么 怎么用DTD或XSD定义  定制建站流程步骤详解:一站式方案设计与开发指南  如何快速上传自定义模板至建站之星?  如何快速搭建高效WAP手机网站吸引移动用户?  如何批量查询域名的建站时间记录? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。