За последние 24 часа нас посетили 17455 программистов и 1627 роботов. Сейчас ищут 1347 программистов ...

событие resize

Тема в разделе "JavaScript и AJAX", создана пользователем AlexsaiL, 5 мар 2018.

  1. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    Как сделать чтобы событие resize отработало один раз при изменении ширины экрана, т.е. при ширине < 768 вызываемая функция отработала один раз, если >768, то отрабатывала другая функция, но если снова пользователь изменял ширину меньше 768, то снова отрабатывала один раз вызываемая функция.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.861
    Симпатии:
    751
    Адрес:
    Татарстан
    ресайз будет отрабатывать КАЖДЫЙ раз при изменении размера окна
    - просто в ней ставьте условие и все
    Код (Javascript):
    1. $(window).on('resize', function(e){
    2.   var w = $(window).width();
    3.   if(w >768 ) {
    4.     console.log(">768");
    5.   } else {
    6.     console.log("<=768");
    7.   }
    8. }
     
  3. AlexsaiL

    AlexsaiL Активный пользователь

    С нами с:
    23 дек 2016
    Сообщения:
    327
    Симпатии:
    23
    Благодарю за помощь, нашел решение:
    Код (Javascript):
    1. $(window).resize(function(){
    2.         var breakPoint = '768';
    3.         var className = 'owl-carousel';
    4.         var elementClass = '.myClass';
    5.        if ($(this).width() < breakPoint) {
    6.             /* если ширина меньше 768, то добавляем
    7.                ко всем элементам, имеющим класс myClass
    8.                класс owl-carousel (если конечно у них их нет) */
    9.             $(elementClass).each(function(){
    10.                 if (!$(this).hasClass(className)) {
    11.                     $(this).addClass(className);
    12.                 }
    13.             });
    14.         } else {
    15.             /* если ширина больше или равно 768, то удаляем
    16.                у всех элементов, имеющих класс myClass
    17.                класс owl-carousel (если конечно у них он есть) */
    18.             $(elementClass).each(function(){
    19.                 if ($(this).hasClass(className)) {
    20.                     $(this).removeClass(className);
    21.                 }
    22.             });
    23.         }
    24.     });
    25.     $(window).resize();
    Вопрос закрыт)
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Если исходить из вами же поставленной задачи, то не нашли. Ключевая фраза:
    В вашем же решении, при каждом изменении ширины, каждый раз будет отрабатывать тот или иной сценарий. А не один раз при пересечении границы breakpoint. Если у вас не стоит цель замучить браузер, то лучше использовать метод matchMedia, своего рода Медиа-запросы в CSS. Смотрим примерчик.
    Код (Javascript):
    1. var mediaQuery = window.matchMedia("screen and (min-width: 768px)");
    2. mediaQuery.addListener(checkWinWidth);
    3. checkWinWidth(mediaQuery);
    4.  
    5. function checkWinWidth(mq) {
    6.   if (mq.matches) {
    7.       console.log('>768');
    8.   } else {
    9.       console.log('<=768');
    10.   }
    11. }