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 相关文章推荐
javscript对象原型的一些看法
Sep 19 Javascript
Jquery之美中不足小结
Feb 16 Javascript
html组件不可输入(只读)同时任何组件都有效
Apr 01 Javascript
jQuery中Ajax的get、post等方法详解
Jan 20 Javascript
详解JavaScript基于面向对象之创建对象(1)
Dec 10 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
Oct 30 Javascript
js Canvas实现的日历时钟案例分享
Dec 25 Javascript
jquery实现侧边栏左右伸缩效果的示例
Dec 19 jQuery
解决vuecli3.0热更新失效的问题
Sep 19 Javascript
JS重学系列之聊聊new操作符
Mar 04 Javascript
layer扩展打开/关闭动画的方法
Sep 23 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
Sep 21 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
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
2014/05/07 PHP
JavaScript事件列表解说
2006/12/22 Javascript
响应鼠标变换表格背景或者颜色的代码
2009/03/30 Javascript
写出更好的JavaScript程序之undefined篇(中)
2009/11/23 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
javascript css红色经典选项卡效果实现代码
2016/05/17 Javascript
JavaScript 闭包详细介绍
2016/09/28 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
js登录滑动验证的实现(不滑动无法登陆)
2018/01/03 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
2019/04/17 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
python远程登录代码
2008/04/29 Python
Python  连接字符串(join %)
2008/09/06 Python
python3抓取中文网页的方法
2015/07/28 Python
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
Python中生成器和迭代器的区别详解
2018/02/10 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
2019/08/20 Python
Python3查找列表中重复元素的个数的3种方法详解
2020/02/13 Python
Django单元测试中Fixtures的使用方法
2020/02/26 Python
python中re模块知识点总结
2021/01/17 Python
Book Depository澳大利亚:世界领先的专业在线书店之一
2018/12/27 全球购物
小学学校评估方案
2014/06/08 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书
企业法人授权委托书
2014/09/25 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
神秘岛读书笔记
2015/07/01 职场文书
小学班级标语口号大全
2015/12/26 职场文书