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 下拉列表 二级联动插件分享
Mar 29 Javascript
JavaScript 产生不重复的随机数三种实现思路
Dec 13 Javascript
JS获取文件大小方法小结
Dec 08 Javascript
很实用的js选项卡切换效果
Aug 12 Javascript
用vue和node写的简易购物车实现
Apr 25 Javascript
解决JQuery全选/反选第二次失效的问题
Oct 11 jQuery
Vue.js实现图片的随意拖动方法
Mar 08 Javascript
使用 vue-i18n 切换中英文效果
May 23 Javascript
教你如何用node连接redis的示例代码
Jul 12 Javascript
Element Input组件分析小结
Oct 11 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
Dec 04 Javascript
深入学习JavaScript中的bom
May 27 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 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
php 输出双引号&quot;与单引号'的方法
2010/05/09 PHP
PHP引用(&amp;)各种使用方法实例详解
2014/03/20 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
jQuery之折叠面板的深入解析
2013/06/19 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
浅析JS中的 map, filter, some, every, forEach, for in, for of 用法总结
2017/03/29 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
AngularJS select设置默认值的实现方法
2017/08/25 Javascript
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
python进阶教程之异常处理
2014/08/30 Python
跟老齐学Python之数据类型总结
2014/09/24 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
python字典的setdefault的巧妙用法
2019/08/07 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
利用Python计算KS的实例详解
2020/03/03 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
使用CSS3在触屏上为按钮实现激活效果
2013/09/27 HTML / CSS
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
大学毕业生工作的自我评价
2013/10/01 职场文书
建筑安全员岗位职责
2014/03/13 职场文书
师范生见习报告
2014/10/31 职场文书
2014年实习班主任工作总结
2014/11/08 职场文书
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS
nginx刷新页面出现404解决方案(亲测有效)
2022/03/18 Servers
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技