2010-06-08 16 views
117

Gibt es eine Möglichkeit, mit jQuery oder JavaScript eine Funktion auszulösen, wenn der Benutzer die Größe des Browserfensters ändert?Erkennen, wenn die Größe eines Fensters mit JavaScript geändert wird?

Mit anderen Worten:

  1. Kann ich erkennen Maus nach oben Ereignis, wenn der Benutzer das Browserfenster ist Ändern der Größe? Sonst:
  2. Kann ich erkennen, wenn eine Fenstergrößenänderung abgeschlossen ist?

Ich bin derzeit nur ein Ereignis auszulösen, wenn der Benutzer das Fenster mit jQuery, um die Größe zu starten

+3

Es gibt eine jQuery und nicht-jQuery Lösung hier: https://github.com/louisremi/jque ry-smartresize – bradt

+0

schöne Lösung für jquery-smartresize entprellt Ereignisse! – tetri

Antwort

223

Sie können .resize() verwenden jedes Mal die Breite/Höhe tatsächlich ändert, wie dies zu erhalten:

$(window).resize(function() { 
    //resize just happened, pixels changed 
}); 

You can view a working demo here, nimmt es die neuen Höhe/Breite Werte und aktualisiert sie auf der Seite für Sie zu sehen. Denken Sie daran, das Ereignis nicht wirklich Start oder Ende, es passiert einfach "passiert", wenn eine Größenänderung auftritt ... es gibt nichts zu sagen, ein anderes wird nicht passieren.


Edit: Nach Kommentaren es Sie wollen etwas wie ein „on-end“ Ereignis scheint, die Lösung, die Sie tut dies, die mit wenigen Ausnahmen (Sie können nicht zwischen einem Maus-up unterscheiden und eine Pause in einem Browser-übergreifenden Weg, das gleiche für eine Ende vs eine Pause). Sie können erstellen dieses Ereignis aber, um es ein bisschen sauberer, wie folgt aus:

$(window).resize(function() { 
    if(this.resizeTO) clearTimeout(this.resizeTO); 
    this.resizeTO = setTimeout(function() { 
     $(this).trigger('resizeEnd'); 
    }, 500); 
}); 

Sie könnte dies ist eine Basis-Datei irgendwo, was auch immer Sie tun wollen ... dann können Sie an, dass binden neue resizeEnd Ereignis Sie Triggern, wie folgt aus:

$(window).bind('resizeEnd', function() { 
    //do something, window hasn't changed size in 500ms 
}); 

You can see a working demo of this approach here

+1

Es hängt vom Browser ab, wann und wie viele Resize-Ereignisse ausgelöst werden: http://www.quirksmode.org/dom/events/resize.html –

+0

@chris_l: Ich bin nicht sicher, wie genau diese Seite ist .. .Öffnen Sie die Demo, die ich im neuesten Firefox veröffentlicht habe, es wird jedes Mal ausgelöst, wenn sich die Größe ändert. Ich habe keine Opera zum Testen, es kann immer noch anders sein, aber sie sind zumindest konsistenter als quirksmode, ich schicke ihnen eine Notiz, die aktualisiert werden muss. –

+0

@Nick: Ja, die quirksmode Seite deckt nur FF bis 3.1b2 - aber diese Art von Shows, dass es vom Browser abhängt ... –

Verwandte Themen