【发布时间】:2019-09-28 03:41:18
【问题描述】:
我正在尝试实现一个像this one 这样的粘性标题,但是响应式。
我已经让它大部分工作了,除了一个部分:当页面向上滚动时,标题下方的页面内容突然跳起来。
我正在使用 JavaScript 和 jQuery。
我已经用评论标记了我怀疑问题出在哪里:
<script>
window.onscroll = function() {myFunction()};
var header = document.getElementById("myHeader");
var top_cont = document.getElementById("top-container");
function myFunction() {
var sticky = top_cont.offsetHeight;
var pad_amt = header.offsetHeight+"px";
if (window.pageYOffset > sticky) {
$(".content").css({"padding-top": pad_amt}); // I think how or when this is being calculated is the main problem
header.classList.add("sticky");
} else {
header.classList.remove("sticky");
}
}
</script>
这是整个页面作为一个sn-p:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body {
margin: 0;
font-family: Arial, Helvetica, sans-serif;
}
#top-container {
display: flex;
flex-direction: column;
justify-content: space-between;
background-color: #f1f1f1;
padding: 1px;
text-align: center;
height: 14vw;
}
#top-container *,
.header * {
margin: 0;
}
.header {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
background: #555;
color: #f1f1f1;
height: 12vw;
}
.content {
padding: 16px;
padding-top: 0px;
}
.sticky {
position: fixed;
top: 0px;
width: 100%;
}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
</head>
<body>
<div id="top-container">
<h1>Scroll Down</h1>
<p>Scroll down to see the sticky effect.</p>
</div>
<div class="header" id="myHeader">
<h2>My Header</h2>
</div>
<div class="content">
<h3>On Scroll Sticky Header</h3>
<p>The header will stick to the top when you reach its scroll position.</p>
<p>Scroll back up to remove the sticky effect.</p>
<p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
<p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
<p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
<p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p><p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p> <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p><p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p> <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p><p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p> <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p><p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
<p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
<p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
<p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
<p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
</div>
<script>
window.onscroll = function() {myFunction()};
var header = document.getElementById("myHeader");
var top_cont = document.getElementById("top-container");
function myFunction() {
var sticky = top_cont.offsetHeight;
var pad_amt = header.offsetHeight+"px";
if (window.pageYOffset > sticky) {
$(".content").css({"padding-top": pad_amt}); // I think how or when this is being calculated is the main problem
header.classList.add("sticky");
} else {
header.classList.remove("sticky");
}
}
</script>
</body>
</html>
无论浏览器窗口大小如何(以及因此更改标题大小),标题都粘在页面顶部 - 这很好。只需获取它即可正确调整padding-top的内容。
支持要求:
IE 11、Edge、Firefox、Chrome、Safari、Opera、iOS Safari、Android 浏览器、Android 版 Chrome
【问题讨论】:
-
不可以使用position:sticky吗?
-
我完全主观的个人建议是不要使用 w3schools。在我完全主观的个人意见中,我绝不想强迫任何人,该网站需要尽快死亡。
-
@DoğancanArabacı 不幸的是我仍然需要支持IE11,所以......不。 :-(
-
@ChrisG 我意识到很多人鄙视 w3schools(我不明白为什么),而且我知道其他人喜欢他们。就我个人而言,我发现它们很有帮助,而且我知道没有任何网站可以替代我。 Stack Overflow、CSS-Tricks 和 w3schools 是我的前 3 名参考资料,每一个都有不同的帮助。虽然我尊重您的建议,但在一些竞争出现并且比 w3schools 做得更好之前,我不知道如何接受它。感谢您的意见 - 现在让我们不要让这个评论部分偏离主题。 :-)
-
既然你提到不知道更好的,试试这个:developer.mozilla.org/en-US/docs/Learn
标签: javascript jquery css responsive-design