我正在尝试在应用程序中使用 scrollIntoView()
,但是由于我有一个顶部固定栏,因此当我使用scrollIntoView()
时,元素将滚动回到固定栏上。
这意味着,当我尝试将某个元素对用户可见时,通过将其滚动到可见区域,它将被滚动,但是滚动到另一个不可见的位置,即该固定栏是。
跟随我正在尝试做的一个例子:
let element = document.getElementsByClassName('second-element')[0];
element.scrollIntoView();
.fixed-element{
height: 30px;
width: 100%;
background-color:black;
position:fixed;
}
.parent-element {
width: 100%;
height: 40000px;
background-color:blue;
}
.element {
width: 100%;
height:100px;
background-color: yellow;
margin-top:10px;
}
.second-element{
width: 100%;
background-color: red;
height:200px;
}
<div class="fixed-element"></div>
<div class='parent-element'>
<div class='element'></div>
<div class='element'></div>
<div class='element'></div>
<div class='element'></div>
<div class='element'></div>
<div class='element'></div>
<div class='element'></div>
<div class='element'></div>
<div class='second-element'></div>
<div class='element'></div>
<div class='element'></div>
<div class='element'></div>
<div class='element'></div>
<div class='element'></div>
<div class='element'></div>
<div class='element'></div>
<div class='element'></div>
<div class='element'></div>
</div>
有什么方法可以使用此功能,以使滚动元素不会由于固定的条而变得不可见?
我想要一个普通的JavaScript解决方案。而且,并且只有在可能的情况下,才需要知道任何固定元素的存在的解决方案。
最佳答案
您可以使窗口scrollTo
x位置0
和y位置元素的offsetTop
减去固定元素的offsetHeight
。
JSFiddle与您的代码:http://jsfiddle.net/3sa2L14k/
.header{
position: fixed;
background-color: green;
width: 100%;
top: 0;
left: 0;
right: 0;
}
html, body{
height: 1000px;
}
#toBeScrolledTo{
position: relative;
top: 500px;
}
<div class="header">
Header
</div>
<div id="toBeScrolledTo">
Text Text Text
</div>
<script>
window.scrollTo(0, document.getElementById('toBeScrolledTo').offsetTop - document.getElementsByClassName('header')[0].offsetHeight);
</script>
关于javascript - scrollIntoView()不起作用: does not taking in account fixed element,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51618548/