Проверьте ширину браузера и событие срабатывания только один раз

#javascript #function #browser #resize #window-resize

Вопрос:

  • Я хочу проверить ширину своего браузера/окна, если она ниже 669 пикселей.
  • Когда он ниже 669px, я хочу запустить функцию только один раз.
  • Тем не менее, каждый раз, когда я изменяю размер своего браузера более чем на 669 пикселей, функция why продолжает срабатывать при каждом изменении размера.

Как я могу запустить событие только один раз, как только пользователь наберет меньше 669px?

Вот код, с которым я работаю:

 const checkWindowWdith = () => {
    console.log(document.documentElement.clientWidth);
    if (document.documentElement.clientWidth < 669) {
        //DO SOMETHING HERE
    };
};


//HERE I AM WAIT FOR THE USER TO FINISH RESIZING
var doit;
window.onresize = function(){
    clearTimeout(doit);
    doit = setTimeout(checkWindowWdith, 100);
};
 

Комментарии:

1. В зависимости от вашего кода вы можете просто добавить window.onresize = null //DO SOMETHING HERE . Возможно, также потребуется снова отменить тайм-аут.

Ответ №1:

Я думаю, вам нужно создать var, для которого установлено значение false, если событие было запущено, и значение true, если он никогда не запускался подобным образом:

 var firstStartEvent = true

const checkWindowWdith = () => {
    console.log(document.documentElement.clientWidth);
    if (document.documentElement.clientWidth < 669) {
        firstStartEvent = false;
        //DO SOMETHING HERE
    };
};


//HERE I AM WAIT FOR THE USER TO FINISH RESIZING
var doit;
window.onresize = function(){
    clearTimeout(doit);
    if (firstStartEvent) {
      doit = setTimeout(checkWindowWdith, 100);
    }
}; 

Комментарии:

1. Вау, это сработало идеально. Большое тебе спасибо, Лукас! Хорошая простая и чистая идея. Я буду использовать это снова в будущем 🙂