setInterval не останавливается? - PullRequest
2 голосов
/ 03 октября 2019

Я думал, что интервал просто задерживает функцию, но, как выясняется, он фактически зацикливается.

Когда я включаю некоторую функцию, которая останавливает интервал после завершения функции deletor, она не вызывает это иЯ все еще получаю Test логин к консоли.

document.addEventListener("DOMContentLoaded", function(event) {
  let fullURL = window.location.href;
  //let fullURL2 = window.location.host + window.location.pathname;

  if (fullURL === "https://net.adjara.com/" ||
    fullURL === "https://net.adjara.com/Home") {
    var timer = setInterval(deletor, 5);

    function deletor() {
      timer;

      var slider = document.querySelector("#slider-con");
      var bannerTop = document.querySelector("#MainContent > div:nth-child(2)")
      var bannerMiddle = document.querySelector("#MainContent > iframe");
      var bannerRandom = document.querySelector("#MainContent > div:nth-child(3)");

      if (slider) {
        slider.parentNode.removeChild(slider);
      }

      if (bannerTop) {
        bannerTop.parentNode.removeChild(bannerTop);
      }

      if (bannerMiddle) {
        bannerMiddle.parentNode.removeChild(bannerMiddle);
      }

      if (bannerRandom) {
        bannerRandom.parentNode.removeChild(bannerRandom);
      }

      function stopInterval() {
        clearInterval(timer);
      }
      console.log("Test");

      /*if ()
      clearInterval(timer);*/
    };
  } else {
    return false;
  }
});

Ответы [ 2 ]

1 голос
/ 03 октября 2019

То, что вы ищете, это setTimeout . Он запускается только один раз.

setTimeout(deletor, 5);

Кроме того, вам не нужно писать переменную timer внутри вашего замыкания, как в Python. Javascript фиксирует все, что находится внутри лексического контекста.

0 голосов
/ 03 октября 2019

Код, который вы предоставили, работает ¯ \ _ (ツ) _ / ¯

Возможно, проблема в том, что вызывает stopInterval()

Но, как упоминалось вкомментарии / другие ответы, вам может быть лучше использовать другой метод

Я бы не рекомендовал использовать setTimeout в вашем случае, потому что похоже, что вы просто ожидаете загрузки некоторых элементов DOM. Проблема с тайм-аутом заключается в том, что вы не можете точно знать, насколько быстро работает компьютер, на котором будет выполняться ваш код. Возможно, телефон плохого качества с устаревшим программным обеспечением, которому потребуется больше времени для запуска вашего кода, чем при тестировании на вашем персональном компьютере, и в котором не будет загружено элементов к моменту выполнения вашей функции.

jQuery

По этой причине, и поскольку вы пометили свой вопрос с помощью jQuery, я думаю, вы могли бы использовать $(elementYouWaitForTheDOM2beLoaded).ready(function2execute) для каждого просматриваемого элемента вместо того, чтобы иметь цикл, ожидающий загрузки элементов. ( документация для "готовой" функции)

Vanilla JS

И если вы хотите сделать это в чистом JS, это будет document.querySelector(elementYouWaitForTheDOM2beLoaded).on('load', function2execute))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...