vue3+ts+element-plus大屏看板---横向轮播(anime.js)

vue3+ts大屏看板---横向轮播(anime.js)

  • 1. 安装和引入anime.js
      • 1. 安装
      • 2. 引入
        • * 引入报错:引入时候报错
  • 2. 基于vue3+ts+anime.js实现一个大屏组件轮播效果,如下
      • 1. 写一个需要轮播的模块样式
        • ✏️ 代码(有写注释)
        • 📖 运行效果
      • 2. 加入横向轮播图动画
        • ✏️ 直接上代码(有写注释)
        • 📖 运行效果
      • 3. 添加鼠标移入暂停,移出继续的事件
  • 日常学习笔记,有路过的发现错误希望能指出!🙏

vue3+ts+anime.js大屏看板--横向轮播

1. 安装和引入anime.js

1. 安装

npm install animejs --save因为使用ts所以还要同时下载npm i --save-dev @types/animejs

2. 引入

import anime from 'animejs';

* 引入报错:引入时候报错

在这里插入图片描述

无法找到模块“animejs”的声明文件。“/Users/zhaomengqi/Desktop/mq2023/vue3-admin/node_modules/animejs/lib/anime.js”隐式拥有 "any" 类型。尝试使用 `npm i --save-dev @types/animejs` (如果存在),或者添加一个包含 `declare module 'animejs';` 的新声明(.d.ts)文件ts(7016)

根据提示已经下载过,需要在根目录下创建index.vue.d.ts文件,添加下边一行代码就可以了

declare module 'animejs'

在这里插入图片描述

  1. anime使用到的一些属性

时间曲线:easing:
easing: ‘linear’//匀速
easing: ‘easeInOutSine’//不匀速

动画方向:direction
direction: ‘horizontal’//水平正方向
direction: ‘reverse’//水平反方向

2. 基于vue3+ts+anime.js实现一个大屏组件轮播效果,如下

1. 写一个需要轮播的模块样式

✏️ 代码(有写注释)

<template><div class="es-center-bottom"><div ref="listRef" class="es-bottom-list" ><div v-for="item in picList" class="es-bottom-item" ><img :src="getImgUrl(item.pic)" alt=""></div></div></div>
</template>
<script setup lang="ts" name="carousel">
import anime from 'animejs';
const picList = [{pic:'../../assets/pic/pci1.svg'},{pic:'../../assets/pic/pci2.svg'},{pic:'../../assets/pic/pci3.svg'},{pic:'../../assets/pic/pci4.svg'},{pic:'../../assets/pic/pci5.svg'},{pic:'../../assets/pic/pci6.svg'},{pic:'../../assets/pic/pci7.svg'},{pic:'../../assets/pic/pci8.svg'},{pic:'../../assets/pic/pci9.svg'},
]
const getImgUrl = (src: string): string => {return new URL(`${src}`, import.meta.url).href;
};
</script>
<style scoped lang="scss">
.es-center-bottom {padding-top: 20px;position: relative;width: 500px;overflow: hidden;height: 150px;background-color: #1e108ddf;.es-bottom-item {position: absolute;top: 0;left: 0;width: 70px;height: 80px;display: flex;flex-direction: column;justify-content: center;align-items: center;background-color: #e0e1e7f1;font-size: 22px;font-weight: 600;img{width: 40px;}}
}
</style>

📖 运行效果

在这里插入图片描述

2. 加入横向轮播图动画

✏️ 直接上代码(有写注释)

///动画相关代码
const listRef = ref()
let spacing = 10//模块之间的间距
var animation = shallowRef<ReturnType<typeof anime>>(null)
const init = () => {// 动画中所有模块实例对象集合const children = listRef.value?.children || []//如果没有实例作拦截if (!children.length) return// 获取列表集合中第一个元素宽,通过宽和元素之间的间距计算出移动距离firstDiffconst firstEl = children[0] as HTMLElementconst firstDiff = firstEl.offsetWidth  + spacing// 默认将list元素向左移动一个item的距离listRef.value!.style.transform = `translateX(-${firstDiff}px)`const transList: any = []let total = 0 //声明总宽// 设置初始位置anime.set(children, {['translateX']: (el: HTMLElement, i: number) => {//计算得出总宽const distance = el.offsetWidth + spacingtotal += distance//设置初始运动点为0const diff = (i + 1) * distance//收集所有小模块运动x轴点值transList[i] = { ['x']: diff }return diff}})// 设置list容器的宽或高listRef.value!.style['width'] = total + 'px'// 添加动画animation.value = anime({targets: transList,duration:8000,//一个动画时间easing: 'linear',direction: 'horizontal',['x']: `+=${total}`,loop: true,//是否循环update: () => {anime.set(children, {['translateX']: (_el: any, i: string | number) => {return transList[i]['x'] % total}})},})
}
onMounted(() => {init()
})

📖 运行效果

在这里插入图片描述

3. 添加鼠标移入暂停,移出继续的事件

在这里插入图片描述

//鼠标移入事件
const eover = () => {animation.value.pause()
}
//鼠标移出事件
const eout = () => {animation.value.play()
}

日常学习笔记,有路过的发现错误希望能指出!🙏

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

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

相关文章

分布式应用:ELK企业级日志分析系统

目录 一、理论 1.ELK 2.ELK场景 3.完整日志系统基本特征 4.ELK 的工作原理 5.ELK集群准备 6.Elasticsearch部署&#xff08;在Node1、Node2节点上操作&#xff09; 7.Logstash 部署&#xff08;在 Apache 节点上操作&#xff09; 8.Kiabana 部署&#xff08;在 Node1 节点…

基于短信宝API零代码实现短信自动化业务

场景描述&#xff1a; 基于短信宝开放的API能力&#xff0c;实现在特定事件&#xff08;如天气预警&#xff09;或定时自动发送短信&#xff08;本文以定时群发短信为例&#xff09;。通过Aboter平台如何实现呢&#xff1f; 使用方法&#xff1a; 首先创建一个IPaaS流程&…

网络安全设备-等保一体机

本文为作者学习文章&#xff0c;按作者习惯写成&#xff0c;如有错误或需要追加内容请留言&#xff08;不喜勿喷&#xff09; 本文为追加文章&#xff0c;后期慢慢追加 等保一体机的功能 等保一体机产品主要依赖于其丰富的安全网元&#xff08;安全网元包括&#xff1a;防火…

uniapp 微信小程序 上下滚动的公告通知(只取前3条)

效果图&#xff1a; <template><view class"notice" click"policyInformation"><view class"notice-icon"><image mode"aspectFit" class"img" src"/static/img/megaphone.png"></i…

前端渲染数据

在前端对接受后端数据处理后返回的接收值的时候&#xff0c;为了解决数据过于庞大&#xff0c;而对数据进行简化处理例如性别&#xff0c;经常会使用1&#xff0c; 0这俩个来代替文字的男&#xff0c;女。以下就是前端渲染的具体实现。 以下是部分代码 <el-table-columnpr…

Java8 list多属性去重

大家好&#xff0c;我是三叔&#xff0c;很高兴这期又和大家见面了&#xff0c;一个奋斗在互联网的打工人。 在 Java 开发中&#xff0c;我们经常会面临对 List 中的对象属性去重的需求。然而&#xff0c;当需要根据多个属性来进行去重时&#xff0c;情况会稍微复杂一些。本篇…

【css】css实现水平和垂直居中

通过 justify-content 和 align-items设置水平和垂直居中&#xff0c; justify-content 设置水平方向&#xff0c;align-items设置垂直方向。 代码&#xff1a; <style> .center {display: flex;justify-content: center;align-items: center;height: 200px;border: 3px…

考研408 | 【计算机网络】 数据链路层

导图&#xff1a; 数据链路层概念&#xff1a; 结点&#xff1a;主机、路由器 链路&#xff1a;网络中两个结点之间的物理通道&#xff0c;链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。 数据链路&#xff1a;网络中两个结点之间的逻辑通道&#xff0…

【动态规划刷题 6】 删除并获得点数 粉刷房子

740. 删除并获得点数 给你一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除 所有 等于 nums[i] - 1 和 nums[i] 1 的元素。 开始你拥有 0 个点数。…

成功解决ubuntu-22.04的sudo apt-get update一直卡在【0% [Waiting for headers]】

成功解决ubuntu-22.04的sudo apt-get update一直卡在【0% [Waiting for headers]】 问题描述解决方案 问题描述 在下载安装包的时候一直卡在0% [Waiting for headers]&#xff0c;报错信息如下&#xff1a; Get:1 file:/var/cudnn-local-repo-ubuntu1804-8.5.0.96 InRelease […

go-zero 是如何做路由管理的?

原文链接&#xff1a; go-zero 是如何做路由管理的&#xff1f; go-zero 是一个微服务框架&#xff0c;包含了 web 和 rpc 两大部分。 而对于 web 框架来说&#xff0c;路由管理是必不可少的一部分&#xff0c;那么本文就来探讨一下 go-zero 的路由管理是怎么做的&#xff0c…

hbuilder的获取头像以及位置

条件编译 // #ifndef VUE3 import Vue from vue import ./uni.promisify.adaptor Vue.config.productionTip false App.mpType app // 初始化vue应用 const app new Vue({...App }) // 挂载vue应用 app.$mount() // #endif// #ifdef VUE3 import { createSSRApp } from vue…