私は2つのDIVを持つコンテナを持っています。私がボタンをクリックすると、黄色の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;
}
私はそれをずっと前に働かせるための 'ハック'を見つけたとしても、これを答えとして受け入れます。私の解決策は、計算を行う前にコンテナーscrollLeftを0に戻していたので、実際には2回スクロールしています。ただすぐに起こります。しかし、あなたの方が良い解決策です。 –