vue3中web前端JS动画案例(二)多物体运动-多值运动

<script setup>
import { ref, onMounted, watch } from 'vue'
// ----------------------- 01 js 动画介绍---------------------
// 1、匀速运动
// 2、缓动运动(常见)
// 3、透明度运动
// 4、多物体运动
// 5、多值动画

// 6、自己的动画框架
// css3属性的transition 和 animation 可以实现运动

window.onload = () => {

  // ----------------- 05 多物体动画 --------------------
  // 鼠标移入移出
  // 使用 querySelectorAll 获取所有的 .mul 元素
  const mulElements = boxDom4?.value?.querySelectorAll('.mul');
  for (let i = 0; i < mulElements.length; i++) {
    if (i === 0) {
      mulElements[i].onmouseover = () => {
        allBoxAnimation(mulElements[i], 'height', 300)
      }
      mulElements[i].onmouseout = () => {
        allBoxAnimation(mulElements[i], 'height', 150)
      }
    } else if (i === 1) {
      mulElements[i].onmouseover = () => {
        allBoxAnimation(mulElements[i], 'width', 600)
      }
      mulElements[i].onmouseout = () => {
        allBoxAnimation(mulElements[i], 'width', 300)
      }
    } else if (i === 2) {
      mulElements[i].onmouseover = () => {
        allBoxAnimation(mulElements[i], 'opacity', 30)
      }
      mulElements[i].onmouseout = () => {
        allBoxAnimation(mulElements[i], 'opacity', 100)
      }
    }
  }
}


// ------------------05 多物体运动-------多值运动(添加形参attr)--------
const boxDom4 = ref(null)
let speed1 = 0
const allBoxAnimation = (dom, attr, endTarget) => {
  // 注意:针对于多物体运动,定时器的返回值要绑定当前的对象中。offsetWidth获取的是包括border的宽度,所以这里使用getComputed获取width
  clearInterval(dom.timer)
  dom.timer = setInterval(() => {
    let cur = 0
    // 0 获取样式属性
    // 透明度变化处理
    if (attr === 'opacity') {
      // 求透明度的变化速度,注意!小数需要取整
      cur = Math.round(parseFloat(getStyle(dom, attr)) * 100)
    } else {
      // 获取dom宽度或高度等
      cur = parseInt(getStyle(dom, attr))
    }

    // 1、求速度
    speed1 = (endTarget - cur) / 20
    speed1 = endTarget > cur ? Math.ceil(speed1) : Math.floor(speed1)

    // 2、临界处理
    if (endTarget === cur) {
      clearInterval(dom.timer)
      return
    }
    // 3、运动起来
    if (attr === 'opacity') {
      dom.style[attr] = `alpha(opacity=${cur + speed1})`
      dom.style[attr] = (cur + speed1) / 100
    } else {
      dom.style[attr] = cur + speed1 + 'px'
    }
  }, 30)
}

// dom 是对象, attr 是什么属性
// 获取元素属性的方法
const getStyle = (dom, attr) => {
  if (dom.currentStyle) {
    // 针对IE浏览器
    return dom.currentStyle[attr]
  } else {
    // 针对 Firefox浏览器
    return getComputedStyle(dom, null)[attr]
  }
}

onMounted(() => {
})
</script>

<template>
  <div class="main">
    <!-- 05多物体运动 -->
    <div id="box4" ref="boxDom4">
      <div class="mul"></div>
      <div class="mul"></div>
      <div class="mul"></div>
    </div>
  </div>


</template>

<style scoped lang="less">
.main {
  display: flex;
  flex-direction: column;

  // 多物体运动
  #box4 {
    .mul {
      width: 300px;
      height: 50px;
      background-color: rgb(111, 60, 253);
      margin: 20px 0;
      border: 4px solid #000;
    }
  }
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/563848.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OWASP发布十大开源软件安全风险及应对指南

​ 最近爆发的XZ后门事件&#xff0c;尽管未酿成Log4j那样的灾难性后果&#xff0c;但它再次敲响了警钟&#xff1a;软件供应链严重依赖开源软件&#xff0c;导致现代数字生态系统极其脆弱。面对层出不穷的安全漏洞&#xff0c;我们需要关注开源软件 (OSS)风险 &#xff0c;改进…

干货 | 用几个语法打破你对Python的滤镜

Python现在是越来越火爆&#xff0c;不仅是风靡世界&#xff0c;还直接进入了中小学生的课堂。所以有越来越多的人想要尝试编程了。 想到以前当我第一次用代码打出“Hello, world”的时候&#xff0c;那种兴奋激动之情&#xff0c;真的是难以言表。 不过很多同学在刚入门的时…

nodejs在控制台打印艺术字

const figlet require("figlet");figlet("SUCCESS", function (err, data) {if (err) {console.log("Something went wrong...");console.dir(err);return;}console.log(data);}); 参考链接&#xff1a; https://www.npmjs.com/package/figlet…

Facebook账号运营要用什么IP?

众所周知&#xff0c;Facebook封号大多数情况都是因为IP的原因。Facebook对于用户账号有严格的IP要求和限制&#xff0c;以维护平台的稳定性和安全性。在这种背景下&#xff0c;海外IP代理成为了一种有效的解决方案&#xff0c;帮助用户避免检测&#xff0c;更加快捷安全地进行…

【LeetCode: 39. 组合总和 + 递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

程序员缓解工作压力的小窍门

目录 程序员缓解工作压力的小窍门 方向一&#xff1a;工作与休息的平衡 方向二&#xff1a;心理健康与自我关怀 方向三&#xff1a;社交与网络建设 程序员缓解工作压力的小窍门 程序员的工作性质常常伴随着高度的精神集中和持续的创新压力。为了保持高效和创新&#xff0c…

算法题解记录20+++

题目描述&#xff1a; 难度&#xff1a;简单 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来…

伪逆矩阵的两种求法

当矩阵的行列不相等&#xff0c;矩阵不是方阵时&#xff0c;求解矩阵的逆&#xff0c;可以使用伪逆的方法。 求解伪逆有两种方式。本文以mxn&#xff08;m<n&#xff09;的矩阵求解为例。 方法1&#xff1a;右伪逆 对于一个矩阵 和矩阵&#xff0c;如何矩阵之间满足&#…

3D模型人物换装系统(五 模型核批之后模型uv不正确)模型UV不正确

3D模型人物换装系统&#xff08;五 模型核批之后模型uv不正确&#xff09;模型UV不正确 介绍展示Maya导入查看uvUnity中测试分析没合批为什么没有问题总结 介绍 最近在公司里给公司做模型优化合批的时候发现了模型的uv在合批之后无法正常展示&#xff0c;这里找了很多的原因&a…

hadoop安装记录

零、版本说明 centos [rootnode1 ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)jdk [rootnode1 ~]# java -version java version "1.8.0_311" Java(TM) SE Runtime Environment (build 1.8.0_311-b11) Java HotSpot(TM) 64-Bit Server VM (…

讲座回顾|DolphinDB 携手上海高金共探量化前沿

4月16日&#xff0c;由上海高级金融学院 MBA 量化投资俱乐部和上海交通大学量化分析协会联合举办的量化公开课如期在上海举行。DolphinDB 创始人兼 CEO 周小华博士作为演讲嘉宾受邀出席&#xff0c;针对如何利用中高频数据挖掘因子的话题&#xff0c;为大家分享了行业的前沿应用…

Nginx 代理配置

最近&#xff0c;工作中遇到需要用到 Nginx 实现正向web代理和反向web代理的需求&#xff0c;其中反向web代理需要支持发送HTTP 和 HTTPS请求 1. 正向代理 1.1. 正向代理 流程 下面以访问百度为例解释正向代理过程&#xff1a; 客户将浏览器代理地址设置为代理服务器地址和服…

入门产品经理你一定要知道的事(上)

产品&#xff08;Product&#xff09;是任何可以让人注意、获取、使用、或能够满足某种消费需求的东西。可以是实体产品、服务、人、组织、地点、思想等。 狭义上产品特指互联网产品&#xff0c;是关于软件、硬件的集合体。本期文章所说的产品是指互联网产品。 产品经理&#…

Spring Boot中JUnit 4与JUnit 5的如何共存

文章目录 前言一、先上答案二、稍微深入了解2.1 maven-surefire-plugin是什么2.2 JUnit4和JUnit5有什么区别2.2.1 不同的注解2.2.2 架构 前言 在maven项目中&#xff0c;生成单测时是否有这样的疑问&#xff1a;该选JUnit4还是JUnit5&#xff1f;在执行 mvn test 命令时有没有…

跳表:高效索引的神奇算法

跳表&#xff08;Skip List&#xff09;的设计思想基于二叉查找树和链表&#xff0c;它采用了一种多层次的思路&#xff0c;通过随机化的方式在每个节点添加多个后继节点&#xff0c;从而实现快速查找 跳表是一种数据结构&#xff0c;它以一种分层的方式来存储数据&#xff0c;…

百面算法工程师 | 分类和聚类

目录 6.1 为什么正确率有时不能有效评估分类算法&#xff1f; 6.2 什么样的分类器最好&#xff1f; 6.3 什么是聚类&#xff0c;你知道哪些聚类算法&#xff1f; 6.4 K-Means聚类算法如何调优? 6.5 K-Means聚类算法如何选择初始点? 6.6 K-Means聚类聚的是特征还是样本 …

一文掌握:数据湖是什么?可不是数据仓库

一、什么是数据湖 数据湖&#xff08;Data Lake&#xff09;是指一个大型数据存储和处理系统&#xff0c;它能够存储各种类型和格式的数据&#xff0c;包括结构化数据、半结构化数据和非结构化数据。数据湖的目的是为了让企业可以更好地管理和利用大量的数据&#xff0c;以便进…

Email API的安全性如何保障?API发信技巧?

Email API有哪些主要功能&#xff1f;如何选择邮箱API进行集成&#xff1f; Email API在企业和个人用户之间发挥着举足轻重的作用。然而&#xff0c;随着Email API的广泛应用&#xff0c;其安全性问题也逐渐凸显出来。那么&#xff0c;Email API的安全性究竟如何保障呢&#x…

基于 Grassmannian Manifold的动态图嵌入学习的脑网络时空枢纽识别

Spatiotemporal Hub Identification in Brain Network by Learning Dynamic Graph Embedding on Grassmannian Manifold 摘要 神经成像技术的进步使得测量不同大脑区域之间的连接随时间演变成为可能。新出现的证据表明&#xff0c;一些关键的大脑区域&#xff0c;称为枢纽节点…

adb工具使用

作者简介&#xff1a; 一个平凡而乐于分享的小比特&#xff0c;中南民族大学通信工程专业研究生在读&#xff0c;研究方向无线联邦学习 擅长领域&#xff1a;驱动开发&#xff0c;嵌入式软件开发&#xff0c;BSP开发 作者主页&#xff1a;一个平凡而乐于分享的小比特的个人主页…