调整窗口滚动速度

4

我已经四处寻找,但似乎找不到任何方法来实现这一点,所以请看这里。 我正在尝试调整滚动速度以偏离浏览器的默认速度。 因此,滚动速度将比通常情况下快/慢。

我尝试使用$(window).scrollLeft()进行操作,但对我来说并不完全奏效。 有人知道在Javascript或jQuery中如何实现吗?

谢谢 :)

注意:我不是在寻找视差效果;)


这是几个你可能想要查看的链接:http://www.dezinerfolio.com/2007/08/08/df-javascript-smooth-scroll http://www.webdeveloper.com/forum/showthread.php?209918-Help-Changing-the-scroll-speed-of-this-smooth-scroll-javascript - user1853788
2个回答

4

这是一个我编写的快速JavaScript类"AugmentScroll"。在你的window onload/document ready事件中实例化该类,它将改变滚动行为。它使用间隔计时器和窗口滚动事件。希望这能帮助你入门。它适用于最新的Chrome和FF以及IE9。在FF中,“平滑滚动”高级/常规选项会有点混乱。

window.onload = function() {

function AugmentScroll(type /* slowest|slower|slow|fast|faster|fastest */) {
    this.oldX = window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0;
    this.oldY = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0;
    this.deltaX = 0;
    this.deltaY = 0;
    this.busy = false;
    this.multiplier = 0;
    switch(type) {
        case 'slowest': this.multiplier = -0.9; break;
        case 'slower': this.multiplier = -0.5; break;
        case 'slow': this.multiplier = -0.2; break;
        case 'fast': this.multiplier = 0.2; break;
        case 'faster': this.multiplier = 0.5; break;
        case 'fastest': this.multiplier = 1.0; break;
        case '2x': this.multiplier = 1.0; break;
        case '3x': this.multiplier = 2.0; break;
        case '4x': this.multiplier = 3.0; break;
        case '5x': this.multiplier = 4.0; break;
        default: break;
    }
    window.addEventListener("scroll", this.OnScroll.bind(this), false);
    window.setInterval(this.OnUpdate.bind(this), 100);
};
AugmentScroll.prototype.OnScroll = function() {
    if(this.busy) {
        this.busy = false;
    } else {
        var x = window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0;
        var y = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0;
        this.deltaX = x - this.oldX;
        this.deltaY = y - this.oldY;
    }
    return true;
};  
AugmentScroll.prototype.OnUpdate = function() {
    var dx = this.deltaX * this.multiplier;
    var dy = this.deltaY * this.multiplier;
    if(dx != 0 || dy != 0) {
        this.busy = true;
        window.scrollBy(dx, dy);
        this.oldX = window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0;
        this.oldY = window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0;
        this.busy = false;
    }
};
new AugmentScroll('slowest');

};

哇,太棒了@LastCoder!它有点卡顿(可能是由于我的代码冲突),但我会想办法解决这个问题。我只是一个JS初学者。 - AKG
@AKG - 首先,将“window.setInterval(this.OnUpdate.bind(this), 100)”中的时间间隔降低。100毫秒可能太大了,将其降至约20毫秒,看看是否可以使其更加平滑。 - Louis Ricci

3
您无法取消或更改窗口滚动事件。您可以尝试获取当前滚动位置,减去一些像素,然后将其设置为滚动位置。我不建议这样做。

2
Rob,请正确理解。如果你的“我不建议这样做。”不是针对于自己调整滚动速度的答案,请从你的评论中删除它。@akg或任何其他人想要调整窗口滚动速度的原因有很多,他们寻求帮助的唯一部分是如何实现它,而不是你不建议这样做。如果这是针对于你自己的建议,请明确表明并加入一些角度来解释为什么不建议。这些论坛充满了大量毫无意义的“建议”。只需回答问题就好,无需多言。 - Orcra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接