使用$(window).scroll时如何注入一次?

How to inject once when using $(window).scroll?

我想 运行 "window.googletag.pubads().refresh();" 一次 当用户滚动 > 2000 像素时。我该怎么做?例如:

    $(window).scroll(function() {
    var st = $(this).scrollTop();
    var lastScrollTop = 2000;

    if (st > lastScrollTop) {
        window.googletag.pubads().refresh();
        console.log('refresh');
    }
});

您可以保留一个全局标志并在每次滚动时检查该值。你可以查看我的版本:

var flag = false;
var lastScrollTop = 2000;
$(window).scroll(function() {
   var st = $(this).scrollTop();
   if (st > lastScrollTop && !flag) {
       window.googletag.pubads().refresh();
       console.log('refresh');
       flag = true;
   }
});

我认为添加名为 flagboolean 数据类型不是很全面,尤其是当 OP 似乎不理解需要 bool 时。它没有告诉他完成这件事需要什么。上面的回答是正确的,但是以后google这个问题的人可能不全面,他们可能不明白你的意思"flag."

不知道何时使用 boolean 数据类型是这里应该解释的更大问题的症状,因此 OP 不会继续无知。

您需要的是 boolean variable。本质上,您想检查某事是否为真。我们已经滚动到该位置了吗?不,让我们触发它。我们已经这样做了吗?然后它不会再次滚动,直到页面刷新。

让我们创建布尔值:var scrolledToPosition = false;。这个必须放在滚动逻辑外面,否则每次都会重置,不会起作用。

您希望最初将其设置为 false,以便正确触发即将到来的附加逻辑。

然后,在您的 if 语句 if (st > lastScrollTop) 中,您需要添加 && !scrolledToPosition.

感叹号表示"not." 例如,如果bool scrolledToPosition等于false,您可以使用!booleanValue来检查。您可以排除感叹号以检查它是否为真。例如,if (scrolledToPosition).

完整代码如下:

var scrolledToPosition = false;
var lastScrollTop = 2000;

$(window).scroll(function() {
    var st = $(this).scrollTop(); 

    if (st > lastScrollTop && !scrolledToPosition) {
        window.googletag.pubads().refresh();
        console.log('refresh');
        scrolledToPosition = true;
    }
});

如果您需要重置它,只需将 scrolledToPosition 设置为 false。像这样:

scrolledToPosition = false;