Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 06 December 2011 12:28

Jean-Marie64
Participant actif
Lieu: Pau
Date d'inscription: 6 Nov 2007
Messages: 131

[OpenLayers] capturer l'événement fin de changement de taille fenêtre

Bonjour

je fais un affichage plein écran et je constate le problème suivant :
au fur et à mesure que la taille de la fenêtre est modifiée en étirant
par exemple celle-ci à la souris, une rafale de requêtes wms
est envoyée ; je souhaiterais déclencher la requête wms uniquement
sur réception de l'événement fin de modification de la taille de la fenêtre

j'ai essayé de partir du code javascript suivant :

Code:

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

    $(window).bind('resizeEnd', function() {
            //do something, window hasn't changed size in 500ms
            console.log("end of resize")
    });

au niveau javascript ces événements sont bien interceptés ;
par contre je n'arrive toujours pas à les intercepter au niveau d'OpenLayers

quelqu'un a-t'il une solution ?

merci d'avance

Jean-Marie

Hors ligne

 

#2 Tue 06 December 2011 13:39

simon_g
Participant assidu
Lieu: Paris
Date d'inscription: 4 Oct 2006
Messages: 195
Site web

Re: [OpenLayers] capturer l'événement fin de changement de taille fenêtre

Tu devrais jeter un oeil du côté de l'event Listener moveend :

http://les-ejk.cz/skoleni/hslayers-pres … vents.html

Ce lien peut éventuellement t'être également utile.

edit : et ici une page d'exemple http://dev.openlayers.org/releases/Open … vents.html

Dernière modification par simon_g (Tue 06 December 2011 13:42)

Hors ligne

 

#3 Wed 07 December 2011 18:02

Jean-Marie64
Participant actif
Lieu: Pau
Date d'inscription: 6 Nov 2007
Messages: 131

Re: [OpenLayers] capturer l'événement fin de changement de taille fenêtre

merci pour le lien mais "movend" correspondant à l'événement fin de déplacement de la carte à la souris ;
il ne correspond pas à l'événement fin de changement de taille de la fenêtre
"zoomend" me servira pour un zoom rapide réalisé à la molette

je continue mes recherches

JM

Hors ligne

 

#4 Tue 13 December 2011 16:07

badenski
Juste Inscrit !
Date d'inscription: 13 Dec 2011
Messages: 1

Re: [OpenLayers] capturer l'événement fin de changement de taille fenêtre

Pour un problème similaire, j'ai fait ceci :

Une nouvelle classe qui hérite de WMS dans laquelle je redéfinis les méthodes onMapResize() et moveTo(), j'ajoute aussi une variable timerId.
En gros, j'utilise onMapResize qui est appelé par la map à chaque redimensionnement et je place dans une file d'attente la fonction de mise à jour de mon layer au lieu d'un appel direct grace à la fonction javascript  setTimeout().

vu qu'on redimensionne de plusieurs pixels (redimensionnement de fenêtre), je vire le dernier chargement de la file d'attente pour en mettre un nouveau de manière à limiter les mises à jour de mon layer.

dernier point, la méthode moveTo est modifiée pour supporter ce nouveau mécanisme.

dans la première méthode (onMapResize), voici ce que je fais :

Code:

onMapResize: function() {
        if(this.timerId !== false){
            window.clearTimeout(this.timerId);
        }
this.timerId = window.setTimeout('OpenLayers.Layer.HTTPRequest.prototype.moveTo.apply', 1000, this, arguments);
    },

dans la seconde (moveTo) :

Code:

moveTo:function(bounds, zoomChanged, dragging) {
        if(this.timerId === false){
            this.timerId = window.setTimeout('OpenLayers.Layer.HTTPRequest.prototype.moveTo.apply', 10, this, arguments);
        }      
        ...
        // le reste est identique à la méthode parente de Grid.js

si ça peut t'aider

Hors ligne

 

Pied de page des forums

Powered by FluxBB