2011-06-19 2 views

Répondre

2
var resizeTimer; 

function nagOnResize() { 
    //pause for 1/4 of a second to see if the window stopped moving 
    clearTimeout(resizeTimer); 
    resizeTimer = setTimeout(doNagOnResize, 250); 
} 

function doNagOnResize() { 
    $(window).unbind('resize', nagOnResize); //pause the event 
    var h = $(window).height(), w = $(window).width(); 
    if(w < 300) { 
     alert("< 300px wide"); 
    } 
    $(window).resize(nagOnResize); //continue the event 
}; 

$(window).resize(nagOnResize); 

exemple en direct: http://jsfiddle.net/FWhgT/

+0

Le 'unbind' suggéré ici semble inutile ... Aussi - Ben Alman a un plugin [throttle/debounce] (http://benalman.com/news/2010/03/jquery-throttle-debounce-v11/) qui fait faire le "timeout" plutôt trivial. Vous pourriez vouloir vérifier, son super minuscule. – gnarf

+0

Le 'unbind()' est d'éviter de mettre en file d'attente plus d'événements pendant que le 'alert()' est visible, et le blocage. Sinon, vous pouvez en obtenir une série complète (inutilement) après avoir cliqué sur OK. En mettant l'événement en pause, vous n'en obtiendrez qu'un. – Ariel

1

Vous devriez faire quelque chose comme

var nagOnResize = function() { 
    var h = $(window).height(), w = $(window).width(); 
    // change the condition as needed 
    if(w < 300) { 
     // make it $("#nag").show(); if you want 
     alert("< 300px wide"); 
    } 
    // Recursive call. Not binding to $(window).resize as it's fired way too many times on some browsers 
    setTimeout(nagOnResize, 100); 
}; 

nagOnResize(); 

démo en direct: http://jsfiddle.net/ajVpG/1/ (Diminution largeur du navigateur pour rendre le résultat iframe < 300px)

+1

S'il vous plaît ne pas faites cela, vous appelez cette fonction 10 fois par seconde! Même lorsque la fenêtre n'est pas redimensionnée. Utilisez $ (window) .resize - c'est ce à quoi cela sert. Si vous pensez qu'il est appelé à beaucoup ajouter un retard, sinon votre guérison est pire que la maladie. Je vais poster une version éditée dans une nouvelle réponse. – Ariel

Questions connexes