
实现这种滚动进度关联的文本高亮效果,其核心在于以下几个步骤:
首先,我们需要一个基本的HTML页面结构,包含一个用于显示文本的容器元素。
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>滚动文本高亮</title> <!-- 引入自定义CSS样式文件 --> <link rel="stylesheet" href="style.css"> </head> <body> <!-- 文本内容将动态加载到此span元素中 --> <span class="text"></span> <!-- 引入JavaScript逻辑文件 --> <script src="script.js"></script> </body> </html>
在这个结构中,<span class="text"></span> 是我们将用来承载和显示动态高亮文本的容器。
为了让文本在滚动时固定在视口中,并定义高亮时的颜色,我们需要一些基本的CSS样式。
body {
height: 5000px; /* 制造足够的滚动空间,以便观察效果 */
margin: 0; /* 移除浏览器默认的body边距 */
font-family: sans-serif; /* 设置基础字体 */
background-color: #f8f8f8; /* 背景色 */
}
.text {
position: fixed; /* 将文本容器固定在视口中 */
top: 10px; /* 距离视口顶部10px */
left: 10px; /* 距离视口左侧10px */
width: calc(100% - 20px); /* 占据大部分宽度,留出左右边距 */
line-height: 1.6; /* 设置行高,提高可读性 */
font-size: 24px; /* 设置字号 */
color: #333; /* 默认文本颜色 */
padding: 10px; /* 文本内边距 */
box-sizing: border-box; /* 边框盒模型 */
}
.text span {
/* 为文本颜色变化添加过渡效果,使高亮/取消高亮更平滑 */
transition: color 0.1s ease-out;
white-space: pre-wrap; /* 保留空格和换行符 */
}
.highlight {
color: #f00; /* 定义高亮文本的颜色,这里设置为红色 */
}样式说明:
Developr响应式HTML5后台管理模板基于HTML5+CSS3+jQuery制作,界面很漂亮,自动适应屏幕分辨率大小,兼容PC端和手机移动端,附带模板开发技术文档。全套模板,包含仪表盘、用户登录、用户注册、信息、议程、表格、文件浏览器、滑块与进度、表单元素、日历、活版印刷、标签、颜色与背景、图标、文件及画廊、按钮、文本编辑器、表单布局、404错误页等共36个后台模板页面。
130
JavaScript是实现动态高亮的核心。它负责初始化文本、监听滚动事件、计算滚动进度并更新文本样式。
// 定义高亮样式类名常量
const HIGHLIGHT_CLASS = 'highlight';
// 待高亮的文章文本
const ARTICLE_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 = ARTICLE_TEXT.split(" ");
// 获取文本容器元素
let textContainer = document.querySelector('.text');
// 初始化文本:将每个单词包裹在<span>中并插入到DOM
// 这样每个单词都可以独立地被高亮或取消高亮
textContainer.innerHTML = words
.map(word => `<span>${word}</span>`)
.join(' ');
// 监听窗口滚动事件
window.addEventListener('scroll', () => {
// 获取当前页面滚动进度(0.0到1.0之间)
let scrollFraction = getScrollFraction();
// 根据滚动进度和总单词数,计算当前需要高亮的单词数量
let wordsToHighlight = Math.floor(scrollFraction * words.length);
// 重新渲染文本容器的innerHTML,根据计算结果应用高亮样式
// 如果单词的索引小于wordsToHighlight,则为其添加高亮类
textContainer.innerHTML = words
.map((word, index) => `<span ${index < wordsToHighlight ? `class="${HIGHLIGHT_CLASS}"` : ''}>${word}</span>`)
.join(' ');
});
/**
* 计算页面滚动百分比
* 此函数考虑了不同浏览器对scrollTop和scrollHeight的实现差异
* @returns {number} 滚动百分比(0.0到1.0之间),0表示顶部,1表示底部
*/
function getScrollFraction() {
const docElem = document.documentElement;
const body = document.body;
// 获取当前滚动距离,兼容不同浏览器
const scrollTop = docElem.scrollTop || body.scrollTop;
// 计算可滚动总高度 = (文档总高度 - 视口高度)
const scrollHeight = (docElem.scrollHeight || body.scrollHeight) - docElem.clientHeight;
// 避免除以零,如果无可滚动高度则返回0
return scrollHeight > 0 ? scrollTop / scrollHeight : 0;
}JavaScript代码详解:
通过上述步骤和注意事项,您可以实现一个功能完善且视觉吸引力强的基于滚动进度的文本高亮动画效果。
以上就是基于滚动进度的文本高亮动画实现教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号