正如您在关于卢克的回答的评论之一中提到的那样,我重新评估了这一点,您需要记住您最后的位置。
您需要跟踪您所在的位置,然后在重新调整大小后返回那里。
使用与此类似的代码:
var lastPosition = "middle";
var $body = $('html, body');
window.scrollTo(($(document).width() - $(window).width()) / 2, 0);
$('#go_left').click(function() {
$body.scrollTo('0px', 800);
lastPosition = "left";
});
$('#go_right').click(function() {
$body.scrollTo('100%', 800);
lastPosition = "right";
});
$('#left_link').click(function() {
$body.scrollTo('50%', 800);
lastPosition = "middle";
});
$('#right_link').click(function() {
$('html, body').scrollTo('50%', 800);
lastPosition = "middle";
});
$(window).off('resize.menu').on('resize.menu', function() {
switch(lastPosition)
{
case "left":
$body.scrollTo('0px', 0);
break;
case "middle":
$body.scrollTo('50%', 0);
break;
case "right":
$body.scrollTo('100%', 0);
break;
}
})
见演示
我还缓存了 body 元素,因此您不必在滚动时不断地重新遍历它,但这增加了一点性能提升。
和以前一样,请记住在离开页面时取消绑定事件,否则最终可能会导致内存泄漏。
我仍然没有设法摆脱滞后的重新定位,但这是之后要做的事情。
编辑
终于找到了一种方法来最小化调整大小时的滞后/闪烁。
在调整大小方法中使用scrollLeft()
它会更好,不是完美/完美,但要好得多:
$(window).off('resize.menu').on('resize.menu', function() {
var elementToScrollTo = "div#main";
switch(lastPosition)
{
case "left":
elementToScrollTo = "div#left";
break;
case "middle":
elementToScrollTo = "div#main";
break;
case "right":
elementToScrollTo = "div#right";
break;
}
$(window).scrollLeft($(elementToScrollTo).position().left);
})
更新了演示