先了解一下-webkit-transform、animation、@keyframes这三个属性吧
-webkit-transform 可以实现平移、旋转、缩放和倾斜等效果 有以下几个属性
translate(x,y) :元素平移
rotate(angle): 旋转元素 比如0deg到360deg 0度到360度
scale(x,y):缩放元素 x,y分别表示水平和垂直方向的缩放比例
skew(x-angle,y-angle) :倾斜元素,分别表示水平和垂直方向的倾斜角度
animation: name duration timing-function delay iteration-count direction fill-mode play-state;
@keyframes 定义动画的关键帧的 比如 想初始状态 过度到中间时 结束时 几个时间段不同的动画状态
常见 0% 、50%、100%
30%时旋转到100度 ,50%时旋转到180度 ........ rotates是这个动画的名字
1 2 3 4 5 6 7 |
@keyframes rotates { 0% { -webkit-transform: rotate(0deg) } 30% { -webkit-transform: rotate(100deg) } 50% { -webkit-transform: rotate(180deg) } 70% { -webkit-transform: rotate(270deg) } 100% {-webkit-transform: rotate(360deg) } } |
简单写个例子吧 就一个加载的状态
让这个element组件的icon五角星转起来
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<template> <div> <el-icon :size="29" :class="{'refresh-loading':isRefresh}" @click="loading"><StarFilled /></el-icon> </div> </template> <script> import { StarFilled } from "@element-plus/icons-vue"; import { ref } from "vue"; export default { setup() { const isRefresh = ref(false) const loading = ()=>{ isRefresh.value = !isRefresh.value } return { isRefresh, loading }; }, }; </script> <style lang="less"> .refresh-loading{ animation: rotates 1s linear infinite; } @keyframes rotates { 0% { -webkit-transform: rotate(0deg) } 30% { -webkit-transform: rotate(100deg) } 50% { -webkit-transform: rotate(180deg) } 70% { -webkit-transform: rotate(270deg) } 100% {-webkit-transform: rotate(360deg) } } </style> |