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中为元素加上name属性的方法
May 09 Javascript
模拟电子签章盖章效果的jQuery插件源码
Jun 24 Javascript
jquery获取节点名称
Apr 26 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
May 23 Javascript
Bootstrap源码解读网格系统(3)
Dec 22 Javascript
原生JS仿QQ阅读点击展开、收起效果
Mar 08 Javascript
Vuejs 单文件组件实例详解
Feb 09 Javascript
基于rollup的组件库打包体积优化小结
Jun 18 Javascript
详解在网页上通过JS实现文本的语音朗读
Mar 28 Javascript
JSX在render函数中的应用详解
Sep 04 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
Oct 26 jQuery
小程序websocket心跳库(websocket-heartbeat-miniprogram)
Feb 23 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
兼容ie6浏览器的php下载文件代码分享
2014/07/14 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
javascript之dhDataGrid Ver2.0.0代码
2007/07/01 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
2013/06/04 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
2016/03/08 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
javascript入门之string对象【新手必看】
2016/11/22 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
js统计页面上每个标签的数量实例代码
2018/05/29 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
2020/02/24 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
使用简单工厂模式来进行Python的设计模式编程
2016/03/01 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
Python自定义线程池实现方法分析
2018/02/07 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
对python中xlsx,csv以及json文件的相互转化方法详解
2018/12/25 Python
对django 模型 unique together的示例讲解
2019/08/06 Python
Django中使用haystack+whoosh实现搜索功能
2019/10/08 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
Python调用系统命令os.system()和os.popen()的实现
2020/12/31 Python
几道数据库的概念性面试题
2014/05/30 面试题
实用求职信范文分享
2013/12/25 职场文书
贺卡寄语大全
2014/04/11 职场文书
个人主要事迹材料
2014/08/26 职场文书
银行党员批评与自我批评
2014/10/15 职场文书
紧急通知
2015/04/17 职场文书
年终工作总结范文
2019/06/20 职场文书
iPhone13再次曝光
2021/04/15 数码科技
Redis5之后版本的高可用集群搭建的实现
2021/04/27 Redis
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js