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 相关文章推荐
走出JavaScript初学困境—js初学
Dec 29 Javascript
基于jQuery的Tab选项框效果代码(插件)
Mar 01 Javascript
JavaScript中document对象使用详解
Jan 06 Javascript
jquery实现移动端点击图片查看大图特效
Sep 11 Javascript
js验证框架之RealyEasy验证详解
Jun 08 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
Aug 17 Javascript
基于JS脚本语言的基础语法详解
Jul 22 Javascript
vue实现固定位置显示功能
May 30 Javascript
Jquery如何使用animation动画效果改变背景色的代码
Jul 20 jQuery
jquery实现异步文件上传ajaxfileupload.js
Oct 23 jQuery
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
vue3.0封装轮播图组件的步骤
Mar 04 Vue.js
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判断远程url是否有效的几种方法小结
2011/10/08 PHP
CI框架在CLI下执行占用内存过大问题的解决方法
2014/06/17 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
PHP date_default_timezone_set()设置时区操作实例分析
2020/05/16 PHP
JS之小练习代码
2008/10/12 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
深究AngularJS之ui-router详解
2017/06/13 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
js实现内置计时器
2019/12/16 Javascript
vue-cli3 热更新配置操作
2020/09/18 Javascript
Python入门学习之字符串与比较运算符
2015/10/12 Python
Python 编码处理-str与Unicode的区别
2016/09/06 Python
Python实现求数列和的方法示例
2018/01/12 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
迅雷Cued工作心得体会
2014/01/27 职场文书
大学生的创业计划书就该这么写
2014/01/30 职场文书
舞蹈毕业生的自我评价
2014/03/05 职场文书
我们的节日清明节活动总结
2014/04/30 职场文书
学生党员检讨书范文
2014/12/27 职场文书
离婚上诉状范文
2015/05/23 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
Golang的继承模拟实例
2021/06/30 Golang
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python
利用nginx搭建RTMP视频点播、直播、HLS服务器
2022/05/25 Servers