2013-09-30 16 views
0

Он вызывается повторно только тогда, когда вы берете левую/правую границу браузера и начинаете движение, поэтому он очень быстро удаляет и вставляет #video, что делает его действительно раздражающим.Событие Resize вызывается несколько раз

Есть ли способ вызвать последовательность «удалить-вставить», только если достигнут предел ширины?

if($(window).width() <= 820) { 
    $("#video").remove().insertBefore("#slideshow"); 
} 

if($(window).width() >= 820) { 
    $("#video").remove().insertAfter("#slideshow"); 
} 
+3

Если это вообще возможно, я бы изучить CSS/медиа-запросов подход к этому, прежде чем прибегать к JS. Удаление и повторное включение элементов DOM в ответ на изменения размеров, хотя, возможно, иногда требуется в качестве последнего средства, является неэлегантным. – Utkanos

+1

Почему бы вам не использовать правильный медиа-запрос? Если это не так, сохраните ширину предыдущей итерации и только огонь, если вы перешли порог. – ceejayoz

+4

, если вы перемещаете видео, нет необходимости его удалять, просто переместите его. –

ответ

1

Keep след предыдущей позиции данного видео:

var wasAfter = true; // Or wherever it starts 

function moveVideo() { 
    var width = $(window).width(); 
    var video = $('#video'); 
    var slideshow = $('#slideshow'); 

    if(width < 820) { 
     if(wasAfter) { 
      video.insertBefore(slideshow); 
      wasAfter = false; 
     } 
    } else if(!wasAfter) { 
     video.insertAfter(slideshow); 
     wasAfter = true; 
    } 
} 
Смежные вопросы