javascript - 使用 Javascript 中断 Mac 平滑滚动

标签 javascript jquery macos animation scroll

我有一个脚本可以监视滚动并控制滚动以根据某些参数为页面设置动画。为此,它会调用 window.scrollTo(0, currentScrollTop);,这会完全中断 Windows 上 Firefox 的平滑滚动。然后我可以将页面滚动到我想要的位置的动画。

不幸的是,这个技巧在 MacOS 的浏览器中似乎不起作用,这会导致 JavaScript 和浏览器争相滚动窗口时的糟糕体验。

有没有跨浏览器的方法来停止使用 JavaScript 进行平滑滚动?

有问题的网站使用效果:http://capitalismis.com

相关(简化)代码:

$doc.on('scroll', function(e)
    {
        $doc.off('scroll');

        window.scrollTo(0, $doc.scrollTop());

        var aniSpeed = 1500 * Math.abs(scrollTop - selected.top) / windowHeight;

        $body
            .stop()
            .animate({scrollTop: selected.top}, aniSpeed, 'easeOutQuad');
     }
);

最佳答案

简而言之:不要试图覆盖 native 滚动。每个操作系统和设备处理事情的方式不同,并且不可能预测不同的场景。有“硬滚动”(大多数 Windows 版本)、“软滚动”(≈Mac OS X 10.6+)和仅在滚动完成时触发 onscroll 事件的浏览器 (iOS)。一团糟。

我不会尝试修改body 的滚动行为,而是相应地修改页面的元素。收听 onscroll 事件,并在网页上移动内容。

// Capture scroll event
$(window).scroll( function() {

    // Get scroll offset from top
    var scrollTop = $(window).scrollTop();

    // Use it to move elements around on the page (or change backgrounds etc.)
    // Here: move .element in the opposite direction of the scroll
    $('.element').css({
        '-vendor-transform' : 'translate3d(' + (scrollTop*(-1)) + 'px,0,0)'
    });
});

关于javascript - 使用 Javascript 中断 Mac 平滑滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13708952/

相关文章:

macos - 通过 bash 验证是否安装了 Homebrew 扩展(cask)

javascript - 在 BreezeJS 中按列过滤到列总和或运算符

javascript - 通过jquery在数据表中设置 "Search Box"的值为空

javascript - 考虑到一个函数调用另一个函数,不同 JavaScript 函数中的变量名称相同

javascript - 如何在 jQuery 中使用 .trigger() 方法将 eventData 参数传递给 .on()?

objective-c - 如何使状态栏应用程序与其他状态栏应用程序一起捕获 'applicationDidResignActive:'?

macos - 为什么Apache拒绝在OSX上连接到localhost 127.0.0.1?

javascript - Meteor.publish 回调未被调用

javascript - 全背景图片幻灯片jquery,想让幻灯片的最后一张图片可点击

javascript - 设置时间倒计时器jquery