【问题标题】:How to stop Androids' Browser from scrolling back如何阻止安卓浏览器向后滚动
【发布时间】:2011-09-16 18:08:06
【问题描述】:

我正在开发一个 jquery-mobile 应用程序,但遇到了一些问题;我想使用 jquery 的 animate() 来轻轻滚动“回到顶部”我的应用页面。

以下代码 sn-p 在除我的一个测试浏览器之外的所有浏览器中都运行良好。桌面上的 Chrome 和 Firefox、iPhone 上的 Safari 和 Android 上的 Firefox Beta 都很好。动画完成后,默认的 Android 浏览器 (webkit-mobile IIRC) 会滚动回锚点。

$("a[href='#top']").live('click', function() {
    $("body").animate({ scrollTop: 0 }, "slow", function() {
        // anim complete
        setTimeout(function() { // not needed, attempt to brute-force
          window.scrollTo(0,0);
          alert('foo'); // <- Android scrolls back to anchor after showing alert
        }, 50);
    });
});

谁能建议 a) 是什么导致 Android 浏览器向后滚动和/或 b) 建议解决方法?如果它有所不同,我目前正在测试的设备运行的是 Android 2.3.2。

【问题讨论】:

    标签: javascript jquery android jquery-mobile mobile-webkit


    【解决方案1】:

    阅读有关一个无关问题的文档后,我偶然发现了 $.mobile.silentScroll() 方法 - 显然是为这种情况设计的。

    这是我最初的脑死解决方法:

    function scrollToTop() {
        var scrollPos = $(document).scrollTop();
        scrollPos -= 60;
        if (scrollPos < 1) { scrollPos = 1; }
        $.mobile.silentScroll(scrollPos);
        if (scrollPos > 1) { setTimeout(scrollToTop, 60); }
    }
    
    $("a[href='#top']").live('vclick', function() {
        scrollToTop();
        return false;
    });
    

    仍然好奇为什么Android浏览器要滚动回原始表单中的锚点。

    【讨论】:

    • 成功了吗?我遇到了同样的问题,想知道您是否找到了更好的解决方案,或者这个解决方案是否完美。干杯
    • 我没有看到更好的东西;这无论如何都不是完美的,但它可以满足我当时的需要。如果您确实找到了更好的解决方案,我很想听听。 :)
    猜你喜欢
    • 2012-03-29
    • 2011-12-22
    • 2011-02-08
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    相关资源
    最近更新 更多