JS动画函数封装

news/2024/7/19 15:05:02 标签: js

JS动画

  • 动画实现原理
  • 实现步骤
  • 动画函数简单封装
  • 给不同元素记录不同定时器
  • 缓动动画
  • 动画函数的使用

动画实现原理

核心原理:通过定时器setInterval()不断移动盒子位置。

实现步骤

1、获得盒子当前位置
2、让盒子在当前位置加上1个移动距离。
3、利用定时器不断重复这个操作
4、加一个结束定时器的条件
5、注意此元素需要添加定位,才能使用element.style.left

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>动画原理</title>
    <style>
        div{
            position: absolute;
            left:0;
            width: 100px;
            height:100px;
            background-color: pink;
        }
    </style>
</head>
<body>
  <div></div>
  <script>
      // 1、获得盒子当前位置
      // 2、让盒子在当前位置加上1个移动距离。
      // 3、利用定时器不断重复这个操作
      // 4、加一个结束定时器的条件
      // 5、注意此元素需要添加定位,才能使用element.style.left
      var div = document.querySelector('div');
      // div.style.left = div.offsetLeft + 5 + 'px';
      var timer = setInterval(function () {
          if(div.offsetLeft >= 400){
              //停止动画 本质是停止定时器
              clearInterval(timer);
          }
          div.style.left = div.offsetLeft + 5 + 'px';
      },60)
  </script>
</body>
</html>

在这里插入图片描述

动画函数简单封装

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>动画原理</title>
    <style>
        div{
            position: absolute;
            left:0;
            width: 100px;
            height:100px;
            background-color: pink;
        }
        span {
            position: absolute;
            display: block;
            left: 0;
            top:200px;
            width: 150px;
            height: 150px;
            background-color: purple;
        }
    </style>
</head>
<body>
  <div></div>
  <span></span>
  <script>
     //简单动画函数封装obj目标对象target目标位置
      function animate(obj,target) {

         // div.style.left = div.offsetLeft + 5 + 'px';
         var timer = setInterval(function () {
              if(obj.offsetLeft >= target){
              //停止动画 本质是停止定时器
                   clearInterval(timer);
              }
              obj.style.left = obj.offsetLeft + 1 + 'px';
             },60);
     }
     var div = document.querySelector('div');
      var span =  document.querySelector('span');
      //调用函数
      animate(div,300)
      animate(span,500)
  </script>
</body>
</html>

在这里插入图片描述

给不同元素记录不同定时器

如果多个元素都使用这个动画函数,每次都要var声明定时器,我们可以给不同的元素使用不同的定时器(自己专门用自己的定时器)。
核心原理:利用JS是一门动态语言,可以·很方便给当前对象添加属性。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>动画原理</title>
    <style>
        div{
            position: absolute;
            left:0;
            width: 100px;
            height:100px;
            background-color: pink;
        }
        span {
            position: absolute;
            display: block;
            left: 0;
            top:200px;
            width: 150px;
            height: 150px;
            background-color: purple;
        }
    </style>
</head>
<body>
  <button>出发</button>
  <div></div>
  <span></span>
  <script>
     //简单动画函数封装obj目标对象target目标位置
      function animate(obj,target) {
    //当我们不断的点击按钮,这个元素的速度会越来越快,因为开启了太多的定时器
    //解决方案就是让我们元素只有一个定时器执行
    //先清除以前的定时器,只保留当前的一个定时器
      clearInterval(obj.timer);
         // div.style.left = div.offsetLeft + 5 + 'px';
         obj.timer = setInterval(function () {
              if(obj.offsetLeft >= target){
              //停止动画 本质是停止定时器
                   clearInterval(obj.timer);
              }
              obj.style.left = obj.offsetLeft + 5 + 'px';
             },60);
     }
      var div = document.querySelector('div');
      var span =  document.querySelector('span');
      var btn = document.querySelector('button');
      //调用函数
      animate(div,300)
      btn.addEventListener('click',function (evt) {
          animate(span,400);
      })
  </script>
</body>
</html>

在这里插入图片描述

缓动动画

**原理:**让元素运动速度有所变化,最常见的是让速度慢慢停下来
1、让盒子每次移动的距离慢慢变小,速度就会慢慢落下来。
2、核心算法:(目标值 - 现在的位置)/ 10 作为每次移动的距离步长
3、停止的条件是:让当前盒子位置等于目标位置就停止定时器。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>动画原理</title>
    <style>
        div{
            position: absolute;
            left:0;
            width: 100px;
            height:100px;
            background-color: pink;
        }
        span {
            position: absolute;
            display: block;
            left: 0;
            top:200px;
            width: 150px;
            height: 150px;
            background-color: purple;
        }
    </style>
</head>
<body>
  <button>出发</button>
  <span></span>
  <script>
     //简单动画函数封装obj目标对象target目标位置

          //当我们不断的点击按钮,这个元素的速度会越来越快,因为开启了太多的定时器
          //解决方案就是让我们元素只有一个定时器执行
          //先清除以前的定时器,只保留当前的一个定时器
          function animate(obj, target) {
              clearInterval(obj.timer);
              // div.style.left = div.offsetLeft + 5 + 'px';
              obj.timer = setInterval(function () {
                  //步长值写到定时器的里面
                  // var step = Math.ceil((target - obj.offsetLeft) / 10);
                  var step = (target - obj.offsetLeft) /10;
                   step = step > 0 ? Math.ceil(step) : Math.floor(step);
                  if (obj.offsetLeft = target) {
                      //停止动画 本质是停止定时器
                      clearInterval(obj.timer);
                  }
                  //把每次加n这个步长值改为一个慢慢变小的值 步长公式:(目标值 - 现在的位置)/ 10
                  obj.style.left = obj.offsetLeft + step + 'px';

              }, 15);

      }
      var span =  document.querySelector('span');
      var btn = document.querySelector('button');
      //调用函数
      btn.addEventListener('click',function (evt) {
          animate(span,500);
      })
  </script>
</body>
</html>

动画函数的使用

因为以后经常使用这个动画函数,可以单独封装到一个JS文件里面,使用的时候引用这个JS文件即可。
1、创建一个JS文件
2、在所需页面引用JS文件


```go
  <script src="JS/animate.js"></script>


http://www.niftyadmin.cn/n/553053.html

相关文章

chrome.declarativeWebRequest

chrome.declarativeWebRequest 清单文件规则条件与操作的求值使用优先级覆盖规则类型HeaderFilterRequestMatcherCancelRequestRedirectRequestRedirectToTransparentImageRedirectToEmptyDocumentRedirectByRegExSetRequestHeaderRemoveRequestHeaderAddResponseHeaderRemoveR…

测试工程师的一些面试题目(python)

http://www.mamicode.com/info-detail-2399086.html 有一个列表&#xff0c;每个元素存放学生姓名、成绩&#xff0c;按学生成绩从优到差排序。 stu[张三:20,李四:70,王五:88,李六:40,赵琦:55.5]def sortscore(A): for j in range(len(A)): for i in range(len(A)-1)…

jQuery 样式操作

jQuery链式编程jQuery样式操作类操作与className区别链式编程 链式编程是为了节省代码量&#xff0c;看起来更优雅。 $(this).css(color,red).sibling().css(color,);<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"&…

模拟实现select组件功能

最近有个页面需要用到select&#xff0c;UI给定了特定的样式&#xff0c;但是浏览器默认select的样式改不了&#xff0c;所以自己模拟实现一个 页面结构 <div class"buildSelect timeSelect"><div class"sel_show" id"timeText"> &l…

jQuery 效果

jQuery 效果显示隐藏效果滑动效果事件切换动画队列及停止排队方法淡入淡出效果自定义动画animatejQuery 给我们封装了很多动画效果&#xff0c;最为常见的如下&#xff1a; 显示隐藏&#xff1a;show&#xff08;&#xff09;、hiden()、toggle&#xff08;&#xff09; 滑动&a…

5.8路由器

今天学习了关于路由器的课程 静态路由是指由网络管理员手工配置的路由信息&#xff0c;当网络的拓扑结构或链路的状态发生变化时&#xff0c;网络管理员需要手工去修改路由表中相关的静态路由信息。静态路由信息在缺省情况下是私有的&#xff0c;不会传递给其他的路由器。当然&…

jQuery属性操作

jQuery属性操作设置或获取元素固有属性值prop&#xff08;&#xff09;设置或获取元素自定义属性attr&#xff08;&#xff09;数据缓存data()设置或获取元素固有属性值prop&#xff08;&#xff09; 所谓元素固有属性就是元素本身自带的属性&#xff0c;比如<a>元素里面…

open-source--攻防世界

题目直接给了源码&#xff0c;发现只要跳过条件就可以得到flag 转载于:https://www.cnblogs.com/chuxinbubian/p/10831568.html