vue3中web前端JS动画案例(一)

 上述案例主要使用定时器,和绝对定位产生动画

<script setup>
import { ref, onMounted, watch } from 'vue'
// ----------------------- 01 js 动画介绍---------------------
// 1、匀速运动
// 2、缓动运动(常见)
// 3、透明度运动
// 4、多物体运动
// 5、多值动画// 6、自己的动画框架
// css3属性的transition 和 animation 可以实现运动// ------------------------ 02 简单运动 ------------------------
// 简单动画存在问题:1、处理边界 2、定时器的管理
const dom = ref(null)
let num = ref(0)
let timer = null
const play = () => {// 先关闭定时器,再开启定时器,防止定时器累加,导致物体加快clearInterval(timer)// 让物体运动起来(定时器)timer = setInterval(() => {// num.value++// dom.value.style.left = num.value + 'px'if (dom.value.offsetLeft === 500) {// clearInterval(timer)dom.value.style.left = 0 + 'px'// return} else {dom.value.style.left = dom.value.offsetLeft + 5 + 'px'}// 使用return或者else 都可以// dom.value.style.left = dom.value.offsetLeft + 5 + 'px'}, 30);
}
const Pause = () => {clearInterval(timer)
}// ----------------------- 03 侧边栏效果------------------
const boxDom = ref(null)
let isShow = ref(true)
const pull = () => {if (isShow.value) {isShow.value = false} else {isShow.value = true}boxDom.value.style.left = 0
}
const hide = () => {if (!isShow.value) {isShow.value = true} else {isShow.value = false}boxDom.value.style.left = -200 + 'px'
}// 缓动动画 0 ~ 200 公式:加速度 = (结束值 - 起始值) / 缓动系数 加速度由慢到快
const boxDom1 = ref(null)
window.onload = () => {let target = 0let target1 = -200boxDom1.value.onmouseover = () => { showAimation(boxDom1.value, target) }boxDom1.value.onmouseout = () => { showAimation(boxDom1.value, target1) }// ----------------- 04 透明度动画 --------------------// 鼠标移入移出boxDom3.value.onmouseover = () => {opacityAnimation(boxDom3.value, 100)}boxDom3.value.onmouseout = () => {opacityAnimation(boxDom3.value, 30)}
}// 缓动动画 0 ~ 200 公式:加速度 = (结束值 - 起始值) / 缓动系数 加速度由慢到快
let timer1 = null
const showAimation = (dom, end) => {clearInterval(timer1)timer1 = setInterval(() => {let speed = (end - dom.offsetLeft) / 10 // 如果速度大于0,向上取整,否则向下取整 speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed) // 判断是否到达目标点 if (dom.offsetLeft === end) {clearInterval(timer1)return}dom.style.left = dom.offsetLeft + speed + 'px'}, 30);
}// 04 透明度动画
const boxDom3 = ref(null)
let alpha = 30
let speed = 0
let timer2 = nullconst opacityAnimation = (dom, endAlpha) => {clearInterval(timer2)timer2 = setInterval(() => {// 求透明度的变化速度speed = endAlpha > alpha ? 5 : -5// 边界的处理if (alpha === endAlpha) {clearInterval(timer2)return}// 改变当前的alpha的值alpha += speed// 改变当前的透明度dom.style.opacity = alpha / 100dom.style.filter = 'alpha(opacity=' + alpha + ')'}, 30);
}// 上下跳动循环播放
const circle = ref(null)
let timer3 = null
const circlePlay = () => {clearInterval(timer3)let direction = 1; // 初始方向:1 表示向下,-1 表示向上timer3 = setInterval(() => {if (circle.value.offsetTop > 100) {console.log(circle.value.offsetTop, '--circle.value.offsetTop--');direction = -1; // 到达底部,改变方向为向上} else if (circle.value.offsetTop <= 50) {direction = 1; // 到达顶部,改变方向为向下}// 根据方向调整移动方式circle.value.style.top = circle.value.offsetTop + (1 * direction) + 'px';}, 30);
}const circlePause = () => {clearInterval(timer3)
}onMounted(() => {
})
</script><template><div class="main"><div class="card-body"><!-- 02 简单运动 --><button id="btn" @click="play">Play</button><button id="btn" @click="Pause">Pause</button><div class="info" ref="dom">dom简单运动</div></div><!-- 03 侧边栏效果 --><div id="box" ref="boxDom">box侧边栏效果 过渡动画<span @click="pull" v-if="isShow">拉开</span><span @click="hide" v-if="!isShow">收起</span></div><!-- 03 侧边栏效果 缓动动画 --><div id="box1" ref="boxDom1">box1侧边栏效果 缓动动画<span>拉开</span></div><div><div style="display: flex;"><button id="btn" @click="circlePlay">Play</button><button id="btn" @click="circlePause">Pause</button></div><!-- 上下循环跳动效果 --><div id="box2">box2上下循环跳动效果<span ref="circle">跳</span></div></div><!-- 04 透明度动画 --><div id="box3" ref="boxDom3">box3透明度动画</div></div></template><style scoped lang="less">
.main {display: flex;flex-direction: column;#btn {width: 80px;height: 40px;border: 1px solid #000;background-color: #829fff;}.card-body {position: relative;height: 240px;.info {position: absolute;left: 0;top: 40px;width: 200px;height: 200px;background-color: pink;}}// 03 侧边栏效果 过渡效果#box {position: relative;left: -200px;transition: all 0.3s; // 过渡效果width: 200px;height: 200px;background-color: rgb(255, 244, 150);span {position: absolute;right: -40px;top: 50%;transform: translateY(-50%);width: 40px;height: 60px;text-align: center;line-height: 60px;background-color: black;color: floralwhite;cursor: pointer;}}// 03 侧边栏效果 缓动动画#box1 {position: relative;left: -200px;width: 200px;height: 200px;background-color: rgb(150, 192, 255);span {position: absolute;right: -40px;top: 50%;transform: translateY(-50%);width: 40px;height: 60px;text-align: center;line-height: 60px;background-color: black;color: floralwhite;cursor: pointer;}}// 上下跳动动画#box2 {position: relative;width: 200px;height: 200px;background-color: rgb(150, 192, 255);span {position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);width: 50px;height: 50px;border-radius: 50%;text-align: center;line-height: 50px;background-color: black;color: floralwhite;cursor: pointer;}}// 04 透明度动画#box3 {width: 200px;height: 200px;background-color: red;color: #fff;opacity: 0.3;// 支持ie8以下浏览器filter: alpha(opacity=30);}
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习实战(18)】torch模型转onnx模型,使用netron根据查看onnx结构

一、ONNX介绍 简单来说&#xff0c;可以把ONNX当做一个中间格式。绝大多数的机器学习/深度学习框架都可以将自身的模型转换成ONNX&#xff0c;同样也能把ONNX转换成自身框架的格式&#xff0c;如下图所示。 二、转ONNX模型代码 import torch import torchvision.models as …

利用selenium发挥vip残存的价值

历史版本谷歌浏览器驱动下载地址 https://chromedriver.storage.googleapis.com/index.html 找到与你电脑当前谷歌浏览器版本一致的驱动然后下载下来(大版本一致即可)。我本地版本是 99.0.04844.51 我这里把 chromedriver 放到 /usr/local/bin 下面了。 启动测试窗口 这里需要…

[tkinter实现]汉字笔顺小软件

软件简介 本软件旨在帮助小学生通过互动式学习掌握汉字的基本笔画和笔顺。软件采用Tkinter库构建&#xff0c;提供了一个用户友好的图形界面&#xff0c;适合小学生使用。 主要功能&#xff1a; 汉字展示&#xff1a;软件能够展示单个汉字&#xff0c;并以动画形式演示其标准…

网络基础(day2)

一、进制转换 在计算机底层通信&#xff0c;以及数据处理都是采用二进制&#xff0c;也就是1和0传递信息&#xff0c;因此进制转换是非常重要的知识点。 十进制&#xff08;DEC&#xff09;【逢十进一 】案例&#xff1a; 按权展开 权&#xff1a;10的N次幂123123二进制&am…

羊大师分析,夏季羊奶的适合人群有哪些?

羊大师分析&#xff0c;夏季羊奶的适合人群有哪些&#xff1f; 夏季羊奶的适合人群相当广泛&#xff0c;主要包括以下几类人群&#xff1a; 生长发育中的孩子&#xff1a;羊奶富含营养&#xff0c;特别是蛋白质和矿物质&#xff0c;对孩子的生长发育有积极的促进作用。 中老年…

【HarmonyOS】Stage 模型 - 基本概念

一、项目结构 如图1所示&#xff1a; 图1 从项目结构来看&#xff0c;这个应用的内部包含了一个子模块叫 entry&#xff0c;模块是应用的基本功能单元&#xff0c;它里面包含源代码、资源、配置文件等。 像这样的模块在应用内部可以创建很多。但模块整体来讲就分成两大类&am…

Python 异常处理与日志记录

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 异常处理是任何编程语言中的重要组成部分&#xff0c;Python 也不例外。Python 提供了丰富的…

换脸插件升级导致SDWebUI无法启动cannot import name ‘Undefined‘ from ‘pydantic.fields‘

今天在一台新的机器环境装了SDWEBUI&#xff0c;都使用最新的版本&#xff0c;升级了下换脸的插件&#xff0c;于是乎启动崩溃了。错误如下 Launching Web UI with arguments: --listen --skip-torch-cuda-test --disable-nan-check --skip-version-check --skip-python-versi…

鸿蒙 harmonyos 线程 并发 总结 async promise Taskpool woker(三)多线程并发 Worker

Worker Worker是与主线程并行的独立线程。创建Worker的线程称之为宿主线程&#xff0c;Worker自身的线程称之为Worker线程。创建Worker传入的url文件在Worker线程中执行&#xff0c;可以处理耗时操作但不可以直接操作UI。 Worker主要作用是为应用程序提供一个多线程的运行环境…

kanzi工程辅助解析

背景:实际开发过程中&#xff0c;使用kanzi studio工程&#xff0c;遇到一个很大的问题&#xff0c;就是在多工程&#xff0c;多预设件&#xff0c;复杂绑定算式情况下&#xff0c;很难梳理接口绑定情况&#xff0c;而且kanzi自带的查找很不好用。尤其是拿到一个新工程&#xf…

春季打卡圣地|超出片的成都文创产业园

春季拍照还在去人民公园、青龙湖吗&#xff1f;这个春天来点不一样的&#xff0c;就在金牛区的成都文创产业园——国际数字影像产业园旁&#xff0c;沙河源公园占地面积约150亩&#xff0c;地下室面积约4000平方米&#xff0c;这里的花能让摄影爱好者们拍个够。 国际数字影像产…

FFmpeg源码编译

msys2 依赖环境安装 依赖环境安装编译X264编译 fdk-aac文件处理编译x265编译FFmpeg 依赖环境安装 编译X264 用于h264 AVC视频格式编码 CCcl ./configure --enable-shared #指定使用cl,编译成动态链接库 make -j32 #使用32线程进行编码 make install命令一 关于第一条命令执…

攻击者使用新型隐写术攻击,针对全球320个组织

隐写术是一种将数据隐藏在看似无害的文件中的技术&#xff0c;使用户和安全产品无法检测到它们。 近期&#xff0c;Positive Technologies 发现了TA558 黑客组织正在开展的一项新活动&#xff0c;使用隐写术将恶意代码隐藏在图像内&#xff0c;从而将各种恶意软件工具传递到目…

展会媒体邀约资源,媒体宣传服务执行

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 在组织展会时&#xff0c;媒体宣传服务的执行是提升展会知名度和影响力的关键环节。 确定目标媒体&#xff1a;根据展会的主题和目标受众&#xff0c;选择适合的媒体进行邀请。这可能包…

docker 虚拟化与docker的概念

一、云计算的三种服务模式 laas、pass、saas 1.1 IaaS: Infrastructure-as-a-Service&#xff08;基础设施即服务&#xff09; 第一层叫做IaaS&#xff0c;有时候也叫做Hardware-as-a-Service&#xff0c;几年前如果你想在办公室或者公司的网站上运行一些企业应用&#xff0c…

将彩色图转化为灰度图及其原理介绍

彩色图介绍 彩色图像是一种包含颜色信息的图像&#xff0c;通常由红色、绿色和蓝色&#xff08;RGB&#xff09;三个颜色通道组成。这三种颜色通道可以叠加在一起来形成各种不同的颜色。 彩色图像中的每个像素都有三个数值&#xff0c;分别表示红色、绿色和蓝色通道的强度或亮…

vue 关键字变红

1.html <div v-html"replaceKeywordColor(item.title)" ></div> 2.js //value为搜索框内绑定的值 replaceKeywordColor(val) {if (val?.includes(this.value) && this.value ! ) {return val.replace(this.value,<font color"red&…

RuoYi-Vue-Plus (SaToken 注解鉴权)

一、SaInterceptor 注解鉴权和路由拦截鉴权 拦截器&#xff1a;SaInterceptor 实现类位置&#xff1a; cn.dev33.satoken.interceptor.SaInterceptor 功能&#xff1a;Sa-Token 综合拦截器&#xff0c;提供注解鉴权和路由拦截鉴权能力 /*** 创建一个 Sa-Token 综合拦截器&…

重学java 19.面向对象 继承 上

走不出的那段阴霾&#xff0c;很多时候只不过是&#xff0c;我们把它当成了唯一 —— 24.4.22 面向对象整体知识导向&#xff1a; 知识梳理&#xff1a; 1.知道继承的好处 2.会使用继承 3.继承之后成员变量和成员方法的访问特点 4.方法的重写&#xff0c;知道方法重写的使用场景…

从构成看自来水厂自动化控制系统的创新与发展

自来水厂自动化控制系统涵盖了多个关键组成部分&#xff0c;包括水管理云平台、供水监控系统以及供水调度平台。 系统内嵌了一系列自主创新的核心算法&#xff0c;这些算法结合了数学建模、机器仿真和流体力学等多元数据模型&#xff0c;以优化设备间的关联和控制关系&#xf…