清除间隔仍会导致Chrome违规

时间:2019-04-09 20:59:46

标签: javascript setinterval

我使用嵌套间隔制作了一个脚本,以检查当前window.scrollY是否高于某个值。脚本有效并且输出正确,我的问题是Chrome显示“ [Violation]'setInterval'处理程序花费了ms'并一直持续执行此操作。

经过一定的滚动(已通过console.log输出确认)后,所有间隔都将清除,但仍然会向我发出这些警告。

如果有更好的方法可以做到这一点,我会很乐意听。 我试图避免检查不间断滚动事件,从而检查间隔。

此操作的目的是检查我的网上商店中的某些产品是否“可见”,以便可以将数据层发送到Google跟踪代码管理器。

就像我之前说的那样,代码可以正常工作,只是不断告诉我这些违规行为。我没有正确结束间隔吗?

建议的重复项没有提供任何解决方案

var r1, r2, r3, r4, r5, r6, r7, r8;
var tabletRowHeight = [-1,450,980,1470,1950,2440,2980,3460];

if (window.innerWidth > 768  && window.innerWidth < 1200) {
  gtmImpressions2x(tabletRowHeight);
}

function gtmImpressions2x(rH) {
  var row1 = setInterval(function() {
    if (window.scrollY > rH[0]) {
      if (r1 != 1) {
        clearInterval(row1);
        console.log("Datalayer Row 1");
        r1 = 1;
      }
    }  
    var row2 = setInterval(function() {
      if (window.scrollY > rH[1]) {
        if (r2 != 1) {
          clearInterval(row2);
          console.log("Datalayer Row 2");
          r2 = 1;
        }
      }
      var row3 = setInterval(function() {
        if (window.scrollY > rH[2]) {
          if (r3 != 1) {
            clearInterval(row3);
            console.log("Datalayer Row 3");
            r3 = 1;
          }
        }
        var row4 = setInterval(function() {
          if (window.scrollY > rH[3]) {
            if (r4 != 1) {
              clearInterval(row4);
              console.log("Datalayer Row 4");
              r4 = 1;
            }
          }
          var row5 = setInterval(function() {
            if (window.scrollY > rH[4]) {
              if (r5 != 1) {
                clearInterval(row5);
                console.log("Datalayer Row 5");
                r5 = 1;
              }
            }
            var row6 = setInterval(function() {
              if (window.scrollY > rH[5]) {
                if (r6 != 1) {
                  clearInterval(row6);
                  console.log("Datalayer Row 6");
                  r6 = 1;
                }
              }
              var row7 = setInterval(function() {
                if (window.scrollY > rH[6]) {
                  if (r7 != 1) {
                    clearInterval(row7);
                    console.log("Datalayer Row 7");
                    r7 = 1;
                  }
                }
                var row8 = setInterval(function() {
                  if (window.scrollY > rH[7]) {
                    if (r8 != 1) {
                      clearInterval(row8);
                      console.log("Datalayer Row 8");
                      r8 = 1;
                    }
                  }
                }, 500);  
              }, 500);  
            }, 500);  
          }, 500);                      
        }, 500);            
      }, 500);
    }, 500);
  }, 500);
}

0 个答案:

没有答案