基于滚动进度的文本渐变填充动画实现教程

基于滚动进度的文本渐变填充动画实现教程

本文将详细介绍如何利用JavaScript的滚动事件,结合CSS样式,实现一种独特的文本填充动画效果。该效果能使文本颜色随着用户页面滚动进度的增加而从左到右逐渐填充,并在反向滚动时实现相应的“取消填充”,为网页增添动态且引人入胜的交互体验。

核心概念:滚动驱动的文本高亮

实现这种效果的核心思想是将页面的滚动位置映射为一个0到1之间的百分比,然后根据这个百分比动态地改变文本中每个单词的样式。当用户向下滚动时,这个百分比逐渐增大,更多的单词被标记为“高亮”状态;当用户向上滚动时,百分比减小,高亮的单词数量也随之减少,从而实现“取消填充”的效果。这种方法使得文本的视觉变化与用户的浏览行为紧密关联。

HTML 结构准备

首先,我们需要一个基本的HTML页面结构,包含一个用于显示动态文本的容器。为了让文本在滚动时保持可见,我们通常会将其定位为固定(position: fixed)。

      滚动进度文本填充动画      

在上述结构中,我们创建了一个元素,并赋予它text类,这将是我们动态插入和高亮文本的容器。

CSS 样式定义

为了确保页面可以滚动,我们需要给body设置足够的高度。同时,定义文本容器的固定位置和高亮文本的样式。

body {  /* 为页面提供足够的滚动空间,以便观察效果 */  height: 5000px;   margin: 0;  font-family: Arial, sans-serif;  line-height: 1.6;}.text {  /* 将文本固定在视口顶部,使其始终可见 */  position: fixed;  top: 10px;  left: 20px; /* 增加一些左边距 */  max-width: 80%; /* 限制文本宽度 */  color: #ccc; /* 默认文本颜色 */}.text span {  /* 确保每个单词都是独立的元素,以便单独高亮 */  display: inline-block;  margin-right: 4px; /* 单词间距 */  transition: color 0.1s ease-out; /* 添加颜色过渡效果,使高亮更平滑 */}.highlight {  /* 高亮文本的颜色 */  color: #f00; /* 醒目的红色 */}

这里,我们为body设置了5000px的高度,以模拟一个可滚动的长页面。.text类被设置为position: fixed,确保文本始终停留在视口内。.highlight类定义了高亮文本的颜色,而.text span则确保每个单词能独立应用样式,并添加了简单的过渡效果以提升视觉流畅性。

JavaScript 逻辑实现

JavaScript是实现动态效果的关键。它负责:

获取页面的滚动百分比。将原始文本分割成单词,并包装成独立的元素。监听scroll事件,根据滚动百分比动态地为单词应用或移除高亮样式。

1. 获取滚动百分比

我们需要一个辅助函数来计算当前页面的滚动进度,将其表示为0到1之间的小数。

/** * 计算页面滚动百分比 * @returns {number} 0到1之间的小数,表示滚动进度 */function getScrollFraction() {    var h = document.documentElement,         b = document.body,        st = 'scrollTop',        sh = 'scrollHeight';    // (当前滚动距离) / (可滚动总距离)    return (h[st] || b[st]) / ((h[sh] || b[sh]) - h.clientHeight);}

这个函数通过计算当前滚动距离与总可滚动距离的比值来得出滚动百分比。h[st] || b[st]用于兼容不同浏览器获取滚动距离的方式,h.clientHeight表示视口高度。

爱图表 爱图表

AI驱动的智能化图表创作平台

爱图表 305 查看详情 爱图表

2. 初始化文本与监听滚动事件

接下来,我们将原始文本分割,包装成元素,并设置滚动事件监听器。

const HIGHLIGHT_CLASS = 'highlight'; // 定义高亮CSS类名const LOREM_TEXT = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer suscipit libero eu ligula molestie, sed faucibus leo iaculis. Quisque scelerisque ligula in volutpat venenatis. Fusce velit felis, pretium eu varius quis, facilisis eget nunc. Quisque eu eros tellus. Cras condimentum efficitur turpis, ac laoreet velit rhoncus et. Maecenas non lorem auctor dolor auctor gravida ut at diam. Proin eleifend elementum lacus in varius. In dapibus mi ut erat gravida, non dictum nisi luctus. Aliquam imperdiet commodo ante, posuere vestibulum eros mattis vitae. Cras molestie commodo turpis, vitae tempus magna dictum pharetra. Duis quis eros at magna sodales mollis. Fusce sollicitudin purus sit amet est ullamcorper luctus. Donec molestie, nisi quis luctus malesuada, lectus arcu rutrum turpis, ac bibendum libero tellus at metus. Vivamus mattis ultricies metus eu dignissim. Mauris sed consectetur nisl.";let words = LOREM_TEXT.split(" "); // 将文本按空格分割成单词数组let textContainer = document.querySelector('.text'); // 获取文本容器DOM元素// 初始渲染:将每个单词包装在中并插入到容器textContainer.innerHTML = words  .map(w => `${w}`)  .join(' ');// 监听窗口滚动事件window.addEventListener('scroll', () => {  let scrollFraction = getScrollFraction(); // 获取当前滚动百分比  // 根据滚动百分比计算需要高亮的单词数量  let wordsToHighlightCount = Math.floor(scrollFraction * words.length);  // 重新渲染文本容器的HTML,动态应用高亮类  textContainer.innerHTML = words  .map((word, index) =>     `<span ${index ${word}`  )  .join(' ');});// 首次加载时也执行一次更新,确保初始状态正确window.dispatchEvent(new Event('scroll'));

代码解析:

LOREM_TEXT 存储了我们要进行动画的文本内容。words = LOREM_TEXT.split(” “); 将文本分割成单词数组。textContainer.innerHTML = … 首次渲染时,将每个单词包裹在标签中,并插入到.text容器。window.addEventListener(‘scroll’, …) 是核心逻辑所在。每次滚动时:getScrollFraction() 获取当前的滚动百分比。wordsToHighlightCount 根据滚动百分比和总单词数,计算出应该高亮的单词数量。再次使用map函数遍历words数组,根据index与wordsToHighlightCount的比较,决定是否为当前单词的元素添加highlight类。最后,通过更新textContainer.innerHTML来刷新显示。

注意事项与优化

性能考量:innerHTML 的频繁更新在每次滚动事件中都更新innerHTML会重新解析和渲染整个文本容器的内容,这在文本量非常大或滚动事件触发非常频繁时,可能会导致性能问题,尤其是在低性能设备上。

优化建议: 避免频繁的innerHTML更新。更优的做法是获取所有单词的元素引用,然后只修改它们的classList属性。例如:

// 优化后的滚动事件处理函数(示例)const wordSpans = textContainer.querySelectorAll('span'); // 获取所有单词的span元素window.addEventListener('scroll', () => {  let scrollFraction = getScrollFraction();  let wordsToHighlightCount = Math.floor(scrollFraction * words.length);  wordSpans.forEach((span, index) => {    if (index < wordsToHighlightCount) {      span.classList.add(HIGHLIGHT_CLASS);    } else {      span.classList.remove(HIGHLIGHT_CLASS);    }  });});

这种方式只修改DOM元素的类,而不重新构建整个HTML结构,效率更高。

滚动事件的防抖(Debounce)或节流(Throttle)滚动事件是高频事件,短时间内会触发多次。为了避免过多的计算和DOM操作,可以考虑使用防抖或节流技术。

防抖(Debounce): 在事件停止触发一段时间后才执行回调函数。适用于只需要在用户停止滚动后才更新的场景。节流(Throttle): 在一定时间间隔内只执行一次回调函数。适用于需要持续更新但又不想过于频繁的场景。对于此处的文本高亮效果,节流可能更适合,因为它允许在滚动过程中持续更新,但限制了更新频率。

文本长度与滚动高度的匹配文本高亮的“速度”取决于body的高度和文本的单词数量。如果body高度很小但文本很长,高亮会非常迅速。反之,如果body很高但文本很短,高亮会很慢。开发者应根据实际需求调整body高度以获得最佳的用户体验。

自定义高亮效果除了简单的颜色填充,你可以通过修改.highlight CSS类来实现更丰富的效果,例如:

背景色填充 (background-color)字体加粗 (font-weight: bold)字体大小变化 (font-size)文本阴影 (text-shadow)渐变背景(background-image: linear-gradient(…))

总结

通过结合简单的HTML结构、灵活的CSS样式以及JavaScript的滚动事件监听,我们成功实现了一个引人注目的文本渐变填充动画。这个教程展示了如何将用户的滚动行为转化为动态的视觉反馈,为网页交互设计提供了新的可能性。在实际项目中,根据性能需求和用户体验目标,可以进一步优化DOM操作和事件处理机制。

以上就是基于滚动进度的文本渐变填充动画实现教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/743395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月25日 16:27:52
下一篇 2025年11月25日 16:28:13

相关推荐

  • gate.io芝麻开门交易平台官方App最新版 v11.13.6 一键安装

    gate.io芝麻开门交易所是全球知名的数字资产交易平台之一,提供现货、合约、理财、质押、跟单等多种功能,适合新手用户与进阶交易者使用。对于首次接触加密交易的用户来说,通过官方入口访问官网及下载安装gate.io官方app是保障资金安全的核心步骤。本文将为您提供最完整的gate.io官方app最新版…

    2025年12月11日
    000
  • 如何在熊市中布局?2025年牛市到来前你需要做的准备

    熊市是播种希望的黄金期,成功需靠逆向思维与提前布局。保持耐心心态,系统学习区块链知识,复盘投资得失;确保场外现金流稳定,分批买入并保留备用资金;聚焦AI、RWA、GameFi等核心赛道,精选具备长期价值的优质项目,构建分散化投资组合,远离炒作垃圾币。 熊市是市场的沉寂期,但对有远见的投资者而言,这正…

    2025年12月11日
    000
  • 什么是“零知识机器学习”(ZKML)?AI与隐私技术的交集

    零知识机器学习通过零知识证明实现隐私保护与模型验证。1、将推理过程转化为数学电路并用zk-SNARKs生成证明,使第三方可在不接触数据和模型的情况下验证结果真实性;2、为模型生成唯一哈希标识,推理时同步产出绑定输入、输出与模型身份的零知识证明,并通过链上合约验证以确认所有权;3、在去中心化AI网络中…

    2025年12月11日
    000
  • 火币HTX官方认证网页入口 立即下载火币Huobi最新版App

    火币htx交易所是全球领先的数字资产交易平台之一,提供现货、杠杆、合约、质押理财等多元化服务。对于新手用户而言,正确进入火币htx官网入口并通过正规渠道下载安装官方app,是确保资金与账户安全的第一步。本文将为您详细介绍火币huobi最新版app下载方式、官网访问方法、注册流程与买币指南。 火币HT…

    2025年12月11日
    000
  • 币安Binance数字资产交易平台 币安交易所官方App下载中心

    币安(binance)作为全球知名的数字资产交易平台,为用户提供了安全、高效的交易环境和丰富的金融产品。为了方便用户随时随地管理资产,其移动应用扮演了至关重要的角色。本指南将作为您的“币安交易所官方app下载中心”,详细引导您完成从账户注册到app安全下载及初次设置的全过程。 币安(Binance)…

    2025年12月11日
    000
  • 为什么通过API交易更快?量化程序化交易的基础入门知识

    API交易通过自动化指令实现毫秒级响应,其核心在于利用API接口连接交易软件与交易所系统,省去人工操作环节。用户授权获取API密钥后,量化策略生成的买卖信号自动转为标准请求,经HTTPS加密传输至服务器即时处理。相比传统手动交易需经历页面加载、输入确认等延迟环节,API直连大幅缩短指令传输时间。提速…

    2025年12月11日
    000
  • 币安App安卓版官方下载入口 币安Binance手机交易平台安装

    作为全球领先的数字资产交易平台,币安(binance)凭借其卓越的安全稳定性、丰富的交易币种以及极佳的用户体验,赢得了全球数千万用户的信赖。对于安卓用户而言,通过官方渠道获取最新版的app是开启加密货币之旅的第一步。本文专为用户提供币安app安卓版官方下载入口,旨在帮助您避开网络上繁杂的虚假链接。您…

    2025年12月11日
    000
  • OKX App官方下载 欧易手机客户端最新版

    okx(欧易)是全球领先的数字资产服务平台之一,为用户提供广泛的数字资产交易服务。它凭借其强大的安全性能、丰富多样的交易产品以及流畅易用的操作界面,受到了全球数千万用户的信赖。无论您是加密货币领域的新手还是经验丰富的交易者,okx app都能满足您的需求。本文将为您提供okx app官方最新版的下载…

    2025年12月11日 好文分享
    000
  • 火币Huobi官方APP下载入口 火币交易所v11.9.1安卓最新版

    作为全球知名的数字资产交易平台,火币(huobi)一直致力于为全球用户提供安全、专业、诚信的数字货币交易服务。本次更新的v11.9.1安卓最新版,在系统稳定性、交易流畅度以及用户资产安全防护方面进行了全方位的升级。该版本优化了k线图表的加载速度,能够帮助用户更敏锐地捕捉市场行情。本文将为您提供官方正…

    2025年12月11日
    000
  • Gate.io交易所官方网站 芝麻开门交易所认证APP下载入口

    gate.io芝麻开门交易所是全球知名的加密资产交易平台之一,为用户提供现货、合约、etf、理财等多种数字资产服务。对于新手来说,从官方渠道进入官网、下载app并完成注册,是确保账户安全的第一步。本文将为您介绍gate.io官方网站入口及官方认证app下载流程,帮助您快速、安全地上手使用芝麻开门交易…

    2025年12月11日
    000
  • 如何写一份高质量的项目反馈,以增加获得空投的概率?

    项目反馈需聚焦细节与建设性意见,突出参与深度。一、明确反馈目标,精准定位核心问题,如用户体验或功能缺陷,确保内容与项目阶段相关。1、访问官方测试页面并记录操作路径;2、识别至少三个可优化环节,如界面响应慢、交互逻辑不清等;3、将问题归类为功能性、体验性或安全性,并标注复现条件,每条附带场景描述和影响…

    好文分享 2025年12月11日
    000
  • 别被KOL忽悠了,判断项目好坏只看这三个核心维度!

    判断一个币圈项目是否值得参与,关键在于理性分析。首先考察团队背景与透明度,确认创始成员履历真实、社交活跃且定期披露进展,避免匿名或虚假包装;其次分析链上数据与代币模型,检查持仓分布均衡性、释放计划合理性、审计情况及活跃地址趋势,防范集中抛售与机制缺陷;最后评估社区质量与生态合作,关注Discord/…

    2025年12月11日
    000
  • Janction (JCT)币详细介绍_JCT长期价格展望

    Janction(JCT)是基于币安智能链的去中心化AI计算平台,通过构建分布式GPU算力市场,整合AI模型、算力与数据流,实现机器学习自动化。其核心采用“贡献证明”机制,公平奖励算力与数据提供者,并通过二层网络形成虚拟GPU单元供用户租用,降低开发者AI训练成本,所有交易同步至主链确保透明。JCT…

    2025年12月11日
    000
  • Gate.io官网地址更新 2026官方APP注册教程

    gate.io作为领先的加密货币交易所,其官网地址在2025年进行了更新,以提升用户访问的安全性和便利性。本教程详细介绍官网最新地址、官方app的下载、安装以及注册流程,帮助用户快速开启加密交易之旅,确保操作合规与高效。 一、官网地址更新 1、2025年Gate.io官网地址更新为,(这是官方唯一入…

    2025年12月11日
    000
  • 怎么看合约的多空比数据?利用大户持仓比例判断市场情绪

    合约多空比数据反映市场多空力量对比,结合大户持仓可有效判断当前市场情绪。首先通过文华财经等行情软件查询目标合约的持仓龙 虎榜,获取多空总量及变化;其次访问Coinglass等数据网站查看多空比数值、走势及大户持仓分布;再查阅上期所等交易所官网发布的持仓排名报告,分析前20名会员持仓明细;最后结合大户…

    2025年12月11日
    000
  • 火币交易所AppAndroid官方客户端-火币交易所(HTX)中文版v11.8.0

    火币交易所(HTX)中文版v11.8.0是专为Android用户设计的官方客户端,提供安全便捷的数字资产交易服务。该App支持多种加密货币交易、实时行情查看及资产管理功能,帮助用户高效参与全球市场。本文将详细介绍下载、安装及注册流程,确保用户顺利上手。 官网入口: 官方APP下载链接: 一、下载火币…

    2025年12月11日
    000
  • ouyi交易所官网入口指南 欧亿ouyi官方APP下载v6.147.1注册

    欧易交易所(okx)作为全球领先的数字资产交易平台,其官方app v6.147.1版本提供便捷的交易入口。本指南详细介绍官网访问、app下载、安装及注册流程,帮助用户安全高效开启数字货币投资之旅,确保合规操作与资产保护。 一、官网入口指南 1、打开浏览器,输入官方网址,避免使用第三方链接以防钓鱼风险…

    2025年12月11日
    000
  • Janction (JCT)币生态系统_JCT币价潜力评估

    JCT币价潜力取决于其去中心化AI计算生态的落地情况。1、Janction需成功构建全球分布式GPU市场,实现资源高效共享;2、二层网络应具备高并发处理与负载均衡能力;3、“贡献证明”机制须准确衡量并奖励参与者;4、JCT代币需广泛应用于质押、支付与治理。市场数据方面,需关注高流动性交易所的成交额、…

    2025年12月11日
    000
  • 币安Binance虚拟货币交易所官网入口 币安手机App官方安全下载地址

    币安官网访问入口 1、通过本文提供的币安Binance官网认证入口进入平台主页,可查看行情、公告及平台服务介绍。2、务必收藏官网地址,防止误入仿冒网站。3、如遇访问受限,可切换浏览器或直接使用币安APP登录账户。4、进入官网后,可直接跳转到账户登录/注册页面。 币安官方APP下载安装 1、在官网首页…

    2025年12月11日
    000
  • OKX欧易交易APP直达 OKX杠杆交易最新官方登录下载链接

    okx欧易交易app是全球领先的加密货币交易平台,提供杠杆交易、现货交易等多种功能。该app支持直达官方登录下载链接,确保用户安全便捷地获取最新版本。通过该app,用户可随时进行高效交易,享受专业级别的市场洞察与风险管理工具。 一、OKX欧易交易APP下载地址 官网入口: 欧易okxAPP下载链接:…

    2025年12月11日
    000

发表回复

登录后才能评论
关注微信