【问题标题】:Gradually scroll on mousedown until mouseup在 mousedown 上逐渐滚动直到 mouseup
【发布时间】:2016-11-24 00:14:03
【问题描述】:

position: fixed 元素上按下鼠标按钮时,如何使视口逐渐向下滚动?

【问题讨论】:

标签: javascript jquery


【解决方案1】:

在这里,您可以将jQuery.animate()setTimeout()clearTimeout() 结合使用:

$('.button').on('mousedown', function() {
    console.log('Start Animate');
    (function smoothSrcroll() {
        console.log(Math.max($('html').scrollTop(), $('body').scrollTop()));
        $('html, body').stop().animate({
            scrollTop: Math.max($('html').scrollTop(), $('body').scrollTop()) + 100
        }, 1000, 'linear', function() {
            window.timeout = setTimeout(smoothSrcroll(), 0);
        });
    })();
}).on('mouseup', function() {
    console.log('Stop Animate');
    $('html, body').stop();
    clearTimeout(window.timeout);
});

CodePen Demo

我的目标是 $('html, body'),这样它就可以在 Firefox 和 Chrome 中运行。这有点棘手,因为 animate() 实际上由于两个选择器而运行了两次。为了解决这个问题,我使用了jQuery.stop()。由于 Firefox 可以使用 $('html').scrollTop() 而 Chrome 使用 $('body').scrollTop(),因此我使用 Math.max() 计算了增量。该函数完成后自动执行,释放鼠标时使用clearTimeout()jQuery.stop()

【讨论】:

  • 效果很好,谢谢!有没有办法让它更流畅一点?
  • @ScottHunter 在默认的 jQuery 库中添加了一些补充脚本来缓动。实际上只有 3 个设置:线性、摆动和默认。您可以找到创建更平滑过渡的脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
相关资源
最近更新 更多