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

yizhihongxing

实现类似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日

相关文章

  • Jsonp post 跨域方案

    下面我将详细讲解 Jsonp post 跨域方案的完整攻略。 什么是 Jsonp post 跨域方案? 在前端开发中,常常会遇到需要跨越多个域名进行数据交互的问题,而出于安全考虑,浏览器出于安全策略的限制,不允许通过 ajax 请求访问跨域资源,这时可以采用 Jsonp post 跨域方案来实现数据交互。 Jsonp 是一种通过动态创建 script 标签跨…

    JavaScript 2023年5月27日
    00
  • JS开发自己的类库实例分析

    JS开发自己的类库需要经过以下步骤: 步骤一:确定类库的功能 在开发类库之前,需要确定我们想要实现的功能。这些功能需要与当前市场上主流的类库有一定的区别,也可以是现有类库中不足之处的补充。例如,可以考虑开发一个支持异步请求的类库,或者是在表单验证方面做出针对性的改进。 步骤二:编写代码 确定了功能之后,就可以开始编写代码了。在编写代码的过程中,需要注意以下几…

    JavaScript 2023年5月28日
    00
  • JavaScript数据类型转换的注意事项

    JavaScript中的数据类型转换是非常常见的操作,但是在进行类型转换时需要注意一些细节,否则就会出现一些不期望的结果。本攻略将详细讲解JavaScript中数据类型转换的注意事项。 1. 显式类型转换 在JavaScript中,显式类型转换又称为强制类型转换,是指通过一些内置函数将某一数据类型强制转换为其他数据类型。 1.1 Number() Numbe…

    JavaScript 2023年5月18日
    00
  • two.js之实现动画效果示例

    Two.js 介绍 Two.js 是一个用于在网页上创建 2D 动画的轻量级绘图库。它基于 SVG 封装了 Canvas API,可在 Canvas 和 SVG 之间进行切换。Two.js 的通用性非常强,可以应用于多种类型的网页开发。它可以被应用于创意、动态交互和数据可视化等多种场景。本篇攻略将介绍如何实现使用 Two.js 开发动画效果的示例。 安装 T…

    JavaScript 2023年6月10日
    00
  • javascript Array对象使用小结

    下面是关于 JavaScript Array 对象的使用小结: 什么是 JavaScript Array 对象? JavaScript 中的 Array 对象用于表示一组有序数据的集合。数组是一种特殊的对象类型,它可以存储不同类型的数据,包括数字、字符串、甚至是其他数组等等。数组中的每个元素都有一个编号,这个编号叫做索引。 创建数组 创建一个数组对象的方式有…

    JavaScript 2023年5月27日
    00
  • 用python制作个音乐下载器

    制作一个音乐下载器需要完成以下几个步骤: 步骤一:确定下载的音乐网站 首先要确定下载的音乐网站,一般常见的网站包括QQ音乐、酷狗音乐、网易云音乐等。不同的网站采取的下载方式可能有所不同,因此需要先确定目标网站的下载方式。 步骤二:分析目标网站的下载方式 对于不同的网站,其下载方式可能存在差异,因此需要使用网络爬虫对网站进行分析,找到下载音乐的方式。常见的方案…

    JavaScript 2023年5月28日
    00
  • JavaScript函数调用经典实例代码

    JavaScript函数调用经典实例代码攻略: 一、函数调用方式 JavaScript 中函数的调用分为四种方式: 函数调用 直接调用函数。 javascript function fn1() { console.log(“fn1 被调用了”); } fn1(); 方法调用 将函数作为对象的一个属性,通过该对象调用函数。 javascript var obj…

    JavaScript 2023年5月27日
    00
  • 基于Tomcat安全配置与性能优化详解

    基于Tomcat安全配置与性能优化详解 安全配置 HTTPS配置 HTTP是明文传输,不安全,而HTTPS通过SSL/TLS进行加密传输,可以提高传输的安全性。因此,我们需要为Tomcat配置HTTPS,具体步骤如下: 生成证书 我们可以通过如下命令来生成证书: keytool -genkey -alias tomcat -keyalg RSA -keyst…

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