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 表格排序和表头浮动效果(扩展SortTable)
Apr 07 Javascript
jQuery中的read和JavaScript中的onload函数的区别
Aug 27 Javascript
node.js操作mongodb学习小结
Apr 25 Javascript
浅谈AngularJs指令之scope属性详解
Oct 24 Javascript
jQuery如何跳转到另一个网页 就这么简单
Dec 28 Javascript
vue-router 中router-view不能渲染的解决方法
May 23 Javascript
JS获取一个表单字段中多条数据并转化为json格式
Oct 17 Javascript
vue指令只能输入正数并且只能输入一个小数点的方法
Jun 08 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
Dec 25 Javascript
深入学习JavaScript 高阶函数
Jun 11 Javascript
JavaScript命令模式原理与用法实例详解
Mar 10 Javascript
javascript实现拖拽碰撞检测
Mar 12 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生成自己的LOG文件
2006/10/09 PHP
php session 预定义数组
2009/03/16 PHP
php实现mysql数据库分表分段备份
2015/06/18 PHP
PHPExcel简单读取excel文件示例
2016/05/26 PHP
cakephp常见知识点汇总
2017/02/24 PHP
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
JS实现将人民币金额转换为大写的示例代码
2014/02/13 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
js实现绿白相间竖向网页百叶窗动画切换效果
2015/03/02 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
jQuery短信验证倒计时功能实现方法详解
2016/05/25 Javascript
对称加密与非对称加密优缺点详解
2017/02/06 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
Vue项目中如何引入icon图标
2018/03/28 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
解决三元运算符 报错“SyntaxError: can''t assign to conditional expression”
2020/02/12 Javascript
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
2020/02/26 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
python能做哪方面的工作
2020/06/15 Python
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
努力学习演讲稿
2014/05/10 职场文书
学校周年庆活动方案
2014/08/22 职场文书
业务员工作态度散漫检讨书
2014/11/02 职场文书