gpt4 book ai didi

jquery - 一页水平网站未以调整大小为中心

转载 作者:行者123 更新时间:2023-12-01 07:23:12 24 4
gpt4 key购买 nike

我正在使用 jQuery 开发我的第一个单页水平网站和 scrollTo插入。该站点有 3 个屏幕,并以居中位置开始(显示中间屏幕)。为了实现这一目标,对我来说合乎逻辑的方法是制作 <body>width:300%; ,每个屏幕都有 width:33.3333%; 。当您单击<a>时,jQuery 将您发送到另一个屏幕,向左或向右移动。

这很好用,但是当我尝试调整窗口大小时,我失去了所有结构,宽度不再有意义。我想知道我能做些什么来解决这个问题,但更重要的是我想了解为什么会发生这种情况。

这是Mr. Fiddle 。调整窗口大小,您就会发现问题所在。谢谢!

最佳答案

正如您在卢克回答的一条评论中提到的那样,我重新评估了这一点,您需要记住您上次去过的地方。

您需要跟踪您所在的位置,然后在调整大小后返回到那里。
使用与此类似的代码:

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;
}
})​

参见DEMO

我还缓存了 body 元素,因此您在滚动时不必不断地重新遍历它,但这几乎没有增加性能增益。

和以前一样,记得在离开页面时取消绑定(bind)事件,否则可能会导致内存泄漏。

我仍然没有设法摆脱滞后的重新定位,但这是之后需要努力的事情。

编辑
终于找到了一种方法来最小化调整大小时的滞后/闪烁。

在调整大小方法中使用 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);
})

已更新DEMO

关于jquery - 一页水平网站未以调整大小为中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11677560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com