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 相关文章推荐
Prototype Selector对象学习
Jul 23 Javascript
jQuery 自动增长的文本输入框实现代码
Apr 02 Javascript
javascript中的绑定与解绑函数应用示例
Jun 24 Javascript
sails框架的学习指南
Dec 22 Javascript
jQuery实现的向下图文信息滚动效果
May 03 Javascript
点评js异步加载的4种方式
Dec 22 Javascript
jQuery实现圣诞节礼物动画案例解析
Dec 25 Javascript
那些精彩的JavaScript代码片段
Jan 12 Javascript
js核心基础之闭包的应用实例分析
May 11 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
Apr 28 Javascript
vue:el-input输入时限制输入的类型操作
Aug 05 Javascript
详解JavaScript中Arguments对象用途
Aug 30 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
人族 Terran 基本策略
2020/03/14 星际争霸
ThinkPHP中RBAC类的四种用法分析
2014/11/24 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
PHP手机号码及邮箱正则表达式实例解析
2020/07/11 PHP
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
JavaScript学习笔记之数组随机排序
2016/03/23 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
JavaScript实现的微信二维码图片生成器的示例
2016/10/26 Javascript
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
2019/06/18 jQuery
JS实现的简单tab切换功能完整示例
2019/06/20 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
[01:02:03]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS VG
2014/05/26 DOTA
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
详解tensorflow载入数据的三种方式
2018/04/24 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
python的pyecharts绘制各种图表详细(附代码)
2019/11/11 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
CK美国官网:Calvin Klein
2016/08/26 全球购物
应届生求职信写作技巧
2013/10/24 职场文书
财务担保书范文
2014/04/02 职场文书
初级党校心得体会
2014/09/11 职场文书
KTV员工管理制度
2015/08/06 职场文书
幼师自荐信范文(2016推荐篇)
2016/01/28 职场文书
分家协议书范本
2016/03/22 职场文书
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
2022/02/12 Servers
Netty分布式客户端处理接入事件handle源码解析
2022/03/25 Java/Android