2010-05-23 6 views
0

J'ai ce code qui entraîne parfaitement les choses dans IE - cependant, dans firefox, le glissement onmousedown de l'objet ne traîne pas immédiatement mais montre le curseur de non-entrée et ensuite, après onmouseup, l'objet se déplace librement. L'objet arrête de drager sur le prochain surmouseup. L'objet doit uniquement glisser dans l'état onmousdown, tandis que l'appel onmousup doit annuler le glisser en faisant j_OK = 0. Je pense qu'il peut avoir quelque chose à voir avec l'image à l'intérieur ...Problème de délai de glissement d'objet

l'objet:

<em style=position:absolute;left:0;top:0;width:32;height:32;display:block> 
< img src=abc.gif onmousedown=P_MV(this.parentNode) style=position:absolute;left:0;top:0;width:inherit> 
</em> 



    function P_MV(t) 
{ 
p_E=t 
j_oy=parseInt(p_E.style.top) 
j_ox=parseInt(p_E.style.left) 
j_OK=1 
document.onselectstart=function(){return false} 
document.onmousemove=P_MVy 
} 

function P_MVy(e) 
{ 
if(j_OK) 
{ 
    p_E.style.top=(j_FF?e.clientY:event.clientY)-j_y+j_oy 
    p_E.style.left=(j_FF?e.clientX:event.clientX)-j_x+j_ox 
} 
return false 
} 
+0

Le code ressemble il est sorti d'un obfuscater ... Par ailleurs, il est une bonne pratique de code pour coller une fin de déclaration virgule, même si JavaScript ne nécessite pas [ cela rend votre code plus clair] ... De plus, lorsque vous définissez un attribut d'un élément html dans le code, placez un guillemet autour de celui-ci pour maintenir la lisibilité> _ < – Warty

+0

j_y et j_x ne sont jamais définis dans votre code? BTW, P_MV me fait penser à p = mv ... [momentum] – Warty

+0

@ItzWarty: Non seulement l'ajout de points-virgules rend votre code plus propre, mais il empêche le code de se foirer lorsqu'il est minifié. – Robusto

Répondre

0

Vous ne pouvez pas utiliser allègrement clientX et clientY. Ces propriétés fonctionnent différemment entre IE et les autres navigateurs. Comme quirksMode says, il y a plus à faire juste pour obtenir l'emplacement correct. Voici sa solution:

function doSomething(e) { 
    var posx = 0; 
    var posy = 0; 
    if (!e) var e = window.event; 
    if (e.pageX || e.pageY)  { 
     posx = e.pageX; 
     posy = e.pageY; 
    } 
    else if (e.clientX || e.clientY) { 
     posx = e.clientX + document.body.scrollLeft 
      + document.documentElement.scrollLeft; 
     posy = e.clientY + document.body.scrollTop 
      + document.documentElement.scrollTop; 
    } 
    // posx and posy contain the mouse position relative to the document 
    // Do something with this information 
} 
+0

cela répond à la question de Xint mais pas la question posée ... même avec ce code inséré le problème reste. –

Questions connexes