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

news2024/12/23 3:10:49

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

    // 获取列表集合中第一个元素宽,通过宽和元素之间的间距计算出移动距离firstDiff
    const firstEl = children[0] as HTMLElement
    const 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 + spacing
            total += distance
            //设置初始运动点为0
            const 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.coloradmin.cn/o/856675.html

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

相关文章

智能照明控制系统助力某商业综合体实现“双碳”-安科瑞黄安南

摘要&#xff1a;智能照明是当前非常普及的一种照明控制方式。广泛使用于建筑物,景观&#xff0c;公共场所。本文以智能照明在商业综合体中的应用为基础&#xff0c;主要介绍了智能照明系统的功能与特点&#xff0c;系统运用的效果&#xff0c;在建筑自动化系统中的地位及优势等…

oracle积累增量和差异增量

积累增量和差异增量&#xff1a; 对于 RMAN 来说&#xff0c;积累增量备份和差异增量备份都是增量备份的一种形式&#xff0c;它们之间的区别在于备份的范围和备份集的方式。 积累增量备份&#xff1a;在进行积累增量备份时&#xff0c;RMAN 会备份自最后一次完全备份或增量备…

JVM 性能优化思路

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ 一般在系统出现问题的时候&#xff0c;我们会考虑对 JVM 进行性能优化。优化思路就是根据问题的情况&#xff0c;结合工具进行问题排查&#xff0c;针对排查出来的可能问题…

06 - Stream如何提高遍历集合效率?

前面我们讲过 List 集合类&#xff0c;那我想你一定也知道集合的顶端接口 Collection。 在 Java8 中&#xff0c;Collection 新增了两个流方法&#xff0c;分别是 Stream() 和 parallelStream()。 1、什么是 Stream&#xff1f; 现在很多大数据量系统中都存在分表分库的情况…

安防视频监控平台EasyNVR页面无法上传授权文件,该如何进行授权?

TSINGSEE青犀视频安防监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入&#xff0c;并能对接入的视频流进行处理与多端分发&#xff0c;包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等多种格式。在智慧安防等视频监控场景中&#xff0c;EasyNVR可提供视频实时监控直播、云端…

LeetCode 1289. 下降路径最小和 II:通俗易懂地讲解O(n^2) + O(1)的做法

【LetMeFly】1289.下降路径最小和 II&#xff1a;通俗易懂地讲解O(n^2) O(1)的做法 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-falling-path-sum-ii/ 给你一个 n x n 整数矩阵 arr &#xff0c;请你返回 非零偏移下降路径 数字和的最小值。 非零偏移下…

【力扣每日一题】2023.8.10 下降路径最小和Ⅱ

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个数组&#xff0c;让我们模拟从上面第一层走到下面的最后一层&#xff0c;下降路径需要加上经过的格子的值&#xff0c;每层…

vue使用ElementUI

1.安装 npm i element-ui -S 2.引入 2.1完整引入 import Vue from vue; import ElementUI from element-ui; import element-ui/lib/theme-chalk/index.css; import App from ./App.vue;Vue.use(ElementUI); 2.2按需引入 说明&#xff1a;为了输入时候有提示&#xff0c;建…

【雕爷学编程】Arduino动手做(03)---RCWL-0516微波雷达传感器模块2

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

S7-1500系列PLC读取V90伺服驱动器电流扭矩等参数的具体方法示例(2种)

S7-1500系列PLC读取V90伺服驱动器电流扭矩等参数的具体方法示例(2种) 示例1: 当V90PN配置为EPOS控制模式下的标准报文111时,报文中在接受与发送方向均包含一个可供用户自定义的保留字(PZD12)。 在这种条件下,可以通过修改参数P29151(用户自定义PZD发送字)来定义传输方…

YOLOV5改进:更换为MPDIOU,实现有效涨点

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 2.涨点效果:更换为MPDIOU,实现有效涨点! 目录…

【雕爷学编程】Arduino动手做(201)---DFRobot 行空板03

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

三种常见的平滑滤波方法

一、概述 平滑滤波&#xff0c;顾名思义就是对信号进行处理使之整体显得更加平滑&#xff0c;降低噪声影响&#xff0c;提高信号质量&#xff0c;它常见于数学信号处理和图像处理&#xff0c;一般意义上的数字信号多体现于一维数据&#xff0c;图像信号多体现于二维数据。   …

基于Java的体育网站的设计与实现(论文+源码)_kaic

基于Java的体育网站的设计与实现 摘 要&#xff1a;在网络应用的迅速发展与科技的不断进步的现代环境下&#xff0c;人们生活节奏越来越快&#xff0c;娱乐方式也多种多样&#xff0c;各种软件应用&#xff0c;各种娱乐&#xff0c;购物网站已经成为必不可少的伴随品&#xff…

Jenkins+Docker+SpringCloud微服务持续集成项目优化和微服务集群

JenkinsDockerSpringCloud微服务持续集成项目优化和微服务集群 JenkinsDockerSpringCloud部署方案优化JenkinsDockerSpringCloud集群部署流程说明修改所有微服务配置 设计Jenkins集群项目的构建参数编写多选项遍历脚本多项目提交进行代码审查多个项目打包及构建上传镜像把Eurek…

一种简单高效的IMU姿态解算方法

这里给出一种简单高效的IMU姿态解算方法&#xff0c;本方法的特点就是思路非常的简单&#xff0c;并且效果也还可以&#xff0c;地面机器人这类运动想对不那么剧烈的应用应该是能应付的&#xff0c;但是震动较大的无人机、足式机器人等应用是否能应用还有待试验。 代码如下&am…

【Leetcode】(自食用)LRU算法(哈希链表法)

step by step. 题目&#xff1a; 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键…

【深度学习注意力机制系列】—— CBAM注意力机制(附pytorch实现)

CBAM&#xff08;Convolutional Block Attention Module&#xff09;是一种用于增强卷积神经网络&#xff08;CNN&#xff09;性能的注意力机制模块。它由Sanghyun Woo等人在2018年的论文[1807.06521] CBAM: Convolutional Block Attention Module (arxiv.org)中提出。CBAM的主…

实现静态资源访问的几种方法

什么是静态资源&#xff1f; 静态资源是指在服务器端存储的不会变化的文件&#xff0c;如HTML、CSS、JavaScript、图片、音频、视频等文件。这些文件一般不包含动态内容&#xff0c;每次请求时返回的内容都是固定的。 为什么要使用静态资源&#xff1f; 提升网站性能&#xf…

gitblit-使用

1.登入GitBlit服务器 默认用户和密码: admin/admin 2.创建一个新的版本库 点击图中的“版本库”&#xff0c;然后点击图中“创建版本库” 填写名称和描述&#xff0c;注意名称最后一定要加 .git选择限制查看、克隆和推送勾选“加入README”和“加入.gitignore文件”在图中的1处…