我有一个有2个DIV的容器。当我点击一个按钮时,我试图将黄色DIV水平居中放在容器中。但是,如果我多次单击该按钮,它会来回滚动,如果我手动滚动容器然后单击按钮,黄色DIV将永远不会滚动到视图中。
这是jsfiddle。如果一遍又一遍地单击该按钮,它将来回滚动。为什么这样做?: https://jsfiddle.net/nug4urna/
HTML:
<div id='container'>
<div id='blue'></div>
<div id='yellow'></div>
</div>
<div id='mybutton'>
click to scroll yellow div into view
</div>
<div id='log'>
</div>
JAVSCRIPT:
function scrollDivIntoView(id) {
var elOffset = $(id).offset().left;
var elWidth = $(id).width();
var containerWidth = $('#container').width();
var offset = elOffset - ((containerWidth - elWidth) / 2);
$('#container').scrollLeft(offset);
var _log = 'elOffset = ' + elOffset + '<br>';
_log += 'elWidth = ' + elWidth + '<br>';
_log += 'containerWidth = ' + containerWidth + '<br>';
_log += 'offset = ' + offset;
$('#log').html(_log);
}
$(document).ready(function() {
$('body').on('click', '#mybutton', function(){
scrollDivIntoView('#yellow');
});
});
CSS:
#container{
width:100%;
height:150px;
border:1px solid red;
display:inline-block;
white-space:nowrap;
overflow-y:hidden;
overflow-x:auto;
}
#blue{
width:2000px;
height:100px;
background-color: blue;
margin:5px;
display:inline-block;
}
#yellow{
width:200px;
height:100px;
background-color: yellow;
margin:5px;
display:inline-block;
}
#mybutton{
margin-top:10px;
cursor:pointer;
background-color:black;
color:white;
width:400px;
padding:4px;
text-align:center;
}
答案 0 :(得分:1)
如果您将第一行更改为var elOffset = $(id)[0].offsetLeft;
,则原始代码在每种情况下都会有效。
有关详细信息,请参阅以下内容: https://javascript.info/size-and-scroll