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 相关文章推荐
js cookies实现简单统计访问次数
Nov 24 Javascript
广泛收集的jQuery拖放插件集合
Apr 09 Javascript
jQuery实现单行文字间歇向上滚动源代码
Jun 02 Javascript
Json和Jsonp理论实例代码详解
Nov 15 Javascript
JS实现两个大数(整数)相乘
Apr 28 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
Jan 28 Javascript
Javascript字符串拼接小技巧(推荐)
Jun 02 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
Jun 25 Javascript
深入理解js A*寻路算法原理与具体实现过程
Dec 13 Javascript
js表达式与运算符简单操作示例
Feb 15 Javascript
JS实现判断移动端PC端功能
Feb 21 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
May 09 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
一个多文件上传的例子(原创)
2006/10/09 PHP
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
解析php dirname()与__FILE__常量的应用
2013/06/24 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
javascript 写类方式之十
2009/07/05 Javascript
JavaScript中null与undefined分析
2009/07/25 Javascript
extjs 为某个事件设置拦截器
2010/01/15 Javascript
extjs 初始化checkboxgroup值的代码
2011/09/21 Javascript
一个小例子解释如何来阻止Jquery事件冒泡
2014/07/17 Javascript
js重写alert控件(适合学习js的新手朋友)
2014/08/24 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
不能不知道的10个angularjs英文学习网站
2016/03/23 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
Node.js使用Angular简单示例
2018/05/11 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
命令行批量截图Node脚本示例代码
2019/01/25 Javascript
浅谈javascript中的prototype和__proto__的理解
2019/04/07 Javascript
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
python中yaml配置文件模块的使用详解
2018/04/27 Python
python selenium firefox使用详解
2019/02/26 Python
python列表返回重复数据的下标
2020/02/10 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
拿来就用!Python批量合并PDF的示例代码
2020/08/10 Python
Python绘制数码晶体管日期
2021/02/19 Python
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
N:Philanthropy官网:美国洛杉矶基础款服装
2020/06/09 全球购物
会计岗位描述
2014/02/22 职场文书
银行办公室岗位职责
2014/03/10 职场文书
简历中个人自我评价分享
2014/03/15 职场文书
清正廉洁演讲稿
2014/05/22 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
2016年圣诞节义工活动总结
2016/04/01 职场文书