vue3 + css 列表无限循环滚动+鼠标移入停止滚动+移出继续滚动
1.动画文件.vue
<template><div class="dashboard" @click="setFullScreen"><div class="warp-box"><el-scrollbar ref="scrollRef" height="100%" @scroll="handelScroll"><div class="animation-box" @mouseover="stopAnim" @mouseout="runAnim" v-if="arrList.length":style="{ animationDuration: animationDuration }" :class="{ stopPlay: animationStopPlay }"><div class="line-item" v-for="(item, index) in arrList" :key="index"><img class="item-bg" src="../../assets/images/dashboard/line-bg.png"/><div class="item-warp"><div class="item-number"><template v-if="index <= 2"><img :class="`icon-img img-${index}`" :src="imgArr[index]"/></template><template v-else><div class="text">{{ index }}</div></template></div><div class="item-avatar"><avatarImg :avatar="item.avatar"/></div><div class="item-nickname">{{ item.nickname }}</div><div class="item-point">{{ item.point }}</div></div></div><!-- 重复一次 实现无逢滚动 --><div class="line-item" v-for="(item, index) in arrList" :key="index"><img class="item-bg" src="../../assets/images/dashboard/line-bg.png"/><div class="item-warp"><div class="item-number"><template v-if="index <= 2"><img :class="`icon-img img-${index}`" :src="imgArr[index]"/></template><template v-else><div class="text">{{ index }}</div></template></div><div class="item-avatar"><avatarImg :avatar="item.avatar"/></div><div class="item-nickname">{{ item.nickname }}</div><div class="item-point">{{ item.point }}</div></div></div></div></el-scrollbar></div></div>
</template><script setup>
import p0 from '../../assets/images/dashboard/icon_0.png?v=1'
import p1 from '../../assets/images/dashboard/icon_1.png?v=1'
import p2 from '../../assets/images/dashboard/icon_2.png?v=1'
import avatarImg from './avatarImg.vue'
import { nextTick, onMounted, ref, onUnmounted, reactive } from 'vue';
const animationDuration = ref(null);
const animationStopPlay = ref(false);const imgArr = reactive([p0, p1, p2]);
const scrollRef = ref(null);
const isLoading = ref(false);
const arrList = ref([{nickname: '昵称昵称昵称昵称',avatar: "",point: 5000,}
]);const search = reactive({page: 1, limit: 20
});
onMounted(() => {nextTick(() => {setTimeout(() => {setFullScreen(); //设置全屏}, 3000)//加载列表loadList();})
});const handelScroll = (event) => {const wrapRef = scrollRef.value.wrapRef;let poor = wrapRef.scrollHeight - wrapRef.clientHeight;// 判断滚动到底部if (event.scrollTop + 20 >= poor) {loadList();}
}const loadList = () => {console.log('加载更多数据...')if(isLoading.value) return;isLoading.value = true;for (let i = 0; i < 30; i++) {arrList.value.push({nickname: '昵称昵称昵称昵称',avatar: "https://pic.qqans.com/up/2024-6/17183287196520597.jpg",point: 5000,})}if (arrList.value.length <= 2) {animationStopPlay.value = trueanimationDuration.value = 2 + 's'//动画持续时间} else {animationStopPlay.value = false// 跑马灯动画animationDuration.value = arrList.value.length * 2 + 's'}isLoading.value = false;
}
//设置全屏
const setFullScreen = () => {const elem = document.getElementById('app');if (elem.requestFullscreen) {elem.requestFullscreen();} else if (elem.mozRequestFullScreen) { /* Firefox */elem.mozRequestFullScreen();} else if (elem.webkitRequestFullscreen) { /* Chrome, Safari & Opera */elem.webkitRequestFullscreen();} else if (elem.msRequestFullscreen) { /* IE/Edge */elem.msRequestFullscreen();}
}//鼠标移入暂停动画
const stopAnim = () => {animationStopPlay.value = true
}
//鼠标移除继续动画
const runAnim = () => {if (arrList.value.length > 2) {animationStopPlay.value = false}
}
</script><style lang="scss" scoped>
.dashboard {display: flex;justify-content: center;align-items: center;height: 100%;background-image: url("../../assets/images/dashboard/bg-2.png");background-size: cover;
}
.warp-box {width: 46%; height: 65%;margin: 9.5% 0 0 36.5%;padding: 10px 0 10px 10px;
}
.line-item{width:100%; position: relative; cursor: pointer;font-family: XiangCuiDaZiJi35;.item-bg{width: 100%; height: auto; display: block;}.item-warp{width: 100%; height:100%; box-sizing: border-box; position: absolute; top: 0; left: 0;display: flex; justify-content: flex-start; align-items: center;}
}
.item-number{text-align: center; width: 16%; height:100%;color: #96795c;.icon-img{margin: 16% 0 0 28%;width: 60px; height: auto; display: block;}.text{font-size: 36px;margin: 22% 0 0 0;}
}
.item-avatar{margin-left: 3%; width: 13%; height:80%;
}
.item-nickname{width: 44%;font-size: 40px; color: #b99871;
}
.item-point{width: 22%;font-size: 28px; color: #ffffff; text-align: center;
}.animation-box{animation-name: carousel;animation-timing-function: linear;animation-iteration-count: infinite;animation-delay: 0s;animation-direction: normal;&.stopPlay{animation-play-state: paused;}
}
@keyframes carousel {0% {transform: translateY(0%)}100% {transform: translateY(-50%)}
}
</style>
2.组件avatarImg.vue(内容显示)与动画无关
<template><div class="image-box"><img class="avatar-img" :src="!avatar ? avatarBg : avatar"/><img class="avatar-border" src="../../assets/images/dashboard/avatar-border.png"/></div>
</template><script setup>
import avatarBg from '../../assets/images/dashboard/avatar-bg.png?v=1'
import { defineProps } from 'vue';
defineProps({avatar: {typeof: String,default: () => {return avatarBg;}}
})
</script><style lang="scss" scoped>
.image-box{position: relative;.avatar-img{width: 80px; height: 80px; display: block;transform: rotate(-3deg);position: absolute; top: 4px; left: 3px;}.avatar-border{width: 90px; height: 90px; display: block;position: absolute; top: 0; left: 0;}
}
</style>相关文章:
vue3 + css 列表无限循环滚动+鼠标移入停止滚动+移出继续滚动
1.动画文件.vue <template><div class"dashboard" click"setFullScreen"><div class"warp-box"><el-scrollbar ref"scrollRef" height"100%" scroll"handelScroll"><div class"…...
使用 CryptoJS 实现 AES 解密:动态数据解密示例
在现代加密应用中,AES(高级加密标准)是一种广泛使用的对称加密算法。它的安全性高、效率好,适合用于各种加密任务。今天,我们将通过一个实际的示例,展示如何使用 CryptoJS 实现 AES 解密,解密动态数据。CryptoJS 是一个基于 JavaScript 的加密库,它支持 AES、DES 等多种…...
Go语言对于MySQL的基本操作
一.下载依赖 终端中输入: go get -u github.com/go-sql-driver/mysql 导入包 import ("database/sql"_ "github.com/go-sql-driver/mysql" ) 二.案例 package main//go get-u github.com/go-sql-driver/mysql 获取驱动 import ("databa…...
AndroidStudio下载安装,环境部署以及常见问题解决教程(亲测)
AndroidStudio下载安装,环境部署以及常见问题解决!!! 文章目录 前言 一、Android Studio 下载与安装 1.1 系统要求 1.2 下载 Android Studio 1.3 安装 Android Studio Windows 系统 1.4 初始配置 二、环境部署 2.1 安装 …...
开源免费一句话生成儿童故事视频核心思想解析
再看一个演示视频,学会核心思想后,可以打造自己的内容生成工具,后文有基于飞书多维表格的实现效果: 一句话灵感生成儿童故事视频演示 这是一款专门为内容素材创作打造的创新工具,可根据用户输入的主题,快速…...
数据结构——最短路(BFS,Dijkstra,Floyd)
完整版可以看我的最短路问题模版总结_稠密图最短路-CSDN博客 考研数据结构只考BFS,Dijkstra和Floyd 下面代码以Acwing模板题为例 BFS代码 适用类型: 1.单源最短路径 2.无权图 3.不适用于带权图和负权回路图 //Acwing走迷宫bfs #include<bits/stdc.h>usi…...
Kali Linux汉化教程:轻松设置中文界面
1.打开终端 2.输入sudo dpkg-reconfigure locales,回车,输入密码,回车 sudo dpkg-reconfigure locales 3.往下滑,滑到底,找到‘zh_CN.UTF-8 UTF-8’,回车 4.选择‘zh_CN.UTF-8’,回车 5.没有 ‘zh_CN.UTF-8’选项的特…...
分布式锁: 并发时,redis如何避免删别人的锁
在使用Redis实现分布式锁的时候,如何避免在并发情况下误删别人的锁。首先,分布式锁的基本概念:是多个客户端在访问共享资源时,通过某种机制来确保同一时间只有一个客户端能持有锁。 Redis通常用SET命令加上NX选项来创建锁…...
Leetcode 160 Intersection of Two Linked Lists
题意 给定两个链表,找这两个链表第一个公共节点,如果没有返回nullptr 题目链接 https://leetcode.com/problems/intersection-of-two-linked-lists/description/ 题解 两个指针分别从两个链表(记录为表A,表B)的表…...
【八股文】从浏览器输入一个url到服务器的流程
1.url解析与DNS解析 浏览器解析用户输入的URL,提取协议(HTTP\HTTPS)、域名、端口及路径等信息 浏览器首先检查本地DNS缓存和系统DNS缓存,若未命中,查询本地hosts文件 最后递归查询向本地DNS服务器发起请求ÿ…...
C++和标准库速成(八)——指针、动态数组、const、constexpr和consteval
目录 1. 指针和动态数组1.1 栈和自由存储区1.2 使用指针1.3 动态分配的数组1.4 空指针常量 2. const2.1 const修饰类型2.2 const与指针2.3 使用const保护参数2.4 const方法(建议) 3. constexpr4. consteval参考 1. 指针和动态数组 动态内存允许所创建的程序具有在编…...
超声重建,3D重建 超声三维重建,三维可视化平台 UR 3D Reconstruction
1. 超声波3D重建技术的实现方法与算法 技术概述 3D超声重建是一种基于2D超声图像生成3D体积数据的技术,广泛应用于医学影像领域。通过重建和可视化三维结构,3D超声能够显著提高诊断精度和效率,同时减少医生的脑力负担。本技术文档将详细阐述…...
[HelloCTF]PHPinclude-labs超详细WP-Level 6Level 7Level 8Level 9-php://协议
由于Level 6-9 关的原理都是通用的, 这里就拿第6关举例, 其他的关卡同理 源码分析 定位到代码 isset($_GET[wrappers]) ? include("php://".$_GET[wrappers]) : ; 与前几关发生变化的就是 php:// 解题分析 这一关要求我们使用 php协议 php:// 协议 php://filte…...
【Linux】Bash是什么?怎么使用?
李升伟 整理 什么是 Bash? Bash(Bourne Again Shell)是一种 命令行解释器(Shell),广泛用于 Unix 和 Linux 操作系统。它是 Bourne Shell(sh) 的增强版,提供了更多的功能…...
cmake结合qt开发界面程序实例
在使用 CMake 构建 Qt 界面应用程序时,你需要设置 CMakeLists.txt 文件来指定项目配置、源文件、库依赖等。以下是一个简单的示例,展示了如何创建一个包含 Qt 界面(使用 QWidget)的 Qt 项目,并使用 CMake 进行构建。 …...
vue3二次封装tooltip实现el-table中的show-overflow-tooltip效果
开发过程中遇到需要根据后端返回的数据长度来判断是否需要使用el-tooltip的情况,想到el-table里面就有这种交互效果,如果不论文字是否超出容器长度都展示tooltip的话,交互效果难免会差很多,所以二次封装了这个组件: 给…...
如何创建并保存HTML文件?零基础入门教程
原文:如何创建并保存HTML文件?零基础入门教程 | w3cschool笔记 本文将以Windows系统为例,教你用最简单的记事本创建并保存第一个HTML网页。 📝 第一步:准备工具 文本编辑器:使用系统自带的记事本ÿ…...
React19源码系列之FiberRoot节点和Fiber节点
在上一篇文章,看了createRoot函数的大致流程。 createContainer函数创建并返回了FiberRoot 。FiberRoot是由createFiberRoot函数创建, createFiberRoot函数还将 FiberRoot和 根Fiber 通过current属性建立起了联系。将FiberRoot作为参数传给 ReactDOMRoo…...
每天看一篇漏洞报告
前言: 内容来源于乌云漏洞 今日思考xss漏洞, 今天看到一篇文章,里面详细说了xss的绕过技巧,虽然时间久了,没有去尝试,待会有时间去测试一下 以下是整理后的文章,原文在下面 文章链接&#…...
采用贝塞尔函数,进行恒定束宽波束形成算法
matlab采用贝塞尔函数,进行恒定束宽波束形成算法 beselle.m , 1452 20191225160928.png , 43700 20191225160935.png , 45238 20191225161010.png , 76862...
TCP协议的多线程应用、多线程下的网络编程
DAY13.2 Java核心基础 多线程下的网络编程 基于单点连接的方式,一个服务端对应一个客户端,实际运行环境中是一个服务端需要对应多个客户端 创建ServerSocketNable类,多线程接收socket对象 public class ServerSocketNable implements Run…...
华为中小型企业项目案例
实验目的(1) 熟悉华为交换机和路由器的应用场景 (2) 掌握华为交换机和路由器的配置方法 实验拓扑实验拓扑如图所示。 华为中小型企业项目案例拓扑图 实验配置市场部和技术部的配置创建VLANLSW1的配置 [LSW1]vlan batch 10 20 [LSW1]q…...
LabVIEW VI Scripting随机数波形图自动生成
通过LabVIEW VI Scripting 技术,实现从零开始编程化创建并运行一个随机数波形监测VI。核心功能包括自动化生成VI框架、添加控件与函数、配置数据流逻辑及界面布局优化,适用于批量生成测试工具、教学模板开发或复杂系统的模块化构建。通过脚本化操作&…...
MATLAB 控制系统设计与仿真 - 26
状态空间控制系统概述 状态空间描述 现代控制理论是建立在状态空间基础上的控制系统分析和设计理论,它用状态变量来刻画系统的内部特征,用‘一节微分方程组’来描述系统的动态特性。系统的状态空间模型描述了系统输入/输出与内部状态之间的关系&#x…...
Python----计算机视觉处理(Opencv:图像镜像旋转)
一、图像镜像旋转 图像的旋转是围绕一个特定点进行的,而图像的镜像旋转则是围绕坐标轴进行的。图像镜像旋转,也可 以叫做图像翻转,分为水平翻转、垂直翻转、水平垂直翻转三种。 通俗的理解为,当以图片的中垂线为x轴和y轴时&#x…...
C++从入门到入土(八)——多态的原理
目录 前言 多态的原理 动态绑定与静态绑定 虚函数表 小结 前言 在前面的文章中,我们介绍了C三大特性之一的多态,我们主要介绍了多态的构成条件,但是对于多态的原理我们探讨的是不够深入的,下面这这一篇文章,我们将…...
国产编辑器EverEdit - 语法着色文件的语法
1 语法着色定义(官方文档) 1.1 概述 EverEdit有着优异的语法着色引擎,可以高亮现存的绝大多数的编程语言。在EverEdit的语法着色中有Region和Item两个概念,Region表示着不同的区块。而Item则代表着这些区块中不同的部分。一般情况下,Region…...
vue3当中使用Pinia的store的组件化开发模式
一、安装与初始化 安装Pinia npm install pinia # 或 yarn add pinia目的:引入Pinia核心库,为状态管理提供基础支持。 挂载Pinia实例 在main.js中初始化并注入Vue应用: import { createApp } from vue import { createPinia } from pinia i…...
PyCharm安装redis,python安装redis,PyCharm使用失败问题
报错信息 Usage: D:\wb2\wbrj_pys\venv\Scripts\python.exe -m pip install [options] [package-index-options] … D:\wb2\wbrj_pys\venv\Scripts\python.exe -m pip install [options] -r [package-index-options] … D:\wb2\wbrj_pys\venv\Scripts\python.exe -m pip instal…...
保姆级离线TiDB V8+解释
以前学习的时候还是3版本,如今已经是8版本了 https://cn.pingcap.com/product-community/?_gl1ujh2l9_gcl_auMTI3MTI3NTM3NC4xNzM5MjU3ODE2_gaMTYwNzE2NTI4OC4xNzMzOTA1MjUz_ga_3JVXJ41175MTc0MTk1NTc1OC4xMS4xLjE3NDE5NTU3NjIuNTYuMC41NDk4MTMxNTM._ga_CPG2VW1Y4…...
