409 votes

Comment déclencher l'événement de redimensionnement de la fenêtre en JavaScript ?

J'ai enregistré un déclencheur sur le redimensionnement de la fenêtre. Je veux savoir comment je peux déclencher l'appel de l'événement. Par exemple, lorsque je cache un div, je veux que ma fonction de déclenchement soit appelée.

J'ai trouvé window.resizeTo() peut déclencher la fonction, mais y a-t-il une autre solution ?

803voto

avetisk Points 1114
window.dispatchEvent(new Event('resize'));

12 votes

Semble fonctionner avec Chrome, FF, Safari, mais pas : IE !

16 votes

La méthode de jQuery trigger ne déclenche pas réellement l'événement "resize" natif. Il déclenche uniquement les écouteurs d'événements qui ont été ajoutés à l'aide de jQuery. Dans mon cas, une bibliothèque tierce écoutait directement l'événement "resize" natif et c'est la solution qui a fonctionné pour moi.

2 votes

Une solution simple et efficace. Cependant, je pense que vous devriez ajouter un peu de code pour la compatibilité avec IE (d'après ce que je vois, pour IE, il faut utiliser window.fireEvent )

478voto

Steve Fenton Points 55265

Dans la mesure du possible, je préfère appeler la fonction plutôt que de dispatcher un événement. Cela fonctionne bien si vous avez le contrôle du code que vous voulez exécuter, mais voyez ci-dessous les cas où vous ne possédez pas le code.

window.onresize = doALoadOfStuff;

function doALoadOfStuff() {
    //do a load of stuff
}

Dans cet exemple, vous pouvez appeler le doALoadOfStuff sans envoyer d'événement.

Dans vos navigateurs modernes, vous pouvez déclencher l'événement en utilisant :

window.dispatchEvent(new Event('resize'));

Cela ne fonctionne pas dans Internet Explorer, où vous devrez le faire à la main :

var resizeEvent = window.document.createEvent('UIEvents'); 
resizeEvent.initUIEvent('resize', true, false, window, 0); 
window.dispatchEvent(resizeEvent);

jQuery a le trigger méthode qui fonctionne comme suit :

$(window).trigger('resize');

Et a la mise en garde :

Bien que .trigger() simule l'activation d'un événement, avec un objet événement synthétisé, il ne reproduit pas parfaitement un événement naturel.

Vous pouvez également simuler des événements sur un élément spécifique...

function simulateClick(id) {
  var event = new MouseEvent('click', {
    'view': window,
    'bubbles': true,
    'cancelable': true
  });

  var elem = document.getElementById(id); 

  return elem.dispatchEvent(event);
}

6 votes

Votre fonction anonyme est inutile. window.onresize = doALoadOfStuff ; De plus, cela ne répond pas à la question, la réponse de pinouchon ci-dessous est la bonne.

44 votes

A Google r's : Jetez un coup d'œil à la réponse de @avetisk.

1 votes

C'est une bonne idée de découpler, mais dans mon/cette affaire, cela ne fonctionne pas. Le simple fait d'appeler la méthode de redimensionnement ne fonctionne pas, car si le redimensionnement de la fenêtre n'est pas déclenché, les autres div/conteneurs n'auront pas la bonne hauteur.

159voto

pinouchon Points 7706

Avec jQuery, vous pouvez essayer d'appeler déclencher :

$(window).trigger('resize');

3 votes

Un cas d'utilisation est celui d'un plugin jQuery qui utilise des événements de redimensionnement de la fenêtre pour être réactif, mais qui a une barre latérale qui se replie. Le conteneur du plugin est redimensionné, mais pas la fenêtre.

4 votes

Pas besoin de JQuery en effet, mais je préfère la solution JQuery car mon produit utilise largement JQuery.

0 votes

Où pourrait-on ajouter ceci pour redimensionner une page wordpress après son chargement ?

15voto

BBQ Singular Points 75

Je n'ai pas réussi à le faire fonctionner avec les solutions ci-dessus. Une fois que j'ai lié l'événement avec jQuery, cela a bien fonctionné comme ci-dessous :

$(window).bind('resize', function () {
    resizeElements();
}).trigger('resize');

0 votes

Cela fonctionne dans Chrome aujourd'hui.

-2voto

T.O. Points 11

window.resizeBy() déclenchera l'événement onresize de la fenêtre. Cela fonctionne à la fois dans Javascript o VBScript .

window.resizeBy(xDelta, yDelta) appelé comme window.resizeBy(-200, -200) pour réduire la page de 200px par 200px.

3 votes

Pourquoi le prix est-il réduit ? Est-il incorrect ? Cela dépend-il du navigateur ?

3 votes

Cela ne fonctionne pas dans tout navigateur : Chrome, Firefox, IE, Firefox testé.

1 votes

Firefox 7+, et probablement d'autres navigateurs modernes, ne permettent plus d'appeler cette méthode dans la plupart des cas. En outre, il n'est pas souhaitable de devoir redimensionner la fenêtre pour déclencher l'événement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X