当前位置: 首页 > news >正文

vue3卡片垂直无限滚动

主要是利用css动画向上滚动,js动态计算dom上有多少条数据实时更新滚动速度

dom 

        <div class="temp_info"><div class="scroll-wrapper"><div class="scroll-content"><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来1小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div><div class="warnItem"><span class="textcol"><span class="quan" /> 预警未来2小时,降雨量达到3mm</span><span class="timecol">12:00</span></div></div></div></div>

js 要在onMounted里调用确保dom已经被渲染

onMounted(()=>{// 计算滚动速度的函数const calculateScrollSpeed = () => {const scrollContent = document.querySelector('.scroll-content')const tempInfo = document.querySelector('.temp_info')if (scrollContent && tempInfo) {// 获取所有预警项目const warnItems = scrollContent.querySelectorAll('.warnItem')const itemCount = warnItems.length// 计算实际需要滚动的行数(考虑重复内容)const visibleHeight = tempInfo.clientHeightconst itemHeight = 30 // 每个项目的高度const visibleItems = Math.ceil(visibleHeight / itemHeight)const actualScrollItems = itemCount - visibleItems// 计算滚动时间:每个项目1.5秒,确保匀速且不会太快const scrollDuration = Math.max(actualScrollItems * 1.5, 10) // 最少10秒// 设置CSS变量scrollContent.style.setProperty('--scroll-duration', `${scrollDuration}s`)console.log('预警项目数量:', itemCount, '可见项目:', visibleItems, '滚动时间:', scrollDuration + 's')}}// 动态计算滚动速度,确保匀速滚动setTimeout(calculateScrollSpeed, 1000)// 监听窗口大小变化,重新计算滚动速度window.addEventListener('resize', calculateScrollSpeed)
})

css 

    .temp_info {box-sizing: border-box;width: 100%;height: 60px;background: rgba(1, 60, 93, 0.36);border-radius: 3px;border: 1px solid #1a3f58;padding-left: 15px;padding-right: 10px;overflow: hidden;position: relative;// 添加渐变遮罩&::before {content: '';position: absolute;top: 0;left: 0;right: 0;height: 100%;background: linear-gradient(to bottom, rgba(1, 60, 93, 0.8) 0%, transparent 15%, transparent 85%, rgba(1, 60, 93, 0.8) 100%);pointer-events: none;z-index: 2;}.scroll-wrapper {height: 100%;overflow: hidden;}.scroll-content {// 使用CSS变量控制滚动速度,默认20秒animation: scrollUp var(--scroll-duration, 20s) linear infinite;will-change: transform;position: relative;z-index: 1;&:hover {animation-play-state: paused;}}.warnItem {display: flex;justify-content: space-between;line-height: 30px;.textcol {font-weight: 400;font-size: 14px;color: #7dbaed;}.quan {display: inline-block;width: 7px;height: 7px;background: rgba(34, 186, 255, 0.36);border-radius: 50%;border: 1px solid #22baff;margin-right: 6px;}.timecol {font-weight: 400;font-size: 14px;color: #a3e5ff;}}}@keyframes scrollUp {0% {transform: translateY(0);}100% {transform: translateY(-50%);}}// 确保动画能够正常工作.scroll-content {will-change: transform;}

http://www.dtcms.com/a/302004.html

相关文章:

  • Android 中 TCP 协议的实战运用
  • 【JAVA安全-Fastjson系列】Fastjson 1.2.24 反序列化漏洞分析及测试环境构建【复习回顾】
  • 安宝特案例丨户外通信机房施工革新:AR+作业流技术破解行业难题
  • 安宝特案例丨AR+AI赋能轨道交通制造:破解人工装配难题的创新实践
  • AR技术赋能工业设备维护:效率与智能的飞跃
  • keeplived实例
  • 基于Verilog的神经网络加速器设计
  • 微信小程序点击输入框时,顶部导航栏被遮挡问题如何解决?
  • 数值计算 | 图解基于龙格库塔法的微分方程计算与连续系统离散化(附Python实现)
  • 软件测试开发转型经验分享与职业发展指南
  • 基于FPGA和DDS原理的任意波形发生器(含仿真)
  • 可配置的PWM外设模块
  • Java Collections工具类
  • RocketMQ入门实战详解
  • 【MySQL学习|黑马笔记|Day1】数据库概述,SQL|通用语法、SQL分类、DDL
  • 【数据标注】详解使用 Labelimg 进行数据标注的 Conda 环境搭建与操作流程
  • 【unitrix】 6.20 非零整数特质(non_zero.rs)
  • 做了一款小而美的本地校验器
  • 【保姆级喂饭教程】Python依赖管理工具大全:Virtualenv、venv、Pipenv、Poetry、pdm、Rye、UV、Conda、Pixi等
  • 【el-table滚动事件】el-table表格滚动时,获取可视窗口内的行数据
  • 电磁兼容五:仿真技术
  • 数智驱动的「库存管理」:从风险系数、ABC分类到OMS和ERP系统的协同优化策略
  • 前端静态资源优化
  • WD5030A芯片24降12V,15A以内,应用于路由器、交换机和网络服务器,成本低大电流
  • 枚举策略模式实战:优雅消除支付场景的if-else
  • 6种将iPhone照片传输到Windows 10电脑的方法
  • Vue 正在热映模块
  • 安宝特案例丨AR+AI+SOP?3大技术融合革新军工航天领域
  • 组件化(一):重新思考“组件”:状态、视图和逻辑的“最佳”分离实践
  • 中兴云电脑W101D2-晶晨S905L3A-2G+8G-安卓9-线刷固件包