2012-07-23 4 views
1

Je possède ce fichier javascript ($ (« # document2 ») est un div)jQuery SVG créant une polyligne, firefox bug?

var lines=0; 

$(document).ready(function() {   
    $("#paper2").svg({ 
     onLoad: function() { 
      svg2 = $("#paper2").svg('get'); 
      root2= svg2.root(); 

      $("#paper2").mousedown(function(ev) { 
       lines++; 
       var polyline = svg2.polyline([[ev.pageX-1-this.offsetLeft , ev.pageY-this.offsetTop-1], [ev.pageX+1-this.offsetLeft , ev.pageY-this.offsetTop+1]], 
        {fill: 'none', stroke: 'black', strokeWidth: 3, 
        id: 'polyline'+lines}) 

       $("#paper2").mousemove(function(ev) { 
        var polyline= $('#polyline' + lines); 
        polyline.attr("points", polyline.attr("points")+ ' ' + (ev.pageX-this.offsetLeft)+','+(ev.pageY-this.offsetTop)); 
       }); 

       $("#paper2").mouseup(function(ev) { 
        var div= $("#paper2"); 
        div.unbind('mousemove'); 
        div.unbind('mouseup'); 
       }) 
      });    
     }, 
     settings: {} 
    }); 

}); 

Fondamentalement, quand je tiens la clé de la souris au-dessus de la div il commence à dessiner une polyligne qui suit la souris, ce qui permet un dessin de base. Cela fonctionne très bien sur Opera et Chrome mais sur firefox ça marche bien sur la première polyligne que je dessine, la seconde fois (relâchez la souris puis appuyez à nouveau) au lieu de dessiner ça fait comme si je traînais l'image qui est à l'intérieur de ma div suit ma souris) et l'événement mouse-up n'est pas appelé. Donc, une fois que je relâche le bouton de la souris pour la deuxième fois, il commence normalement à dessiner la polyligne mais le clic n'est pas abaissé, si je clique à nouveau, l'événement de souris se déclenche et il recommence à fonctionner normalement. Cela n'arrive que la deuxième fois que j'essaie de tracer une ligne, le premier, le troisième et tous les autres travaillent ensuite normalement. Tout le monde sait si je fais quelque chose de mal ou si c'est un bug firefox, si quelqu'un sait comment faire pour contourner le problème?

Répondre

1

Vous faites quelque chose de mal. Vous devez appeler ev.preventDefault() dans chaque gestionnaire d'événement.

+0

Cela a fait l'affaire, merci beaucoup! – Hoffmann