2014-09-19 4 views
2

Я пытаюсь написать функцию JavaScript/jQuery, которую я могу использовать для вызова других функций, или установить CSS/LESS на основе того, изменяет ли пользователь окно за пределами пороговых значений точки останова или если они поворачивают устройство от пейзажа к портрету.Как использовать JavaScript OnResize с задержкой или менее интенсивной обработкой

В настоящее время я использую следующие:

$(window).on('resize', function() { 
// IF/Switch Case statement, check current width of window is > mobile, or tablet, or desktop 
    // Do stuff depending on which size the window is at currently. 
// End if/Switch case. 
} 

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

Вместо этого есть способ просто запустить смену точек останова или, может быть, даже запустить onResize каждые 1 или 2 секунды, или как только пользователь перестанет перетаскивать окно, может быть?

Таким образом, интенсивность обработки будет значительно меньше.

P.s. когда я говорю точки останова, я имею в виду, что у меня есть настройки ширины для Mobile, BigMobile, Tablet, Retina Displays, Tablet.

Но просто мобильный, планшетный, рабочий стол также может стать компромиссом.

Как определить изменения точки останова, не вызывая интенсивной обработки onResize. Любые подсказки в каком направлении идти с этим?

+0

Изменить размер после перетаскивания http://stackoverflow.com/questions/2854407/javascript-jquery-window-resize-how-to-fire-after-the-resize-is-completed и/или использовать запрос CSS-мультимедиа для точки останова http://stackoverflow.com/questions/6370690/media-queries-how-to-target-desktop-tablet-and-mobile – Spokey

+0

В зависимости от используемой библиотеки может быть дроссель() или debounce (), которая сделает игру этого ребенка. – wwwmarty

+0

спасибо, spokey и marty, я посмотрю на эти темы и функции – redfox05

ответ

3

Используйте setTimeout и clearTimeout.

var t = null; 

window.onResize(function() { 
    if (t!= null) clearTimeout(t); 

    t = setTimeout(function() { 
     ... 
    }, 500); 
}} 

Во время перетаскивания всегда очищается, и ничего не происходит. Но когда пользователь перестает перетаскивать, он запускает последний setTimeout и будет выполнять ваш код.

+0

интересно, все еще пытаюсь понять, как это работает, но я дам ему некоторое время, чтобы потопить в – redfox05

+0

В основном, когда вы перетаскиваете окно, создается объект тайм-аута. Но когда вы продолжаете перетаскивать окно, событие снова запускается и очищает тайм-аут, созданный ранее, и создает новый, поэтому ничего не вызывается (создается, уничтожается, создается, уничтожается ...), но когда вы заканчиваете перетаскивание, тайм-аут снова не очищается, и он срабатывает. –

+0

ahh, я думаю, что сейчас у меня нет. Вы могли бы рассказать мне, как это сравнивается с двумя решениями, приведенными в ссылке Spokey (http://stackoverflow.com/questions/2854407/javascript-jquery-window-resize-how-to-fire-after-the -resize-is-complete), в частности ответы от CMS и брэна. Не совсем уверен, что лучше – redfox05