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 相关文章推荐
ExtJs之带图片的下拉列表框插件
Mar 04 Javascript
不到30行JS代码实现Excel表格的方法
Nov 15 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
Dec 18 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
Feb 24 Javascript
Bootstrap每天必学之级联下拉菜单
Mar 27 Javascript
javascript中JSON.parse()与eval()解析json的区别
May 19 Javascript
Bootstrap Table实现定时刷新数据的方法
Aug 13 Javascript
jQuery+ajax实现批量删除功能完整示例
Jun 06 jQuery
详解vue为什么要求组件模板只能有一个根元素
Jul 22 Javascript
vue实现路由监听和参数监听
Oct 29 Javascript
微信小程序实现同时上传多张图片
Feb 03 Javascript
JavaScript 中的六种循环方法
Jan 06 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 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
Laravel下生成验证码的类
2017/11/15 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
jQuery源码分析之Event事件分析
2010/06/07 Javascript
js Dialog 去掉右上角的X关闭功能
2014/04/23 Javascript
JavaScript Sort 的一个错误用法示例
2015/03/20 Javascript
javascript数据结构之双链表插入排序实例详解
2015/11/25 Javascript
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
2016/07/07 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
2017/02/20 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
原生JS实现无缝轮播图片
2020/06/24 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
Sanic框架应用部署方法详解
2018/07/18 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
2018/11/06 Python
python可视化实现代码
2019/01/15 Python
python django 原生sql 获取数据的例子
2019/08/14 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
Python读写操作csv和excle文件代码实例
2020/03/16 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
La Senza官网:北美顶尖性感内衣品牌
2018/08/03 全球购物
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
应届毕业生应聘自荐信范文
2014/02/26 职场文书
团代会主持词
2014/04/02 职场文书
学生安全承诺书
2014/05/22 职场文书
广播节目策划方案
2014/05/23 职场文书
银行柜员与客户起冲突检讨书
2014/09/27 职场文书
新年晚会主持词开场白
2015/05/28 职场文书
学风建设主题班会
2015/08/17 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python
python可视化分析绘制带趋势线的散点图和边缘直方图
2022/06/25 Python