JS实现匀加速与匀减速运动的方法示例


Posted in Javascript onSeptember 04, 2017

本文实例讲述了JS实现匀加速与匀减速运动的方法。分享给大家供大家参考,具体如下:

/*
 * 动画帧函数
 *
 * */
  var requestFrame=function(){
  var prefixList=['webkit','moz','ms'];
  var func;
  for(var i=0;i<prefixList.length;i++){
    func=window[prefixList[i]+"RequestAnimationFrame"];
    if(func){
      return function(callback){
        func(callback);
      }
    }
  }
  return function(callback){
    setTimeout(callback,67);
  }
}();
/*
 * 匀加速运动
 *
 * */
function animate_easeIn(element,from,to,duration,callback){
  var time=+new Date;
  var distance=to-from;
  var a=2*distance/(duration*duration); //加速度a=2x/t^2(包含方向)
    var func=function(){
    var time2,offsetDis,durTime;
    time2=+new Date;
    durTime=time2-time; //运动的时间间隔
    offsetDis=Math.ceil(a*durTime*durTime/2);//X=a*t^2/2
        if(duration<durTime){
      element.css('left',to+'px');
      callback();
    }else{
      element.css('left',from+offsetDis+'px');
      requestFrame(func);
    }
  }
  func();
}
/*
 * 匀减速运动
 *
 * */
function animate_easeOut(element,from,to,duration,callback){
  var time=+new Date;
  var distance=Math.abs(to-from);
  var a=2*distance/(duration*duration); //x=a*t^2/2 求出加速度
  var v0=Math.sqrt(distance*2*a); // 根据公式:2as=v^2求出初速度
    var func=function(){
    var time2,offsetDis,durTime,pos;
    time2=+new Date;
    durTime=time2-time;
    offsetDis=Math.ceil(v0*durTime-a*durTime*durTime/2); //根据s=v0*t+1/2*a*t^2求出位移x
    if(duration<durTime){
      element.css('left',to+'px');
      callback();
    }else{
      pos=from>to? from-offsetDis : from+offsetDis;
      element.css('left',pos+'px');
      requestFrame(func);
    }
    }
    func();
}

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

Javascript 相关文章推荐
理解JavaScript变量作用域更轻松
Oct 25 Javascript
js保存当前路径(cookies记录)
Dec 14 Javascript
jQuery 源码分析笔记(4) Ready函数
Jun 02 Javascript
Javascript中实现String.startsWith和endsWith方法
Jun 10 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
Aug 27 Javascript
jQuery的实例及必知重要的jQuery选择器详解
May 20 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
Mar 30 Javascript
vue.js指令和组件详细介绍及实例
Apr 06 Javascript
vue 项目常用加载器及配置详解
Jan 22 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
Aug 29 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
Nov 06 Javascript
JS实现放大镜效果
Sep 21 Javascript
node-sass安装失败的原因与解决方法
Sep 04 #Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
Sep 04 #Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
Sep 04 #Javascript
React教程之Props验证的具体用法(Props Validation)
Sep 04 #Javascript
VueJS组件之间通过props交互及验证的方式
Sep 04 #Javascript
vue中component组件的props使用详解
Sep 04 #Javascript
React-Native中props具体使用详解
Sep 04 #Javascript
You might like
最省空间的计数器
2006/10/09 PHP
PHP中动态HTML的输出技术
2006/10/09 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
Smarty环境配置与使用入门教程
2016/05/11 PHP
php 在字符串指定位置插入新字符的简单实现
2016/06/28 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
Thinkphp 框架扩展之驱动扩展实例分析
2020/04/27 PHP
Ruffy javascript 学习笔记
2009/11/30 Javascript
JQuery入门——用映射方式绑定不同事件应用示例
2013/02/05 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
jquery处理json对象
2014/11/03 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
js实现鼠标悬浮给图片加边框的方法
2015/01/30 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
javascript模拟评分控件实现方法
2015/05/13 Javascript
分享五个有用的jquery小技巧
2015/10/08 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
JS实现移动端在线签协议功能
2019/08/22 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
python实现单机五子棋
2020/08/28 Python
python zip()函数的使用示例
2020/09/23 Python
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
财务会计毕业生自荐信
2013/11/02 职场文书
数学系个人求职信范文
2014/01/30 职场文书
团支部推优材料
2014/05/21 职场文书
经理助理岗位职责
2015/02/02 职场文书
个人德育工作总结
2015/03/05 职场文书
2015年七夕爱情寄语
2015/03/24 职场文书
对学校的意见和建议
2015/06/04 职场文书
Vue实现下拉加载更多
2021/05/09 Vue.js