问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求用CSS写一个可以跟随页面上下滚动的代码!

发布网友 发布时间:2022-04-06 13:08

我来回答

2个回答

懂视网 时间:2022-04-06 17:29

本篇文章给大家带来的内容是关于CSS实现基于用户滚动应用(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

通过将当前滚动偏移映射到html元素上的属性,我们可以根据当前滚动位置设置页面上的元素样式。我们可以使用它来构建一个浮动导航组件。

这是我们将使用的HTML,<header>当我们向下滚动时,我们希望在内容之上浮动的一个很好的组件。

<header>I'm the page header</header>
<p>Lot's of content here...</p>
<p>More beautiful content...</p>
<p>Content...</p>

首先,我们将监听该'scroll'事件,document并且scrollY每次用户滚动时我们都会请求当前位置。

document.addEventListener('scroll', () => {
 document.documentElement.dataset.scroll = window.scrollY;
});

我们将滚动位置存储在html元素的数据属性中。如果您使用开发工具查看DOM,它将如下所示。

<html data-scroll="0">

现在我们可以使用此属性来设置页面上的元素样式。

/* Make sure the header is always at least 3em high */
header {
 min-height: 3em;
 width: 100%;
 background-color: #fff;
}

/* Reserve the same height at the top of the page as the header min-height */
html:not([data-scroll='0']) body {
 padding-top: 3em;
}

/* Switch to fixed positioning, and stick the header to the top of the page */
html:not([data-scroll='0']) header {
 position: fixed;
 top: 0;
 z-index: 1;

 /* This box-shadow will help sell the floating effect */
 box-shadow: 0 0 .5em rgba(0, 0, 0, .5);
}

基本上就是这样,当向下滚动时,标题现在将自动从页面中分离并浮动在内容之上。JavaScript代码并不关心这一点,它的任务就是将滚动偏移量放在数据属性中。这很好,因为JavaScript和CSS之间没有紧密耦合。

仍有一些改进,主要是在性能领域。

但首先,我们必须修复脚本,以适应页面加载时滚动位置不在顶部的情况。在这些情况下,标题将呈现错误。

页面加载时,我们必须快速获取当前滚动偏移量。这确保了我们始终与当前的事态同步。

// Reads out the scroll position and stores it in the data attribute
// so we can use it in our stylesheets
const storeScroll = () => {
 document.documentElement.dataset.scroll = window.scrollY;
}

// Listen for new scroll events
document.addEventListener('scroll', storeScroll);

// Update scroll position for first time
storeScroll();

接下来我们将看一些性能改进。如果我们请求该scrollY位置,浏览器将必须计算页面上每个元素的位置,以确保它返回正确的位置。如果我们不强迫它每次滚动互动都这样做是最好的。

要做到这一点,我们需要一个debounce方法,这个方法会将我们的请求排队,直到浏览器准备好绘制下一帧,此时它已经计算了页面上所有元素的位置,所以它不会再来一遍。

// The debounce function receives our function as a parameter
const debounce = (fn) => {

 // This holds the requestAnimationFrame reference, so we can cancel it if we wish
 let frame;

 // The debounce function returns a new function that can receive a variable number of arguments
 return (...params) => {
 
 // If the frame variable has been defined, clear it now, and queue for next frame
 if (frame) { 
 cancelAnimationFrame(frame);
 }

 // Queue our function call for the next frame
 frame = requestAnimationFrame(() => {
 
 // Call our function and pass any params we received
 fn(...params);
 });

 } 
};

// Reads out the scroll position and stores it in the data attribute
// so we can use it in our stylesheets
const storeScroll = () => {
 document.documentElement.dataset.scroll = window.scrollY;
}

// Listen for new scroll events, here we debounce our `storeScroll` function
document.addEventListener('scroll', debounce(storeScroll));

// Update scroll position for first time
storeScroll();

通过标记事件,passive我们可以告诉浏览器我们的滚动事件不会被触摸交互取消(例如与谷歌地图等插件交互时)。这允许浏览器立即滚动页面,因为它现在知道该事件不会被取消。

document.addEventListener('scroll', debounce(storeScroll), { passive: true });

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的CSS视频教程栏目!

热心网友 时间:2022-04-06 14:37

你的意思是固定在页面的一个地方,碎屏滚动吗?用position:fixed!定位追问但是,我用固定定位之后他是随屏滚动了!但是一旦网页大小变化了她也跟着一起变化了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
检察院不批捕取保候审后还会提起诉讼吗 我老公长期在外地工作,每次回来后我们合房的第二天,两个人都觉得特别... 为什么第三次干事,老公不觉得紧,而我也没有那么疼呢,事后觉得有点涨 老公今年才25岁,为什么每次跟我做完爱后就倒头大睡,看起来很累的样子... ...回来就和我做了,做了两次,时间也比以前长,很累,谁知道为什么... 深圳市铭利达精密机械有限公司公司介绍 深圳市宝鑫五金机械厂公司介绍 CNC华明集团企业介绍 华为手机怎么退出talkback模式 华为手机talkback是什么意思_百度... ...开启了一个碰什么都会说那是什么的,这是怎么回事怎么解决? 小学生的暑假怎么安排才不会耽误学习? 微信收到信息无提示音。 为什么手机微信没有提示音 苹果手机挂着tt打微信没有声音 recognition和acceptance区别? recognize的固定搭配 请问单词recognize confess,acknowledge,recognize,admit,concede的用法有什么区别_百度知 ... admit和recognize的区别 recognize应该如何翻译?(英语语法 recognise与recognize有区别吗? 英语rec0gnize昀形容词,名词 recognization有没有这个词?与recognize是什么关系? recognize的形容词和名词形式是什么 求福建好玩景点排名,哪些比较推荐? 福建最好玩的景点有哪些? 微信隐藏某人聊天 怎样在word文档中打出一些特殊字符 word里怎么能把范围打到极限符号正下面? 怎样在word中打出数学符号,如开方,立方,极限等等 如何安排小学生的暑假生活? 教师资格证主要是考些什么内容 教师资格证考什么内容 教师资格证考试都会考哪些内容阿? 教师证需要考什么内容? 生酮减肥每天碳水不超过20 但是有说可以吃大量蔬菜,很多叶子菜里面碳水也不低? 低碳饮食的碳水到底摄入多少为好? 低碳饮食一天摄入多少碳水 苹果11有信号但是老断网 生酮减肥碳水化合物每天摄入多少 减脂期间的碳水摄入量应该是多少? 苹果11怎么有时断网怎么解决? 减脂一天摄入多少碳水合适知乎 什么是补叙??? 追叙、补叙两种手法的特点? 如何做菜盒,菜盒的面怎样和?死面还是发面?如题 谢谢了 什么叫补叙? 顺叙 倒叙 插叙 补叙 各有什么作用? 叙述方法有哪些分别有什么作用 语文知识:插叙和补叙的 区别是什么?