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 相关文章推荐
Jquery图形报表插件 jqplot简介及参数详解
Oct 10 Javascript
javascript抖动元素的小例子
Oct 28 Javascript
用jquery修复在iframe下的页面锚点失效问题
Aug 22 Javascript
JS实现点击按钮后框架内载入不同网页的方法
May 05 Javascript
js显示文本框提示文字的方法
May 07 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
Aug 28 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
Feb 10 Javascript
vue2组件实现懒加载浅析
Mar 29 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
Apr 01 Javascript
浅谈Vue.use的使用
Aug 29 Javascript
Angular6 正则表达式允许输入部分中文字符
Sep 10 Javascript
JS实现炫酷雪花飘落效果
Aug 19 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防止sql注入简单分析
2015/03/18 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
PHP+JQUERY操作JSON实例
2017/03/23 PHP
Javascript new关键字的玄机 以及其它
2010/08/25 Javascript
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
2016/02/02 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
深入理解js 中async 函数的含义和用法
2018/05/13 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
在vue项目中使用sass语法问题
2019/07/18 Javascript
微信小程序全局变量GLOBALDATA的定义和调用过程解析
2019/09/23 Javascript
JavaScript仿京东秒杀倒计时
2020/03/17 Javascript
微信小程序文章列表功能完整实例
2020/06/03 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
python tools实现视频的每一帧提取并保存
2020/03/20 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
Linux内核产生并发的原因
2012/07/13 面试题
文科毕业生自荐书范文
2014/04/17 职场文书
珍惜资源保护环境的建议书
2014/05/14 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
教师节祝酒词
2015/08/11 职场文书
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫