情况:有一个固定高度的父级div,带有overflow: auto
属性,并拥有足够多的子"line-item" div,使其高度足以触发滚动条出现。每个这样的子div都有tabindex=-1属性,因此可以通过编程方式进行聚焦。
当任何一个这样的子div被程序化地聚焦时,浏览器(在本例中为Chrome 55)的默认行为似乎是滚动父div以将新聚焦的子div居中显示。是否有任何方法可以防止这种行为发生?
情况:有一个固定高度的父级div,带有overflow: auto
属性,并拥有足够多的子"line-item" div,使其高度足以触发滚动条出现。每个这样的子div都有tabindex=-1属性,因此可以通过编程方式进行聚焦。
当任何一个这样的子div被程序化地聚焦时,浏览器(在本例中为Chrome 55)的默认行为似乎是滚动父div以将新聚焦的子div居中显示。是否有任何方法可以防止这种行为发生?
var children = document.getElementsByClassName('child')
for (var i = 0; i < children.length; i++) {
children[i].addEventListener('click', function (e) {
e.preventDefault
var focused = document.getElementById('focus')
var focusedParent = focused.parentNode
var savedOffset = focusedParent.scrollTop
focused.focus();
focused.parentNode.scrollTop = savedOffset;
})
}
.parent {
height: 300px;
overflow: auto;
}
.child {
height: 50px;
background-color: gray;
border-bottom: 1px solid black;
color: white;
box-sizing: border-box;
text-align: center;
line-height: 50px;
font-family: Arial;
}
<div class="parent">
<div class="child" tabIndex="-1">1</div>
<div class="child" tabIndex="-1">2</div>
<div class="child" tabIndex="-1">3</div>
<div class="child" tabIndex="-1">4</div>
<div class="child" tabIndex="-1">5</div>
<div class="child" tabIndex="-1">6</div>
<div class="child" tabIndex="-1">7</div>
<div class="child" tabIndex="-1">8</div>
<div class="child" tabIndex="-1" id="focus">9</div>
<div class="child" tabIndex="-1">10</div>
</div>