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调用WebService的实现代码
Jun 19 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
Mar 01 Javascript
js局部刷新页面时间具体实现
Jul 04 Javascript
js中window.open打开一个新的页面
Aug 10 Javascript
Javascript使用uploadify来实现多文件上传
Nov 16 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
Jan 08 jQuery
js循环map 获取所有的key和value的实现代码(json)
May 09 Javascript
JavaScript对JSON数组简单排序操作示例
Jan 31 Javascript
JS事件绑定的常用方式实例总结
Mar 02 Javascript
使用js实现单链解决前端队列问题的方法
Feb 03 Javascript
vue组件系列之TagsInput详解
May 14 Javascript
基于angular实现树形二级表格
Oct 16 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
利用php递归实现无限分类 格式化数组的详解
2013/06/08 PHP
smarty基础之拼接字符串的详解
2013/06/18 PHP
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
JS操作iframe里的dom(实例讲解)
2014/01/29 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
JavaScript替换当前页面的方法
2015/04/03 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
2017/09/12 Javascript
Angular4实现鼠标悬停3d倾斜效果
2017/10/25 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
Python里隐藏的“禅”
2014/06/16 Python
python中urllib模块用法实例详解
2014/11/19 Python
Python字符串转换成浮点数函数分享
2015/07/24 Python
详解Python爬虫的基本写法
2016/01/08 Python
python3 发送任意文件邮件的实例
2018/01/23 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
Python3-异步进程回调函数(callback())介绍
2020/05/02 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
如何获得EntityManager
2014/02/09 面试题
公务员试用期满考核材料
2014/05/22 职场文书
个人四风对照检查材料
2014/09/26 职场文书
房屋转让协议书
2014/10/18 职场文书
酒店温馨提示语
2015/07/14 职场文书
小学音乐课教学反思
2016/02/18 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书