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 相关文章推荐
appendChild() 或 insertBefore()使用与区别介绍
Oct 11 Javascript
使用Javascript实现选择下拉菜单互移并排序
Feb 23 Javascript
BootStrap的JS插件之轮播效果案例详解
May 16 Javascript
基于jQuery实现歌词滚动版音乐播放器的代码
Sep 17 Javascript
angularJs关于指令的一些冷门属性详解
Oct 24 Javascript
基于AGS JS开发自定义贴图图层
Mar 31 Javascript
JS去掉字符串前后空格、阻止表单提交的实现代码
Jun 08 Javascript
vue如何使用 Slot 分发内容实例详解
Sep 05 Javascript
基于 D3.js 绘制动态进度条的实例详解
Feb 26 Javascript
Vue-路由导航菜单栏的高亮设置方法
Mar 17 Javascript
详解Vue打包优化之code spliting
Apr 09 Javascript
微信小程序使用二次贝塞尔曲线画波浪
Dec 25 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判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
php将一维数组转换为每3个连续值组成的二维数组
2016/05/06 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
PHP接入支付宝接口失效流程详解
2020/11/10 PHP
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
javascript 操作文件 实现方法小结
2009/07/02 Javascript
js的表单操作 简单计算器
2011/12/29 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
jQuery内置的AJAX功能和JSON的使用实例
2014/07/27 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
Jquery弹出层插件ThickBox的使用方法
2014/12/09 Javascript
浅谈javascript中的DOM方法
2015/07/16 Javascript
jQuery的实例及必知重要的jQuery选择器详解
2016/05/20 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
Django model反向关联名称的方法
2018/12/15 Python
python 中xpath爬虫实例详解
2019/08/26 Python
python之array赋值技巧分享
2019/11/28 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
Python 用__new__方法实现单例的操作
2020/12/11 Python
速比涛英国官网:Speedo英国
2019/07/15 全球购物
英文版网络工程师求职信
2013/10/28 职场文书
电子专业推荐信范文
2013/11/18 职场文书
绿化先进工作者事迹材料
2014/01/30 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
2014年环保工作总结
2014/11/26 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
天堂的孩子观后感
2015/06/11 职场文书
贷款工资证明范本
2015/06/12 职场文书
mysql数据库实现设置字段长度
2022/06/10 MySQL