0

0

如何实现响应式垂直跑马灯(80vh 高度)并避免文本重叠

霞舞

霞舞

发布时间:2026-01-03 17:44:02

|

521人浏览过

|

来源于php中文网

原创

如何实现响应式垂直跑马灯(80vh 高度)并避免文本重叠

本文详解如何在父容器高度为 `80vh` 的响应式场景下,构建一个平滑、无重叠、无限循环的垂直滚动 marquee,核心是动态计算列表总高度并修正动画重置逻辑,确保滚动顺序始终正确。

在实现垂直滚动跑马灯(vertical marquee)时,若父容器(如 .cycle__list)采用固定高度(如 500px),传统基于 top 像素偏移的 jQuery 动画通常能稳定运行。但一旦切换为响应式单位(如 80vh),问题便随之而来:当列表项(<li>)总高度远超可视区域(例如 30 条 × 100px = 3000px),而容器却被强制截断为 80vh ≈ 720px,动画重置逻辑 top = $('.js-cycle-list').height() 就会失效——它返回的是 720px,而非实际内容总高,导致新条目“提前入场”,与尚未移出视口的旧条目重叠,破坏滚动连贯性。

根本原因在于:
$('.js-cycle-list').height() 在 CSS 中设为 80vh 时,返回的是容器自身高度,而非所有 <li> 的累计高度。而动画重置需将元素瞬间“传送”到所有内容末尾之后的位置,才能实现无缝衔接。

解决方案:用 JavaScript 动态计算真实内容高度,并覆盖容器高度

以下为优化后的完整实现(含关键注释):

PathFinder
PathFinder

AI驱动的销售漏斗分析工具

下载
$(document).ready(function() {
    // 1. 计算所有 li 元素的总高度(注意:需确保 DOM 已渲染完成)
    let totalLiHeight = 0;
    $(".js-cycle-list > li").each(function() {
        totalLiHeight += $(this).outerHeight(true); // 使用 outerHeight(true) 包含 margin
    });

    // 2. 动态设置 ul 容器高度为内容总高(关键!)
    // 减去约 200px 是为预留首尾缓冲区,避免最后一项刚出现就立即重置
    // 可根据实际 li 高度和动画步长微调(本例中每步 -100px,故预留 2×100px)
    $('.js-cycle-list').css("height", totalLiHeight - 200);

    // 3. 初始化各 li 的起始 top 值(保持原有逻辑)
    let i = 0;
    $(".js-cycle-list > li").each(function() {
        $(this).css("top", i);
        i += 100;
        window.verticalScroller($(this));
    });
});

// 4. 改进的滚动递归函数
window.verticalScroller = function($elem) {
    const currentTop = parseInt($elem.css("top"));
    const singleItemHeight = $('.js-cycle-list > li').first().outerHeight(true);
    const resetPosition = $('.js-cycle-list').height(); // 此时 height 已为动态计算值!

    // 当元素上边缘移出可视区底部(即 top < -singleItemHeight),重置到最底部
    if (currentTop < -singleItemHeight) {
        $elem.css("top", resetPosition);
    }

    // 每次动画向下移动 100px,耗时 600ms,线性缓动
    $elem.animate({ 
        top: currentTop - 100 
    }, 600, 'linear', function() {
        window.verticalScroller($(this));
    });
};

? 配套 CSS 调整要点:

  • 移除 .cycle-text 的 height: 80vh,改用 display: table + width: 100% 保证弹性布局
  • 保留 .cycle__list 的 height: 80vh 仅作视觉容器约束(配合 overflow: hidden),但 JS 会动态覆盖其 height 属性以支撑动画逻辑;
  • 确保 li 使用 position: absolute 且 height 固定(或通过 outerHeight(true) 统一获取),便于精确计算。

⚠️ 注意事项:

  • 若 li 内容动态加载或字体加载延迟,需在 $(document).ready() 后增加 $(window).on('load', ...) 或使用 MutationObserver 确保高度计算准确;
  • 响应式场景下,建议监听 resize 事件,在窗口尺寸显著变化时重新执行高度计算与初始化(可加防抖);
  • 现代项目推荐使用 CSS @keyframes + animation 替代 jQuery animate() 以提升性能,但需配合 will-change: transform 和 transform: translateY() 实现更流畅的硬件加速滚动。

通过将容器高度从静态 80vh 切换为动态内容总高,我们让动画重置点真正落在“内容流末端”,彻底解决了因高度失配导致的文本重叠与顺序错乱问题,同时完全兼容 80vh 的响应式设计需求。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

156

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

337

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

406

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

515

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

312

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

128

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

183

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

51

2026.01.13

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 42.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号