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 相关文章推荐
表单提交时自动复制内容到剪贴板的js代码
Mar 16 Javascript
IE与Firefox在JavaScript上的7个不同写法小结
Sep 14 Javascript
为原生js Array增加each方法
Apr 07 Javascript
用JavaScript实现页面重定向功能的教程
Jun 04 Javascript
js实现数组冒泡排序、快速排序原理
Mar 08 Javascript
DropDownList实现可输入可选择(两种版本可选)
Dec 07 Javascript
jquery Ajax 全局调用封装实例详解
Jan 16 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
Apr 25 Javascript
小程序日历控件使用方法详解
Dec 29 Javascript
微信小程序录音实现功能并上传(使用node解析接收)
Feb 26 Javascript
JavaScript实现简单的弹窗效果
May 19 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
Aug 13 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
php一些公用函数的集合
2008/03/27 PHP
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
php获取YouTube视频信息的方法
2015/02/11 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
邮箱下拉自动填充选择示例代码附图
2014/04/03 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
JavaScript验证18位身份证号码最后一位正确性的实现代码
2014/08/07 Javascript
jquery实现上下左右滑动的方法
2015/02/09 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
解析Vue2.0双向绑定实现原理
2017/02/23 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
python 获取文件下所有文件或目录os.walk()的实例
2018/04/23 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
2019/08/26 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
jupyter notebook tensorflow打印device信息实例
2020/04/20 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
京东国际站:JOYBUY
2017/11/23 全球购物
中专生学习生活的自我评价分享
2013/10/27 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
个人委托书范文
2015/01/28 职场文书
护林员个人总结
2015/03/04 职场文书
求职简历自我评价2015
2015/03/10 职场文书
入党转正申请书范文
2019/05/20 职场文书
windows系统安装配置nginx环境
2022/06/28 Servers