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 引起的安全问题
Dec 27 Javascript
isArray()函数(JavaScript中对象类型判断的几种方法)
Nov 26 Javascript
ASP.NET jQuery 实例4(复制TextBox的文本到本地剪贴板上)
Jan 13 Javascript
js常用数组操作方法简明总结
Jun 20 Javascript
javascript 闭包详解
Feb 15 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
Oct 08 Javascript
json格式数据的添加,删除及排序方法
Jan 21 Javascript
浅析JavaScript中的对象类型Object
May 26 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
Sep 11 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
Sep 04 Javascript
vue路由对不同界面进行传参及跳转的总结
Apr 20 Javascript
JavaScript实现点击自制菜单效果
Feb 02 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和数据库结合的一个简单的web实例 代码分析 (php初学者)
2011/07/28 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
phpnow php探针环境检测代码
2014/11/04 PHP
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
Yii2压缩PHP中模板代码的输出问题
2018/08/28 PHP
laravel7学习之无限级分类的最新实现方法
2020/09/30 PHP
jquery获取input表单值的代码
2010/04/19 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
BootStrap 轮播插件(carousel)支持左右手势滑动的方法(三种)
2016/07/07 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
详解Numpy中的广播原则/机制
2018/09/20 Python
selenium3+python3环境搭建教程图解
2018/12/07 Python
Django 拆分model和view的实现方法
2019/08/16 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
2020/01/06 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
美国女性奢华品牌精品店:INTERMIX
2017/10/12 全球购物
金融专业毕业生推荐信
2013/11/26 职场文书
自荐信格式
2013/12/01 职场文书
警校毕业生自我评价
2014/04/06 职场文书
干部作风建设心得体会
2014/10/22 职场文书
学生会辞职信
2015/03/02 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
银行求职信怎么写
2019/06/20 职场文书
JS如何实现基于websocket的多端桥接平台
2021/05/14 Javascript
Python移位密码、仿射变换解密实例代码
2021/06/27 Python