JavaScript实现缓动动画


Posted in Javascript onNovember 25, 2020

JavaScript原生定时器实现动画的缓动效果,供大家参考,具体内容如下

原理很简单通过定时器修改边距达到移动动画效果

实现速度的变化

缓动必然移动速度会有变化,这里需要用到一个小公式或者说算法?

移动单位 = (指定移动位置边距 - obj.offsetLeft) / 10;
var step = (ydpx - obj.offsetLeft) / 10;

有一个细节需要注意下:

移动的步数应该去掉小数,否者因为除法的原因无法移动到指定位置,会有一些差距
当step小于0对应的是向左移动舍去小数如:1.2 为1
大于0向右移动,进位,如:1.2为2
这应该是个数学问题**

之后代码的实现就简单多了:

//ydjl:移动到指定位置 (obj.offsetLeft)
function animate(obj,ydpx) {
 //清除定时器 防止每一次调用都产生一个定时器,叠加导致问题(速度变快)
 clearInterval(obj.timer); 
 obj.timer=setInterval(function () {
  var step = (ydpx - obj.offsetLeft) / 10; //移动距离
  //取整
  step = step>0 ? Math.ceil(step) : Math.floor(step);
  //判断是否移动到指定位置
  if(obj.offsetLeft == ydpx)
  {
  //清除定时器,停止移动
   clearInterval(obj.timer);
  }
  //修改left实现移动
  obj.style.left = obj.offsetLeft + step + 'px';

 },15)//移动间隔设置
}

下面是演示:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
 <style>
  .boks{
   position: absolute;
   top: 300px;
   left:0;
   width: 100px;
   height: 100px;
   background-color: #ff0011;
  }
 </style>

</head>
<body>
<button class="yd500">移动500px</button>
<button class="yd800">移动800px</button>
<div class="boks">hezi</div>
</body>
<script>
 function animate(obj,ydpx) {
  //清除定时器
  clearInterval(obj.timer);
  obj.timer=setInterval(function () {
   var step = (ydpx - obj.offsetLeft) / 10;
   step = step>0 ? Math.ceil(step) : Math.floor(step);
    if(obj.offsetLeft == ydpx)
    {
     clearInterval(obj.timer);
    }
   obj.style.left = obj.offsetLeft + step + 'px';

  },15);
 }
 var yd500 = document.querySelector(".yd500");
 var yd800 = document.querySelector(".yd800");
 //盒子
 var boks = document.querySelector(".boks");

 yd500.addEventListener('click', function() {
  // 调用函数
  animate(boks, 500); //传递要移动的对象 和 移动位置
 })

 yd800.addEventListener('click', function() {
  // 调用函数
  animate(boks, 800); //传递要移动的对象 和 移动位置
 })
</script>
</html>

萌新小白的学习记录

JavaScript实现缓动动画

JavaScript实现缓动动画

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript将数组插入到另一个数组中的代码
Jan 10 Javascript
js判断ie版本号的简单实现代码
Mar 05 Javascript
JS重载实现方法分析
Dec 16 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
Feb 14 Javascript
Javascript下拉刷新的简单实现
Feb 14 Javascript
解决jquery有正确返回值但不执行success函数的问题
Aug 20 jQuery
Vue.js组件高级特性实例详解
Dec 24 Javascript
vue项目中使用fetch的实现方法
Apr 25 Javascript
Element 默认勾选表格 toggleRowSelection的实现
Sep 04 Javascript
详解vue中$nextTick和$forceUpdate的用法
Dec 11 Javascript
JS apply用法总结和使用场景实例分析
Mar 14 Javascript
在react项目中使用antd的form组件,动态设置input框的值
Oct 24 Javascript
Vue3配置axios跨域实现过程解析
Nov 25 #Vue.js
Vue使用Element实现增删改查+打包的步骤
Nov 25 #Vue.js
JavaScript实现网页动态生成表格
Nov 25 #Javascript
vue + el-form 实现的多层循环表单验证
Nov 25 #Vue.js
JavaScript实现HTML导航栏下拉菜单
Nov 25 #Javascript
vue打开其他项目页面并传入数据详解
Nov 25 #Vue.js
Vue开发中常见的套路和技巧总结
Nov 24 #Vue.js
You might like
缓存技术详谈―php
2006/12/14 PHP
php调用mysql存储过程
2007/02/14 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
2016/05/20 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
Expandable &quot;Detail&quot; Table Rows
2007/08/29 Javascript
javascript js cookie的存储,获取和删除
2007/12/29 Javascript
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
js+JQuery返回顶部功能如何实现
2012/12/03 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
Node.js中console.log()输出彩色字体的方法示例
2019/12/01 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
vue中activated的用法
2021/01/03 Vue.js
基于vue的video播放器的实现示例
2021/02/19 Vue.js
python将unicode转为str的方法
2017/06/21 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
Python简易版停车管理系统
2019/08/12 Python
ipad上运行python的方法步骤
2019/10/12 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
HTML5不支持frameset的两种解决方法
2016/11/14 HTML / CSS
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
波兰购物网站:MALL.PL
2019/05/01 全球购物
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
网吧消防安全责任书
2014/07/29 职场文书
纪检干部对照检查材料
2014/08/22 职场文书
幼儿园教师师德师风演讲稿:爱我所爱 无悔青春
2014/09/10 职场文书
2015年清明节活动总结
2015/02/09 职场文书
项目备案申请报告
2015/05/15 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android