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 相关文章推荐
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
Jul 28 Javascript
js计算两个时间之间天数差的实例代码
Nov 19 Javascript
浅谈checkbox的一些操作(实战经验)
Nov 20 Javascript
表格奇偶行设置不同颜色的核心JS代码
Dec 24 Javascript
JavaScript中用字面量创建对象介绍
Dec 31 Javascript
jQuery中parents()方法用法实例
Jan 07 Javascript
JS建造者模式基本用法实例分析
Jun 30 Javascript
Vue 父子组件的数据传递、修改和更新方法
Mar 01 Javascript
Vue框架里使用Swiper的方法示例
Sep 20 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
Feb 01 Javascript
JS实现简单打字测试
Jun 24 Javascript
Vue解决echart在element的tab切换时显示不正确问题
Aug 03 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使用curl模拟post上传及接收文件的方法
2016/03/04 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
2017/08/07 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
document.forms用法示例介绍
2014/06/26 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
EasyUI中实现form表单提交的示例分享
2015/03/01 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
浅谈Vue数据绑定的原理
2018/01/08 Javascript
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
python图形工具turtle绘制国际象棋棋盘
2019/05/23 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
python滑块验证码的破解实现
2019/11/10 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
python如何利用paramiko执行服务器命令
2020/11/07 Python
Django多数据库联用实现方法解析
2020/11/12 Python
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
销售员自我评价怎么写
2013/09/19 职场文书
艺术专业大学生自我评价
2013/09/22 职场文书
面试后感谢信怎么写
2014/02/01 职场文书
预备党员转正考核材料
2014/06/03 职场文书
三好学生评语大全
2014/12/29 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
留学推荐信怎么写
2015/03/26 职场文书
四风之害观后感
2015/06/09 职场文书
大学生入党自传2015
2015/06/26 职场文书
政协常委会议主持词
2015/07/03 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL