2010-05-23 3 views
0

У меня есть этот код, который отлично перетаскивает вещи в IE, однако в firefox перетаскивание объекта на объект не сразу перетаскивается, но показывает курсор без ввода, а затем после onmouseup объект свободно перемещается. Объект прекращает рисовать на следующем onmouseup. Объект должен перемещаться только в режиме onmousdown, а вызов onmousup должен отменить перетаскивание, сделав j_OK = 0. Я думаю, что это может иметь что-то делать с изображением внутри ...Проблема с задержкой перетаскивания объекта

объект:

<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

код выглядит как он вышел из obfuscater ... Кстати, это хороший код практике придерживаться знак конца-заявления с запятой, даже если JavaScript не требует его [ это делает ваш код более понятным.] ... Кроме того, при определении атрибута элемента html в коде придерживайте кавычки вокруг него, чтобы поддерживать читаемость> _ < – Warty

+0

j_y и j_x никогда не определены в вашем коде? BTW, P_MV заставляет меня думать о p = mv ... [momentum] – Warty

+0

@ItzWarty: добавление точек с запятой не только делает ваш код более чистым, но и предотвращает переполнение кода при его уменьшении. – Robusto

ответ

0

Вы не можете просто беспечно использовать clientX и clientY. Эти свойства работают по-разному между IE и другими браузерами. Как quirksMode says, есть больше, чтобы сделать только для того, чтобы получить правильное местоположение. Вот его решение:

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

, это отвечает на вопрос о cleint XY, но не на вопрос ... даже при вставленном коде проблема остается. –

Смежные вопросы