清凉一夏小风扇-Vue3版

news/2025/1/13 7:35:31/

这里写目录标题

    • 前言
  • 一、效果
  • 二、代码分享

前言

本片文章主要是做一个小练习,通过Vue来制作一个风扇练习css动画。
上一篇文章主要是讲解了React实现的部分
React实现部分看这里–>

一、效果

在这里插入图片描述

二、代码分享

1、主体框架
“sass”: “^1.62.1”,
“vue”: “^3.2.47”

2、主要技术点
使用事件代理实现绑定多个方法。
使用animation实现动画效果

动态绑定动画样式

3、代码解析
页面结构:

  • 结构比较简单,主要是一个容器content,圆心circle,圆盘底座base,扇叶列表容器item-list,扇叶item
  • 按钮列表容器btn-list,按钮button
  • 这里需要注意的是与React不同的地方是,在扇叶直接绑定号animation动画模板,才会在修改数据时实现响应式
<div v-for="item in itemList" :key="item.id" className="item":style="{ animation: `identifier reverse linear ${speed}s infinite` }"
>
</div>
<template><div className="content"><div className="circle"></div><div className="base" :style="{ animation: `shakeHead linear ${shakeValue}s infinite alternate` }"><div className="item-list"><div v-for="item in itemList" :key="item.id" className="item":style="{ animation: `identifier reverse linear ${speed}s infinite` }"></div></div></div><div className="btn-list" @click="onChangeSpeed($event.target.dataset)"><button v-for="item in btnList" :key="item.id" :data-speedchange="item.dataSpeedchange":data-action="item.dataAction">{{ item.btnName }}</button></div></div>
</template>

代理方法处理:

  • 我们知道事件代理的实现技巧,也知道他的好处,但这里使用事件代理只是为了学习,毕竟现在的电脑配置,这些按钮绑定方法所使用的小号可以忽略不计。
  • 事件代理通过利用事件冒泡机制,将事件处理程序委托给父元素处理,从而避免了在子元素上单独绑定事件处理程序的麻烦
  • 通过元素所绑定的dataset来获取不同的action和参数。
const shakeValue = ref(0)
const speed = ref(0)
const onChangeSpeed = (value) => {console.log(value)let { action, speedchange } = valueconsole.log(speed.value)switch (action) {case 'open':speedchange = speed.value ? speed.value : speedchangespeed.value = speedchangebreak;case 'close':speedchange = 0speed.value = speedchangeshakeValue.value = speedchangebreak;case 'change':speedchange = speed ? speedchange : 0speed.value = speedchangebreak;case 'shake':if (speed && shakeValue.value) {shakeValue.value = 0} else if (speed) {shakeValue.value = speedchange}break;default:break;}
}

数据配置:
这里主要是为了配置dataset用的参数配置

const btnList = [{id: 1,dataSpeedchange: '3',dataAction: 'change',btnName: '1'},{id: 2,dataSpeedchange: '2',dataAction: 'change',btnName: '2'},{id: 3,dataSpeedchange: '1',dataAction: 'change',btnName: '3'},{id: 4,dataSpeedchange: '3',dataAction: 'open',btnName: 'open'},{id: 5,dataSpeedchange: '0',dataAction: 'close',btnName: 'close'},{id: 6,dataSpeedchange: '7',dataAction: 'shake',btnName: 'shake'},
]
const itemList = [{id: 1},{id: 2},{id: 3},{id: 4}
]

动画效果实现:
1、扇叶转动比较简单直接用transform: rotateZ(-360deg);这个就可以实现。
2、相对复杂一点的是摇头的效果,3d动画效果,所以需要用到3d属性rotate3d
3、主要keyframes动画

@keyframes identifier {to {transform: rotateZ(-360deg);}
}@keyframes shakeHead {0% {transform: rotate3d(0, 1, 0, 45deg);}50% {transform: rotate3d(0, -1, 0, 45deg);}100% {transform: rotate3d(0, 1, 0, 45deg);}
}

这里说说摇头的动画

  • 0,1,0表示y轴的正方向旋转
  • 0,-1,0表示y轴的负方向旋转
  • 最后的0,1,0恢复。

那么我们怎么验证看看网页中的坐标轴是什么样的呢:
写个小dome看一下:
可以用xyz分别在控制旋转看看效果,得出的结论

transform: rotateX(45deg);
transform: rotateZ(45deg);
transform: rotateY(45deg);

在这里插入图片描述
这里的z轴是垂直指向屏幕外的方向。


http://www.ppmy.cn/news/107646.html

相关文章

matlab读二进制文件

matlab读二进制文件 1. 打开文件 fid fopen(文件名, 读取方式)fid 句柄值 小于0&#xff0c;表示打开失败&#xff0c;大于0表示打开成功 文件名 字符串&#xff0c;使用单引号 读写方式 r 只读方式打开文件&#xff0c;默认方式&#xff0c;该文件已存在 r 读写方式打开文…

os模块怎样进行文件的增查删改操作?

除 Python 内置方法外&#xff0c;os 模块中也定义了与文件操作相关的函数&#xff0c;包括删除文件、文件重命名、创建/删除目录、获取当前目录、更改默认目录与获取目录列表等os模块在使用之前需要导入&#xff0c;具体代码如下 : import os下面对os模块中的常用函数进行介绍…

不用运算符的加法运算

一.不用运算符的加法 1.题目描述 设计一个函数把两个数字相加。不得使用 或者其他算术运算符。 力扣:力扣 2.问题分析 1.知识预备 注意:下面所有的结论的进位是考虑二进制的进位,因为我们使用的位运算符,是针对二进制进行的. 结论一:在不考虑进位的情况下&#xff0c;其无…

Unity MVC实现背包系统(2)

在上一篇中&#xff0c;我们写了背包系统的伪代码&#xff0c;也说了mvc的设计思路&#xff0c;那么这一篇的任务就是将伪代码补全。 首先制作一个背包面板&#xff0c;我这里比较简单&#xff0c;就是一个滚动视图&#xff0c;还有一个提示文本&#xff0c;外加两个按钮&…

手动计算校正年龄、性别后的标准化死亡率 (SMR)

分析队列人群有无死亡人数超额&#xff0c;通常应用标准人群死亡率来校正&#xff0c;即刻观察到中的实际死亡数&#xff08;D&#xff09;与定一个标准的死亡人数&#xff08;E&#xff09;&#xff0c;D与E之比称为死亡比&#xff08;standarized Mortality ratio&#xff0c…

zookeeper机制及消息队列kafka

目录 一、zookeeper1、zookeeper简介2、zookeeper特点3、zookeeper工作模式及机制4、zookeeper应用场景及选举机制5、zookeeper集群部署 二、消息队列kafka1、为什么要有消息队列2、使用消息队列的好处3、kafka简介4、kafka特点5、kafka系统架构名词介绍6、Kafka架构及流程7、k…

SpringBoot Redis Cache

知识点 Spring高版本引入了Cache的注解技术。该技术是一种规范&#xff0c;官方支持的实现包括Generic、JCache(JSR-107)、&#xff08;EhCache 3&#xff0c;Hazelcast&#xff0c;Infinispan&#xff0c;and others&#xff09;、EhCache 2.x、Hazelcast、Infinispan、Couch…

阿里巴巴淘天集团后端暑期实习面经

目录 1.面向对象三大特性2.重写和重载3.protected 关键字和 default 关键字的作用范围4.栈帧中有哪些东西&#xff1f;5.堆中有哪些区域&#xff1f;6.new 一个对象存放在哪里&#xff1f;7.CMS 收集器回收阶段8.CMS 收集器回收过程哪些需要暂停线程&#xff1f;9.HashMap JDK …