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 实现简单的table排序及table操作练习
Dec 28 Javascript
jquery获取css中的选择器(实例讲解)
Dec 02 Javascript
javascript实现文本域写入字符时限定字数
Feb 12 Javascript
基于jQuery实现下拉框
Nov 24 Javascript
JavaScript整除运算函数ceil和floor的区别分析
Apr 14 Javascript
javascript类型系统_正则表达式RegExp类型详解
Jun 24 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
Mar 05 Javascript
vue.js实现简单轮播图效果
Oct 10 Javascript
vue自定义指令directive实例详解
Jan 17 Javascript
用vue写一个仿简书的轮播图的示例代码
Mar 13 Javascript
Vue实现左右菜单联动实现代码
Aug 12 Javascript
Vue页面刷新记住页面状态的实现
Dec 27 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一些十分严重的缺陷详解
2013/06/03 PHP
php var_export与var_dump 输出的不同
2013/08/09 PHP
php实现的Timer页面运行时间监测类
2014/09/24 PHP
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
jQuery实现瀑布流布局
2014/12/12 Javascript
一款基于jQuery的图片场景标注提示弹窗特效
2015/01/05 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
jQuery中dom元素上绑定的事件详解
2015/04/24 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
javascript实现根据3原色制作颜色选择器的方法
2015/07/17 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
vue2.0使用swiper组件实现轮播效果
2017/11/27 Javascript
jQuery扩展方法实现Form表单与Json互相转换的实例代码
2018/09/05 jQuery
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
[01:09:24]Ti4开幕式
2014/07/19 DOTA
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
伊莱克斯阿根廷网上商店:Tienda Electrolux
2021/03/08 全球购物
应届生英语教师求职信
2013/11/05 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
导游词之苏州盘门景区
2019/11/12 职场文书
python3+PyQt5+Qt Designer实现界面可视化
2021/06/10 Python
JS的深浅复制详细
2021/10/16 Javascript
悬疑名作《朋友游戏》动画无字ED宣传片 新角色公开
2022/04/13 日漫