JS实现图片旋转动画效果封装与使用示例

2023-12-09前端开发
8

下面是对“JS实现图片旋转动画效果封装与使用示例”的详细讲解:

标题

JS实现图片旋转动画效果封装与使用示例

描述

本文介绍如何使用JavaScript封装实现图片旋转的动画效果,并提供两个使用示例,帮助读者更好地理解这个实现过程。

动画效果实现原理

要想实现图片旋转动画效果,需要借助CSS3的transform属性。其中,transform属性可以改变元素的形态,包括旋转、缩放、移动等。而实现旋转动画效果,则需要借助transform的rotate属性。具体实现过程可参考以下代码:

.rotate {
  animation: rotate 2s linear infinite;
}

@keyframes rotate {
  0% {
    transform: rotate(0deg);
  }

  100% {
    transform: rotate(360deg);
  }
}

以上代码定义了一个旋转动画效果的CSS类名,当该类名应用于某个元素时,该元素就会以中心点进行旋转。其中,animation属性用于指定动画名称、持续时间、动画速度等信息,而keyframes则是定义动画效果的关键。在本例中,定义了一个从0度到360度的旋转动画效果,持续时间为2秒,并设置了该动画无限循环。

实现过程

接下来,我们基于以上CSS代码,通过JavaScript实现旋转动画效果的封装。

function rotate(element, duration) {
  element.classList.add('rotate');

  setTimeout(() => {
    element.classList.remove('rotate');
  }, duration || 2000);
}

以上代码就是一个简单的旋转动画效果的封装函数。其中,函数接收两个参数:element表示需要进行旋转动画的元素,duration表示旋转动画的持续时间(可选,默认值为2000ms)。这里主要介绍函数的实现,使用示例将在下文中介绍。

首先,我们先为元素添加CSS类名rotate,从而触发CSS中定义的旋转动画。接着,通过setTimeout函数,延迟duration时间(默认值为2000ms)之后,从元素中移除CSS类名rotate,从而完成动画效果的结束。

使用示例一

下面,我们结合HTML代码,给出一个使用示例:

<div id="box">这是一个需要进行旋转动画的元素</div>
<button onclick="start()">点击开始动画</button>
function start() {
  const box = document.getElementById('box');
  rotate(box, 3000); // 持续3秒的旋转动画
}

在上述代码中,我们使用了一个onclick事件,当按钮被点击时,就会调用函数start。在该函数中,通过document.getElementById函数获取到需要进行旋转动画的元素,然后调用之前封装的rotate函数,从而开始进行旋转动画。其中,rotate函数的第二个参数为3000ms,表示将持续3秒时间。

使用示例二

下面,我们再给出一个使用示例,介绍如何通过循环控制,实现多个元素连续进行旋转动画:

<div class="rotate-item">这是第1个需要进行旋转动画的元素</div>
<div class="rotate-item">这是第2个需要进行旋转动画的元素</div>
<div class="rotate-item">这是第3个需要进行旋转动画的元素</div>
<div class="rotate-item">这是第4个需要进行旋转动画的元素</div>
<button onclick="start()">点击开始动画</button>
function start() {
  const items = document.querySelectorAll('.rotate-item');
  let duration = 2000;

  items.forEach((item) => {
    setTimeout(() => {
      rotate(item, duration); // 持续2秒的旋转动画
    }, duration);
    duration += 2000;
  });
}

在上述代码中,我们使用了一个querySelectorAll函数,获取到所有需要进行旋转动画的元素,然后通过forEach函数对每个元素进行单独的旋转动画。在forEach循环中,我们按照一定的时间间隔,依次对每个元素进行旋转动画。其中,duration变量表示每个元素将持续的旋转时间,其初始值为2000ms,循环结束后该值会累加。由于每个元素的旋转动画时间相同,因此可通过该变量进行简单的计算。

The End

相关推荐

layui实现图片上传成功后回显点击放大图片功能
layui实现图片上传成功后回显点击放大图片功能,html代码部分: !-- html代码--div class="layui-form-item" label class="layui-form-label"上传图片/label div class="layui-input-block" button type="button" class="layui-btn" id="license-auth-letter-...
2025-09-06 前端开发
202

Layui实现数据表格中鼠标悬停图片放大离开时恢复原图
Layui实现数据表格中鼠标悬停图片放大离开时恢复原图的效果,最终效果如下图所示: 实现代码如下,在done函数中调用hoverOpenImg方法 var tableIns = window.demoTable = table .render({ elem : '#idTest', id : 'idTest', url : '/postData', //width : 150...
2025-09-04 前端开发
112

layui点击文本输入框调起弹出选择框并选择内容的两种方法参考
我们在用到layui时候,需要点击文本输入框调起弹出选择框并选择内容,这个要怎么操作呢?以下两种方法可以参考: 1、点击名称,弹出信息弹框,选择表格中的某一行,实现效果如下: html页面代码 !--计量器具弹出层-- div id="equipment" lay-filter="equipmen...
2025-09-02 前端开发
167

网站部署https后百度地图不显示问题
https的网站如果引用百度地图,会出现加载不了的问题,这是因为涉及到跨域问题,网站是https的,但是引用百度地图的是http的,这个要怎么操作呢? 比如我引用的地址:http://api.map.baidu.com/api?v=2.0ak=AK显示 后来看了一下,少了一个s=1字段,加一下s=1...
2025-07-28 前端开发
139

微信小程序实现点击复制功能和手机拨打电话功能
做小程序项目的时候,客户提了一个功能需求优化,就是长按文字需要复制全部内容,因为有的手机支持全选复制,有的手机不支持全选复制。 通过设置系统剪贴板的内容和获取系统剪贴板的内容实现复制功能 html相关代码: van-field value="{{form.contactPhone}}"...
2025-07-02 前端开发
78

js拖拽排序插件Sortable.js如何使用
由于项目功能需要,要实现对table中的行实现拖拽排序功能,找来找去发现Sortable.js能很好的满足这个需求,而且它还是开源的,于是乎就开始学习使用Sortable.js 特点 轻量级但功能强大 移动列表项时有动画 支持触屏设备和大多数浏览器(IE9及以下除外) 支持...
2025-06-12 前端开发
161