js实现类似jquery里animate动画效果的方法

实现类似jQuery里的animate动画效果的方法,可以通过纯JavaScript使用定时器setInterval()来实现。

1. 编写animate函数

在JavaScript中,编写一个animate函数,接收四个参数:元素对象、目标属性、动画时长和回调函数。动画时长使用毫秒作为单位,回调函数在动画完成时执行。

/**
 * 实现 animate 动画方法
 * @param {Object} element 要执行动画的元素对象
 * @param {Object} targetObj 目标样式属性对象
 * @param {Number} duration 动画完成时长,单位ms
 * @param {Function} callback 动画结束后的回调函数
 */
function animate(element, targetObj, duration, callback) {
  // 获取元素当前样式
  var currentStyleObj = getCurrentStyleObj(element);

  // 创建定时器对象
  var intervalId = setInterval(function () {
    // 计算每帧变化的值,并更新元素样式
    for (var property in targetObj) {
      var startValue = parseFloat(currentStyleObj[property]);
      var targetValue = parseFloat(targetObj[property]);
      var change = targetValue - startValue;
      var elapsed = Date.now() - startTime;
      var progress = elapsed / duration;
      var val = startValue + change * progress;
      element.style[property] = val + (property === 'opacity' ? '' : 'px');
    }

    // 判断动画是否结束,结束后清除定时器并执行回调函数
    if (elapsed >= duration) {
      clearInterval(intervalId);
      element.style[property] = targetValue + (property === 'opacity' ? '' : 'px');
      callback && callback();
    }
  }, 1000 / 60);

  // 获取元素当前样式的函数
  function getCurrentStyleObj(element) {
    if (window.getComputedStyle) {
      return window.getComputedStyle(element);
    } else {
      return element.currentStyle;
    }
  }

  // 记录动画开始时间
  var startTime = Date.now();
}

2. 示例说明

示例1:移动元素

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Animate Demo</title>

  <style>
    #box {
      width: 100px;
      height: 100px;
      background-color: red;
      position: absolute;
      left: 0;
      top: 0;
    }
  </style>
</head>

<body>

  <div id="box"></div>

  <script>
    var box = document.getElementById('box');

    // 移动到100px, 200px
    animate(box, { left: 100, top: 200 }, 1000, function () {
      console.log('Animation complete');
    });
  </script>

</body>

</html>

示例2:调整元素透明度

<!DOCTYPE html>
<html>

<head>
  <meta charset="UTF-8">
  <title>Animate Demo</title>

  <style>
    #box {
      width: 100px;
      height: 100px;
      background-color: red;
      position: absolute;
      left: 0;
      top: 0;
      opacity: 1;
    }
  </style>
</head>

<body>

  <div id="box"></div>

  <script>
    var box = document.getElementById('box');

    // 透明度从1变为0
    animate(box, { opacity: 0 }, 1000, function () {
      console.log('Animation complete');
    });
  </script>

</body>

</html>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js实现类似jquery里animate动画效果的方法 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • js中获取时间new Date()的全面介绍

    下面给出对”js中获取时间new Date()的全面介绍”的详细讲解。 1. 什么是Date对象? 在JavaScript中,Date对象用于处理日期和时间,它可以获取当前的日期时间,也可以设置指定的日期时间。 使用new Date()命令可以创建一个Date对象。如下面的示例代码: let date = new Date(); console.log(da…

    JavaScript 2023年5月27日
    00
  • js保留两位小数方法总结

    让我来详细讲解一下“js保留两位小数方法总结”的完整攻略。 一、概述 在进行数据处理的过程中,我们经常需要对数字进行保留小数位的操作。在Javascript中,保留两位小数的方法有多种。接下来就来总结一下这些常用的方法。 二、toFixed()方法 使用toFixed()方法可以将数字保留到指定的小数位数,并且返回一个字符串类型的结果。 let num = …

    JavaScript 2023年5月27日
    00
  • Javascript 判断是否存在函数的方法

    判断函数是否存在是 JavaScript 编程中非常常见的问题,可以使用以下方法来完成: 1. 使用 typeof 来判断 JavaScript 中,当函数存在时,其类型为 “function”,可以利用这一点来判断函数是否存在。 if (typeof myFunction === "function") { // myFunction …

    JavaScript 2023年5月27日
    00
  • iOS实现富文本编辑器的方法详解

    iOS实现富文本编辑器的方法详解 什么是富文本编辑器 富文本编辑器(Rich Text Editor)是一种可以输入各种格式文本的编辑器,它能够实现字体、字号、颜色、加粗、斜体、下划线、插入图片、超链接等功能。 富文本编辑器的应用场景 富文本编辑器在各种企业应用软件中使用广泛,如邮件客户端、社交媒体、博客等。它也被广泛运用于在线编辑器、推广页、在线文档等场景…

    JavaScript 2023年5月28日
    00
  • JS操作字符串转换为数值并取整的代码

    当需要将JavaScript字符串转换为数值并取整时,可以使用以下方法: let stringNum = "123.45"; let intNum = parseInt(stringNum); 这里将介绍一些该代码中使用的知识点。 首先,parseInt()函数把前面的字符串参数解析成整数。如果字符串开始的字符无法被转换为数字,则该函数会…

    JavaScript 2023年5月28日
    00
  • 原生js仿jquery animate动画效果

    下面是原生JS仿jQuery animate动画效果的完整攻略: 1. 原理介绍 要实现原生JS仿jQuery animate动画效果,需要了解以下知识点: window.requestAnimationFrame(callback):该方法会在浏览器下一次重绘之前执行指定的回调函数。通过使用该方法,可以让动画更加流畅,避免使用setTimeout时出现卡顿…

    JavaScript 2023年6月10日
    00
  • js几个不错的函数 $$()

    当我们在操作 DOM 元素时,选择器是一个非常重要的部分。虽然在实现选择器时,使用 querySelector() 和 querySelectorAll() 不是最佳选择,但它们确实是使用最频繁的选择器。 然而,现在有一个新兴的 DOM 选择器,即 $$() 函数,它是一个 querySelectorAll() 的别名。虽然在一些场景下不如 querySel…

    JavaScript 2023年5月27日
    00
  • 纯原生js实现table表格的增删

    下面是关于纯原生JS实现table表格的增删的攻略: 实现前必备知识 在开始实现表格的增删功能之前,有几点需要准备: HTML表格的结构 css样式控制 表格数据的动态绑定 监听HTML元素的事件 通过JS操作HTML元素 实现过程 首先创建一个空表格,代码如下: “`html Name Age Gender 操作 “` 接着,在JS代码里,声明一个对象…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部