返回顶部
首页 > 资讯 > 精选 >如何理解JavaScript缓动动画的封装与使用
  • 163
分享到

如何理解JavaScript缓动动画的封装与使用

2023-06-21 20:06:17 163人浏览 八月长安
摘要

如何理解javascript缓动动画的封装与使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现过程分析(1)如何重复调用?答:封装一个函数,用一次调用一次代码分析:func

如何理解javascript缓动动画的封装与使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

实现过程分析

(1)如何重复调用?

答:封装一个函数,用一次调用一次

代码分析:

function animate(obj, target, callback) { //详细实现步骤 };

animate :(动画函数)

obj(动画对象):给谁添加动画效果

target(目标值):移动到什么距离

callback(回调函数):同时要执行什么功能

(2)如何实现缓动效果?(缓动动画核心算法

答:移动距离 =(目标值 - 现在盒子位置)/ 10,移动距离会慢慢变小,直至停下,就实现了缓动原理

代码分析:

var step = (target - obj.offsetLeft) / 10;

step(移动距离): 元素要移动的距离

target(目标值):移动到什么距离

obj.offsetLeft(盒子现在的位置):盒子现在距离左侧的距离

(3)为什么移动不到指定位置?(给的目标距离是500px,移动到496.4就停下了)

答:因为需要取整,正数往上取整,负数向下取整

如何理解JavaScript缓动动画的封装与使用

代码分析:

step = step > 0 ? Math.ceil(step) : Math.floor(step);

如果setp要移动的距离是正数,就向上取整,如果是负数,就向下取整,采取三元表达式以优化代码,提升整体质量

(4)如何让目标元素真正移动起来?

答:添加定时器,并将实时移动距离(步长)赋值给元素

代码分析:

 var timer = setInterval(function () { //详细实现代码 }, 15);  //添加定时器  obj.style.left = obj.offsetLeft + step + 'px';  //步长

给定时器添加名字是为了好清除定时器,时间设置为15(实际开发常用15)

元素的左侧的值 = 元素离左侧的距离 + 移动距离 + 'px' (记得一定要加px单位),实现原理就是不断将最新的值赋值给元素,实现动起来的效果

(5)为什么会鬼畜或者越点越快?

答:因为定时器重复添加,需要每次调用时清除定时器

代码分析:

clearInterval(timer);

两个地方需要清除,第一是刚调用缓动动画函数时,避免鬼畜和破速,第二是判断元素到达指定位置没有,如果到达了就停止定时器

案例测试

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta Http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <style>        .sliderbar {                                                position: absolute;            right: 0;            top: 100px;            text-align: center;            line-height: 40px;                        width: 40px;            height: 40px;            cursor: pointer;        }        .sp {            position: relative;            color: #fff;        }                .con {                        position: absolute;            left: 0;            top: 0;            width: 200px;            height: 40px;            background-color: pink;            z-index: -1;            color: #fff;        }    </style>    <script src="./animate.js"></script></head> <body>    <div class="sliderbar">        <span class="sp">←</span>        <div class="con">问题反馈</div>    </div>     <script>        var sliderbar = document.querySelector('.sliderbar');        // var sp = document.querySelector('.sp');        var con = document.querySelector('.con');        sliderbar.addEventListener('mouseenter', function() {            //animate(obj, target, callback);            animate(con, -160, function() {                sliderbar.children[0].innerHTML = '→';            });        })        sliderbar.addEventListener('mouseleave', function() {            //animate(obj, target, callback);            animate(con, 0, function() {                sliderbar.children[0].innerHTML = '←';             });        })    </script></body></html>

整体思路:通过给盒子添加鼠标事件来调用动画函数,最终实现效果

运行效果:

如何理解JavaScript缓动动画的封装与使用

如何理解JavaScript缓动动画的封装与使用

缓动动画函数最终封装代码(animate.js):

function animate(obj, target, callback) {

//调用函数就清除一次定时器,避免问题发生

clearInterval(obj.timer)

//添加定时器

obj.timer = setInterval(function () {

//步长值写到计时器里面 改为整数(往上取整)

var step = (target - obj.offsetLeft) / 10;

//整数往大了取,负数往小了取

step = step > 0 ? Math.ceil(step) : Math.floor(step);

if (obj.offsetLeft == target) {

//如果已经到达指定位置就停止定时器

clearInterval(obj.timer);

//回调函数写到定时器结束之后

callback && callback();

}

//把每次加一步长值改变为慢慢变小的值

obj.style.left = obj.offsetLeft + step + 'px';

}, 15);

}

看完上述内容,你们掌握如何理解JavaScript缓动动画的封装与使用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 如何理解JavaScript缓动动画的封装与使用

本文链接: https://lsjlt.com/news/300603.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何理解JavaScript缓动动画的封装与使用
    如何理解JavaScript缓动动画的封装与使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现过程分析(1)如何重复调用?答:封装一个函数,用一次调用一次代码分析:func...
    99+
    2023-06-21
  • JavaScript详解缓动动画的封装与使用
    实现过程分析 (1)如何重复调用? 答:封装一个函数,用一次调用一次 代码分析: function animate(obj, target, callback) { //详细实现...
    99+
    2024-04-02
  • JavaScript动画函数封装详解
    目录一、动画函数原理二、动画函数简单封装三、 动画函数给不同元素记录不同定时器四、缓动效果原理五、 动画函数在多个目标值之间移动六、动画函数添加回调函数一、动画函数原理 核心原理:通...
    99+
    2024-04-02
  • JavaScript动画函数封装的示例分析
    小编给大家分享一下JavaScript动画函数封装的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、动画函数原理核心原理:通过定时器setInterval() 不断移动盒子位置。实现步骤:获得盒子当前位置让盒子在...
    99+
    2023-06-22
  • JavaScript动画原理之如何使用js进行动画效果的实现
    目录前言1.动画原理2.动画函数的封装3.给不同元素添加定时器4.缓动动画原理5.给动画添加回调函数6.动画函数的使用写在最后前言 动画对于我们来说都不陌生,css里面就有很多动画,...
    99+
    2023-05-14
    js动画效果有哪些 js动画效果代码案例 javascript动画教程
  • 使用JavaScript练习动画最好的方式封面过渡
    目录引言标记和样式html代码CSS代码The JavaScript引言 首先让我们来看一个镜头,这个镜头展示了几个过渡效果,其中之一就是我所说的 "封面过渡",...
    99+
    2024-04-02
  • 关于JavaScript实现动画时动画抖动的原因与解决方法
    目录使用定时器实现动画出现卡顿的原因requestAnimationFrame 的前世今生requestAnimationFrame VS setInterval参考资料总结前段时间...
    99+
    2024-04-02
  • XamarinAndroid中RecylerView动画组件如何使用动画
    小编给大家分享一下XamarinAndroid中RecylerView动画组件如何使用动画,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!如果开发者要为Recyle...
    99+
    2023-06-05
  • CSS3使用过度动画和缓动效果案例讲解
    transition过渡: 四个小属性 属性 意义 ...
    99+
    2024-04-02
  • Vue中如何使用create-keyframe-animation与动画钩子完成复杂动画
    这篇文章主要介绍了Vue中如何使用create-keyframe-animation与动画钩子完成复杂动画,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一...
    99+
    2024-04-02
  • JavaScript动画抖动的原因是什么与怎么解决
    这篇文章主要讲解了“JavaScript动画抖动的原因是什么与怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript动画抖动的原因是什么与怎么解决”吧!使用定时器实现动画...
    99+
    2023-07-02
  • Angular中如何使用动画
    这篇文章主要为大家展示了“Angular中如何使用动画”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Angular中如何使用动画”这篇文章吧。1.  ...
    99+
    2024-04-02
  • 如何使用Python画几何图形动画
    要使用Python来绘制几何图形动画,你可以使用一些库来帮助你完成这个任务,如matplotlib、pygame或turtle。下面...
    99+
    2023-08-20
    Python
  • 深入理解Vue的过度与动画
    1.在插入、更新、移除DOM元素时,在合适的时候给元素添加样式类名 2.元素有一个进入过程:Enter,一个离开过程Leave。 两个过程都有一个初始态()和终止态(-to)和两态之...
    99+
    2024-04-02
  • 使用Android如何模仿APP启动动画
    今天就跟大家聊聊有关使用Android如何模仿APP启动动画,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。效果图:animation.gif实现思路:仔细观察,可以看出动画的执行分为...
    99+
    2023-05-31
    android 动动 pp
  • Java详细分析讲解自动装箱自动拆箱与Integer缓存的使用
    目录1. 前言2. 包装类3. 自动装箱与自动拆箱4. Interger缓存5. 回答题目1. 前言 自动装箱和自动拆箱是什么?Integer缓存是什么?它们之间有什么关系? 先来看...
    99+
    2024-04-02
  • Java自动装箱、自动拆箱与Integer缓存怎么使用
    今天小编给大家分享一下Java自动装箱、自动拆箱与Integer缓存怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1...
    99+
    2023-06-30
  • angular如何使用TweenMax动画库
    小编给大家分享一下angular如何使用TweenMax动画库,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!最近闲来无事,捣鼓捣鼓CSS发现了一个比较好动画库,就...
    99+
    2023-06-14
  • 如何实现Javascript的BOOM动画效果
    如何实现Javascript的BOOM动画效果,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。缘起前几天在 github 上看到同事的一个这样的...
    99+
    2024-04-02
  • SpringBoot自动装配的原理与使用
    目录引言1. 什么是自动装配2. Spring Boot 中的自动装配原理2.1自动装配流程2.2原理2.2.1 @Qualifier2.2.2 @Value2.2.3 @Prima...
    99+
    2023-05-20
    Springboot自动装配原理 Springboot自动装配
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作