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

Printemps des cartes 2024

#1 Wed 06 January 2016 12:26

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

[OpenLayers 2] Animation d'images

Bonjour

j'affiche sur une carte une succession d'images météo à intervalles réguliers pour produire une animation.
le problème que je rencontre (particulièrement sur Chrome et IE et beaucoup moins sur FireFox) est un effet de transition (ou flash)
lors du passage d'une image à la suivante :
l'image ancienne disparaît mais n'est pas tout de suite remplacée par la nouvelle

voir les 2 gifs animés ci-joint pour illustrer le problème :
le fichier animation_avec_transition_PB.gif ci-joint fait bien ressortir la transition
le résultat attendu est illustré par le  fichier animation_sans_transition.gif

j'utilise la méthode sertUrl sur un layer de type OpenLayers.Layer.Image (OL Release 2.14 dev)

ma question est comment faire disparaître cet effet de transition

merci d'avance

Jean-Marie

Dernière modification par Jean-Marie64 (Wed 06 January 2016 12:27)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Thu 14 January 2016 10:58

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

Re: [OpenLayers 2] Animation d'images

une méthode pour s'en sortir est d'utiliser le mécanisme de buffer d'image de la manière suivante

Code:

for (var i=0;i<numlayertodisplay0;i++) {
  urli=.....; // nouvelle url
  this.layer.url=urli;
  this.layer.tile.url=urli;
  this.layer.tile.events.register('loadend',layer.tile.tile,removePreviousImage);
  this.layer.tile.[b]createBackBuffer()[/b];
  this.layer.tile.draw();
...
}

// effacement de l'image précédente uniquement lorsque la nouvelle image a été récupérée ce qui évite cet effet de flash 
function removePreviousImage () {
  if (this.layer.div.children[1]!=undefined) {
    this.layer.div.children[1].style.visibility="inherit";
    this.layer.div.removeChild(this.layer.div.firstChild); 
  }    
}

JM

Hors ligne

 

Pied de page des forums

Powered by FluxBB