Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.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 如何在$(窗口)中滚动一次。scroll()还有另一个滚动命令_Javascript_Jquery_Html - Fatal编程技术网

Javascript 如何在$(窗口)中滚动一次。scroll()还有另一个滚动命令

Javascript 如何在$(窗口)中滚动一次。scroll()还有另一个滚动命令,javascript,jquery,html,Javascript,Jquery,Html,我有一个垂直的照片查看器 我需要一个滚动效果,当鼠标滚轮按下时,页面高度为一次 所以我有以下代码 $(document).ready(function() { $(window).scroll(function () { var H = $(window).height(); var st = $(this).scrollTop(); $("html, body").animate({ scrollTop:

我有一个垂直的照片查看器

我需要一个滚动效果,当鼠标滚轮按下时,页面高度为一次

所以我有以下代码

$(document).ready(function() {
        $(window).scroll(function () {
            var H = $(window).height();
            var st = $(this).scrollTop();
            $("html, body").animate({ scrollTop: H + st }, 500, function () {
                console.log("finish scroll");
            });
        });
    });
但当我滚动一次时,它会一次又一次地重复,直到滚动到底部

我怎样才能解决这个问题


提前感谢。

问题是动画也会制作滚动事件。所以你有一个滚动循环。 要解决这个问题,可以添加一个标志


这不是解决问题的最佳方法,但您可以这样做=>

我使用了一个计数器和一个计时器,以便计数器在滚动完成后等待半秒钟


}))

您可以尝试使用一个计数器,在scroll事件中增加它,但仅当计数器==1时才进行自定义滚动。在动画回调中,您将重置它。看一看jQuery结果与之前一样@@“它几乎完美,但我不知道为什么“完成滚动”将在一个滚动中切换两次?这是我的测试页面=>提前感谢。
$(document).ready(function () {

var H = $(window).height(),
    go = true;
console.log(H);
//just for visual, set the height of boxes to be same as window height 
//to check it is all working
$('.box').css('height', H + "px");

function scroller() {
    $("html, body").animate({
        scrollTop: '+=' + H
    }, 400, function () {
        console.log("finished");
        setTimeout(function () {
            go = true;
        }, 400);
    });
}

$(document).on('scroll', function (e) {
    e.preventDefault();
    if (go) {
        go = false;
        scroller();
    }
});