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 相关文章推荐
document.getElementById的简写方式(获取id对象的简略写法)
Sep 10 Javascript
一个实用的图片切换支持点击切换和自动轮播
Sep 09 Javascript
jQuery简单获取键盘事件的方法
Jan 22 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
Sep 21 Javascript
JS中常用的正则表达式
Sep 29 Javascript
如何判断出一个js对象是否一个dom对象
Nov 24 Javascript
Vue.js组件tree实现省市多级联动
Dec 02 Javascript
JS数组交集、并集、差集的示例代码
Aug 23 Javascript
实例详解BootStrap的动态模态框及静态模态框
Aug 13 Javascript
如何在项目中使用log4.js的方法步骤
Jul 16 Javascript
vue中使用[provide/inject]实现页面reload的方法
Sep 30 Javascript
优化Vue中date format的性能详解
Jan 13 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 9 大缓存技术总结
2015/09/17 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
图像替换新技术 状态域方法
2010/01/28 Javascript
javascript取消文本选定的实现代码
2010/11/14 Javascript
Js动态添加复选框Checkbox的实例方法
2013/04/08 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
javascript常用的方法分享
2015/07/01 Javascript
jQuery animate easing使用方法图文详解
2016/06/17 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
vue如何引用其他组件(css和js)
2017/04/13 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
详解js location.href和window.open的几种用法和区别
2019/12/02 Javascript
vue实现移动端返回顶部
2020/10/12 Javascript
vue 单页应用和多页应用的优劣
2020/10/22 Javascript
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python xml解析实例详解
2016/11/14 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
python实现名片管理系统项目
2019/04/26 Python
python数据预处理 :数据抽样解析
2020/02/24 Python
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
Hotels.com印度:酒店预订
2019/05/11 全球购物
如何查询Oracle数据库中已经创建的索引
2013/10/11 面试题
为什么需要版本控制?
2013/08/08 面试题
测绘工程专业个人自我评价
2013/12/01 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
政府信息公开实施方案
2014/05/09 职场文书