Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调整窗口滚动速度_Javascript_Jquery_Scroll - Fatal编程技术网

Javascript 调整窗口滚动速度

Javascript 调整窗口滚动速度,javascript,jquery,scroll,Javascript,Jquery,Scroll,我一直在到处寻找,但似乎找不到任何方法来实现这一点,所以这里开始。我正在尝试调整滚动速度以偏离浏览器的默认速度。因此,滚动将比正常情况下更快/更慢 我试着用$(window.scrollLeft()做一些事情,但这对我来说不太管用。有人知道用Javascript或jQuery实现这一点的方法吗 谢谢:) 注意:我不是在寻找视差效果;) 无法取消或更改窗口滚动事件。您可以尝试获取当前滚动位置并减去几个像素,然后将其设置为滚动位置。我不建议做这样的事 下面是我创建的一个快速JavaScript类“A

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

我试着用
$(window.scrollLeft()
做一些事情,但这对我来说不太管用。有人知道用Javascript或jQuery实现这一点的方法吗

谢谢:)


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

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

下面是我创建的一个快速JavaScript类“AugmentScroll”。在您的窗口onload/documentready事件中,只需实例化该类,它就会更改滚动行为。它使用间隔计时器和窗口滚动事件。希望这能让你开始。它适用于最新的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-首先在“window.setInterval(this.OnUpdate.bind(this),100)”中降低间隔时间。100ms可能太大了。把它降低到~20ms,看看这是否能让它平稳下来。Rob,请用正确的方式来处理这个问题。除非你的“我不建议这样做。”是针对你自己的答案来调整滚动速度,那么请从你的评论中删除它。@akg或其他任何人想要调整窗口滚动速度的原因有很多,他们唯一要求帮助的部分是如何实现它,而不是如果你不建议这样做。如果它是针对你自己的建议,请明确并添加一些观点。这些董事会充满了“建议”,其中大部分都是彻头彻尾的废话。回答这个问题就行了。