代码之家  ›  专栏  ›  技术社区  ›  vaso123

jQuery移动页面显示静音滚动后,页面跳转到顶部

  •  1
  • vaso123  · 技术社区  · 9 年前

    我们有一个购物篮页面,那里有产品,然后是运输方法。这是一个 jQuery mobile 地点

    我想实现的是,如果选择了一个装运方法,那么如果有页面重新加载,jQuerymobile将跳转到 div 运输方法。

    这是代码,滚动到装运方法。这是一个内联脚本。

    $(document).on("pageshow", function (e, ui) {
        $.mobile.silentScroll($('#kosar').offset().top);
    });
    

    预期结果 :在页面刷新时,窗口滚动到 #kosar 第。

    当前结果 :页面滚动到 #科萨尔 div,但立即滚动到页面顶部。

    我们发现,如果在 silentScroll ,窗口不会跳回到页面顶部。看来 pageshow 滚动到后面,但我们不知道,是什么。

    例如:

    $(document).on("pageshow", function (e, ui) {
        $.mobile.silentScroll($('#kosar').offset().top);
        undefined_function(); //This function is not exists
    });
    

    以下是非工作和“工作”示例:

    Here is a live example. 当您刷新页面时,您将在一秒钟内看到红色的大文本,然后您将立即被带到页面顶部。

    Here is the example with error.

    我已经在FF开发者版中测试过了。使用Chrome,您需要将浏览器大小调整到稍小一些,并刷新一些时间以查看滚动条如何跳到底上。

    我怎样才能防止这种烦人的滚动到顶部?

    1 回复  |  直到 9 年前
        1
  •  2
  •   vaso123    9 年前

    我想,这是jQuery移动js中的一个bug,我已经向他们报告了。

    我终于想通了。

    版本: http://ajax.googleapis.com/ajax/libs/jquerymobile/1.4.5/jquery.mobile.min.js

    我在jQuery移动js中创建了一个断点 silentScroll 定义,以及我所看到的,出于某种原因,它运行了两次。第一个是一个好电话, ypos 是一个数字,我想跳到哪里,这就是它跳到正确位置的原因。

    但是,稍后,在第15432行,下面是这些代码行,它们是在文档就绪状态下运行的:

    // window load event
    // hide iOS browser chrome on load if hideUrlBar is true this is as fall back incase we were too early before
    if ( $.mobile.hideUrlBar ) {
        $window.load( $.mobile.silentScroll );
    }
    

    当它发生时,在第二次通话时 伊波斯 对于 静音滚动 将是一个对象,而不是函数所期望的数字,如果不是数字,则jQuerymobile将 伊波斯 $.mobile.defaultHomeScroll 如果不修改,实际值是1。这就是它跳回家的原因。

    警告:如果你认为,你只需要设置 $.mobile.hideUrlBar 假,你错了。我尝试过,但它有副作用,因为在第15416行中有另一个变量的引用,如果关闭,那么当你从一个页面转到另一个页面时,你不会被重定向到第二页的顶部。

    因此,解决方案是对此进行评论 $window.load( $.mobile.silentScroll ); 现在一切都如我所料。