4

我一直在寻找,但似乎找不到任何方法来实现这一目标,所以就到这里。我正在尝试调整滚动速度以偏离浏览器的默认速度。所以滚动会比通常更快/更慢。

我试着做一些事情,$(window).scrollLeft()但这对我来说不太有效。有谁知道在 Javascript 或 jQuery 中执行此操作的任何方法?

谢谢 :)

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

4

2 回答 2

4

这是我将“AugmentScroll”放在一起的快速 JavaScript 类。在您的窗口 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');

};
于 2013-06-17T17:21:25.367 回答
3

您不能取消或更改窗口滚动事件。您可以尝试获取当前滚动位置并减去几个像素,然后将其设置为滚动位置。我不建议做这样的事情。

于 2013-06-17T14:22:31.763 回答