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编程起步(第四课)
Feb 27 Javascript
jQuery 属性选择器element[herf*='value']使用示例
Oct 20 Javascript
关于jquery中全局函数each使用介绍
Dec 10 Javascript
js中精确计算加法和减法示例
Mar 28 Javascript
处理文本部分内容的TextRange对象应用实例
Jul 29 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
Apr 26 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
Apr 13 jQuery
基于vue,vue-router, vuex及addRoutes进行权限控制问题
May 02 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
Mar 19 jQuery
js中let能否完全替代IIFE
Jun 15 Javascript
Layui带搜索的下拉框的使用以及动态数据绑定方法
Sep 28 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
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简洁函数小结
2011/08/12 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
怎么让脚本或里面的函数在所有图片都载入完毕的时候执行
2006/10/17 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
jquery合并表格中相同文本的相邻单元格
2015/07/17 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
Vue实现todolist删除功能
2018/06/26 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
[45:15]Optic vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
Python的多态性实例分析
2015/07/07 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
python实现求最长回文子串长度
2018/01/22 Python
TensorFlow实现创建分类器
2018/02/06 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
通过代码实例了解Python异常本质
2020/09/16 Python
html5 http的轮询和Websocket原理
2018/10/19 HTML / CSS
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
测试时代收集的软件测试面试题
2013/09/25 面试题
建筑个人求职信范文
2014/01/25 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书
七个非常实用的Python工具包总结
2021/06/15 Python