vue2实现列表数据字幕式循环滚动

embedded/2024/10/21 7:11:30/

一、功能点:

        实现列表“字幕式”滚动效果;

        字幕循环滚动,滚完数据之后会继续从头开始滚动

        实现鼠标移入,字幕停止滚动;鼠标移出,字幕继续滚动;

        实现滚轮在指定区域内滚动,能够控制控制字幕上下滚动

二、代码:

<template><div class="subtitle-container"ref="container"@mouseenter="stopScrolling"@mouseleave="startScrollingOnLeave"@wheel="handleScroll"><ul class="subtitle-list":style="{ transform: `translateY(-${currentScrollTop}px)` }"><li v-for="(subtitle, index) in subtitles":key="index"class="subtitle">{{ subtitle }}</li></ul></div>
</template><script>
export default {data () {return {subtitles: ['在岁月的流逝中,花开花落,却留下了永恒的思念。', '晨曦之光,穿透黑夜的深邃,唤醒沉睡的希望。', '微风轻拂,草木低语,岁月静好,心安如初。', '星空如梦,岁月如歌,心中的孤舟在悠远的彼岸徘徊。', '晨曦之光,穿透黑夜的深邃,唤醒沉睡的希望。', '微风轻拂,草木低语,岁月静好,心安如初。', '情深意浓,宛如一汪清泉,润泽心灵的枯渴。', '山水之间,一念之差,心的旅程,或是波澜壮阔,或是静谧悠长。', '浮生若梦,红尘漫漫,唯有心中的那一抹云彩,永不散去。', '星光璀璨,照亮前行的路途,让希望之花绽放在黑暗中。', '海浪拍岸,千年的沧桑,铭刻着岁月的印记,留下无尽的思绪。', '暮色渐浓,烛光摇曳,思念的火焰在心中燃烧,驱散寂寞的阴霾。'], // 假设这里是你的字幕数据scrollSpeed: 50, // 滚动速度,单位为毫秒scrollInterval: null, // 滚动间隔的引用containerHeight: 0, // 容器高度subtitleHeight: 0, // 单个字幕的高度currentScrollTop: 0, // 当前滚动的位置isHovering: false // 标记鼠标是否悬停在容器上};},mounted () {this.containerHeight = this.$refs.container.offsetHeight;this.subtitleHeight = this.$refs.container.querySelector('.subtitle').offsetHeight;this.startScrolling();},methods: {startScrolling () {if (!this.isHovering) {this.scrollInterval = setInterval(() => {this.currentScrollTop += 1;if (this.currentScrollTop >= this.subtitleHeight) {this.currentScrollTop = 0;this.subtitles.push(this.subtitles.shift());}}, this.scrollSpeed);}},stopScrolling () {clearInterval(this.scrollInterval);this.isHovering = true;},startScrollingOnLeave () {if (this.isHovering) {this.isHovering = false;this.startScrolling();}},handleScroll (event) {this.currentScrollTop += event.deltaY;if (this.currentScrollTop < 0) {this.currentScrollTop = 0;} else if (this.currentScrollTop > (this.subtitles.length * this.subtitleHeight - this.containerHeight)) {this.currentScrollTop = this.subtitles.length * this.subtitleHeight - this.containerHeight;}}},beforeDestroy () {clearInterval(this.scrollInterval); // 在组件销毁前清除滚动间隔}
};
</script><style>
.subtitle-container {text-align: center;margin: 0 auto;margin-top: 30px;overflow: hidden;
}.subtitle-list {padding: 0;margin: 0;list-style-type: none;
}.subtitle {line-height: 30px; /* 调整为适当的行高 */
}
</style>


http://www.ppmy.cn/embedded/16282.html

相关文章

在若依ruoyi-vue中集成watermark实现页面添加水印

本文相关视频&#xff1a;https://www.bilibili.com/video/BV1Fi4y1q74p?p47&vd_source2894aa0e46c09ba98269f266128b6c6e 在若依Ruoyi-Vue中集成Watermark实现页面添加水印 摘要 本文将介绍如何在若依Ruoyi-Vue中集成Watermark实现页面添加水印&#xff0c;以保护页面…

datax与多种数据库间数据类型映射

文章目录 前言一、背景二、映射HiveHBaseMongoDBOraclePostgreSQLSqlServerMysqlODPSOSS 总结 前言 datax内置的enumType数据类型与不同数据库间都有些差异&#xff0c;本文整理出相应的映射关系&#xff0c;在配置自定义json时可以参考做一些类型转换 一、背景 DataX 是阿里…

golang 流程控制

流程控制 一 if条件语句 1 if单分支 if条件表达式{ //条件表达式不建议写括号 if后一定要有空格与条件表达式分开 逻辑代码 /大括号一定要写不能省略 } 例如 var age int fmt.Println("请输入学生1年龄:") fmt.Scanln(&age) fmt.Println(&quo…

前端科举八股文-CSS篇

前端科举面经-CSS篇 Css选择器的优先级css盒模型行内元素和块级元素的区别?link标签和import标签的区别讲一下弹性盒子布局的常见属性flex是哪三个属性的简写什么是BFC&#xff1f; 有什么作用垂直居中的方法?visibilityhidden, opacity0&#xff0c;display:none的区别清除浮…

按照模板导出复杂样式的excel

导出excel通常使用的是apache poi,但是poi的api相当复杂&#xff0c;所以当导出的excel样式比较复杂时&#xff0c;写起来就比较头疼了&#xff0c;这里推荐使用easypoi, 可以很方便的根据模板来导出复杂excel 文档地址: 1.1 介绍 - Powered by MinDoc 我们要实现如图所示效果…

模块化 手写实现webpack

模块化 common.js 的导入导出方法&#xff1a; require \ export 和 module.exports export 和 module.export nodejs 内存1.4G -> 2.8G cjs ESModule 主要区别&#xff1a; require属于动态类型&#xff1a;加载执行 同步 esmodul是静态类型&#xff1a;引入时并不会真的去…

详解Qt中的鼠标事件

在Qt中&#xff0c;处理鼠标事件是构建交互式界面的关键。Qt提供了一系列与鼠标相关的事件处理函数&#xff0c;允许开发者捕获鼠标的各种动作&#xff0c;如按下、释放、移动、双击等。以下是鼠标事件的使用方法、技巧以及注意事项&#xff0c;并附带C代码示例。 基础使用方法…

揭秘神器:智能私信破局获客难!

在数字营销的海洋中&#xff0c;每个企业都如同一艘努力航行的船&#xff0c;希望能在广阔的客户蓝海中获得丰收。然而&#xff0c;现实却往往充满挑战&#xff0c;尤其是当面对如何吸引并维系客户这一核心难题时。传统的获客手段逐渐显得力不从心&#xff0c;而智能科技的介入…