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 原型模式实现OOP的再研究
Apr 09 Javascript
EXT中xtype的含义分析
Jan 07 Javascript
简单实用jquery版三级联动select示例
Jul 04 Javascript
php显示当前文件所在的文件以及文件夹所有文件以树形展开
Dec 13 Javascript
为指定的元素添加遮罩层的示例代码
Jan 15 Javascript
Egret引擎开发指南之编译项目
Sep 03 Javascript
EasyUI实现第二层弹出框的方法
Mar 01 Javascript
JS实现在状态栏显示打字效果完整实例
Nov 02 Javascript
jquery可定制的在线UEditor编辑器
Nov 17 Javascript
阿里云ecs服务器中安装部署node.js的步骤
Oct 08 Javascript
Bootstrap表格制作代码
Mar 17 Javascript
JavaScript模板引擎实现原理实例详解
Dec 14 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
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
PHP Pipeline 实现中间件的示例代码
2020/04/26 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
使用TextRange获取输入框中光标的位置的代码
2007/03/08 Javascript
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
微信小程序实现鼠标拖动效果示例
2017/12/01 Javascript
详解Vue-cli中的静态资源管理(src/assets和static/的区别)
2018/06/19 Javascript
微信小程序工具函数封装
2019/10/28 Javascript
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
python抓取网页中图片并保存到本地
2015/12/01 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
Python实现手绘图效果实例分享
2020/07/22 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
python爬虫爬取某网站视频的示例代码
2021/02/20 Python
html5 video全屏播放/自动播放的实现示例
2020/08/06 HTML / CSS
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
TobyDeals美国:在电子产品上获得最好的优惠和折扣
2019/08/11 全球购物
令人啧啧称赞的经理推荐信
2013/11/07 职场文书
数字化校园建设方案
2014/05/03 职场文书
小学模范班主任事迹材料
2014/05/13 职场文书
班子查摆四风个人对照检查材料思想汇报
2014/10/04 职场文书
Python基础之常用库常用方法整理
2021/04/30 Python
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python
LeetCode189轮转数组python示例
2022/08/05 Python