2010-02-02 3 views
1

J'ai essayé de lisser les performances d'une application de carte que j'ai construit en utilisant javascript. J'ai d'abord mis en place un glisser moule en utilisantIE lissage d'un plateau de carte lors du glissement

  • onmousedown
  • onmousemove
  • onmouseup

Cependant, dans IE il se sent vraiment lent et il semble que lorsque vous déplacez le curseur vraiment rapide la carte n » t le mettre à jour jusqu'à ce que vous arrêtiez de bouger.

Je converti mon code pour utiliser les événements IE natifs

  • ondragstart
  • ondrag
  • ondragend

La performance était beaucoup mieux lors de l'utilisation de ces événements, mais il semble que je peux Ne placez pas le curseur de la souris en utilisant les propriétés css standard. Je ne peux que placer le curseur sur quelques uns prédéfinis ce qui n'est pas ce que je veux.

Ma question est. Comment puis-je lisser le glisser dans IE en utilisant le premier ensemble d'événements ou comment puis-je définir un curseur personnalisé en utilisant les événements natifs.

EDIT: Code échantillon

Le code est très très simple. Même lorsque je supprime la logique pour charger de nouvelles tuiles (c'est-à-dire que seul le conteneur est déplacé), cela reste maladroit. Ci-dessous la fonction panoramique:

// the "this" object refers to the div containing all the tile layers. 
function movemap(e) 
{ 
    e = e || window.event; 
    var dx = this.mouseX - e.clientX; 
    var dy = this.mouseY - e.clientY; 

    if (dx !== 0 || dy !== 0) { 
     this.style.left = parseInt(this.style.left) + dx + 'px'; 
     this.style.top = parseInt(this.style.top) + dy + 'px'; 
     this.mouseX = e.clientX; 
     this.mouseY = e.clientY; 
    } 
} 
+0

Exact duplicate: http://stackoverflow.com/questions/2181482/ie-ondrag-event-setting-mouse-cursor-to-no-drop – jvenema

+0

J'ai supprimé ma vieille question car je pense que celui-ci est un meilleure explication du problème. Merci. – Alex

Répondre

1

Il est difficile de dire vraiment, ce qui rend vos événements de déplacement pour un travail lent, sans exemples de code.

effet Sluggish peut être due à certaines opérations lourdes que vous exécutez dans l'exécution des événements. Le système d'événement dans le navigateur est vraiment intéressant. C'est synchrone. Ce qui signifie que l'événement ne sera plus déclenché tant que l'exécution en cours n'est pas terminée. Cela signifie que vous avez deux possibilités: 1. optimiser votre code à l'intérieur d'un événement, de sorte qu'il prenne moins de temps CPU ou 2. rendre votre événement asynchrone et implémenter votre propre logique mutex/sémaphore.

Le second que vous pouvez faire, en utilisant la fonctionnalité setTimeout. Si vous faites setTimeout, ((code), 1) votre événement continuera asynchrone, donc l'événement suivant sera distribué sans attendre que votre code soit complet. Eh bien, prenez à l'avance que dans ce cas, vous devez commencer à penser au verrouillage et à la mise en file d'attente. En mettant en file d'attente je veux dire, de mettre en file d'attente tous les événements envoyés pour une utilisation future.

Il y a très longtemps, j'ai aussi fait de la distribution d'événements asynchrones, à cause de l'exécution de code lourd. Cela a fonctionné pour moi. Peut-être que ça marchera pour toi aussi.

Questions connexes