jQuery scrollLeft()被浏览器劫持自动滚动到最后位置

时间:2015-09-13 02:19:27

标签: jquery html css scroll

所以我试图在页面加载时让特定元素在屏幕上居中。该元件的两侧两侧是一个窗口宽度为100%的元件。

最终,会有更多的部分,我希望用户能够在所有部分之间自由滚动,但为了我正在做的网络应用程序的目的,我需要能够控制滚动还有javascript。

Here's a Fiddle to try it out.正如你所看到的,它适用于小提琴。 现在,当我将它加载到我的页面上时,它会在正确的位置闪烁,然后转到浏览器认为它最后滚动的位置。如果您将页面加载为新的,那么它将为0.如果您向右滚动一点,那么无论该变量是什么,它都将接管并将元素滚动到该点而不是指定的点。有时您可以看到元素应该在哪里,然后它会回到浏览器认为你最后的位置。

您可以在此处查看其实例:http://www.playafterdj.com/index2.php

简单的HTML:

<div class="wrapper">
    <section class="fill"></section>
    <section class="init"></section>
    <section class="fill"></section>
</div>

CSS:

* {
    margin:0;
    padding:0;
    box-sizing:border-box;
}
html, body {
    width:100%;
    height:100%;
    position:relative;
}
.wrapper {
    width:100%;
    height:100%;
    position:relative;
    white-space: nowrap;    
}
section {
    width: 100%;
    max-width: 640px;
    height: 100%;
    background-color: #313138;
    padding: 10px;
    margin-right: 20px;
    display: inline-block;
    vertical-align: top;
}
section.fill {
    width: 100%;
    max-width:100%;
    margin-right: 0;
    background-color: transparent;
    padding:0;
}

最后是JS:

$(window).load(function(){
    var winW = $(window).width();
    var sectionW = $('.init').width();
    var startPos = (winW/2)+(sectionW/2)+15;
    $('body').scrollLeft(startPos);
});

所以,我使用startPos得到正确的号码。在小提琴中,您可以通过滚动并看到startPos与身体的scrollLeft()匹配来测试它。不幸的是浏览器会覆盖它。我试过使用这几个答案但没有用:

Prevent automatic browser scroll on refresh

Disable brower's auto scroll after a page refresh?

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您似乎正在尝试滚动.wrapper div,但它未设置为可滚动。

overflow-x:scroll;上设置.wrapper即可。

.wrapper {
    overflow-x:scroll;
}

http://jsfiddle.net/7ejL4koo/

或者,如果要滚动的内容是body,而不是

$('.wrapper').scrollLeft(startPos);

DO

$(document.body).scrollLeft(startPos);

http://jsfiddle.net/myydrL25/

这两种方法都有效。