Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Drag&Drop объекта (https://javascript.ru/forum/jquery/9682-drag-drop-obekta.html)

JsLoveR 31.05.2010 19:42

Drag&Drop объекта
 
Всем привет!
Есть небольшая проблемка перетаскивания объекта в мозилле.
Мозилла воспринимает div, который перетаскивается, как картинку, чтоли и из-за этого див прилипает к курсору, посмотрите сами, плз. В то время как другие браузеры исполняют скрипт как надо. До этого драгом и дропом не интересовался.
var changePosition=null,offX=null,offY=null;
function elemPhysics()
{
	this.move=function a(id,event)
	{
		if(changePosition)
		{
			changePosition=document.getElementById(id);
			var x=event.clientX-offX;
			var y=event.clientY-offY;
			changePosition.style.left=x+"px";
			changePosition.style.top=y+"px";
		}
	}
	this.release=function b()
	{
		changePosition=null;
	}
	this.capture=function c(event)
	{
		offX=event.offsetX || event.layerX;
		offY=event.offsetY || event.layerY;
		if(!changePosition)
		{
			changePosition=document.getElementById("el");
			
		}
	}
}
var element=new elemPhysics();

<body onmousemove="element.move('el',event)">
<div  onmouseup="element.release()" onmousedown="element.capture(event)"  id="el" style="width:300px; height:200px; position:absolute; border:1px solid #000000; background-color:#996600;" ></div>
</body>

JsLoveR 31.05.2010 20:14

Ой, не в той теме тему создал)

JsLoveR 16.06.2010 17:27

Нашёл в инете
//// отключаем обработку событий по умолчанию, связанных с перемещением блока (это убирает глюки с выделением текста в других HTML-блоках, когда мы перемещаем объект)
if( e.preventDefault ) e.preventDefault(); 
    else e.returnValue = false;

исправленный вариант:
var changePosition=null,offX=null,offY=null;
function elemPhysics()
{
    this.move=function a(id,e)
    {
	e = e || window.event;
	if( e.preventDefault ) e.preventDefault(); 
    else e.returnValue = false;
        if(changePosition)
        {
            changePosition=document.getElementById(id);
            var x=e.clientX-offX;
            var y=e.clientY-offY;
            changePosition.style.left=x+"px";
            changePosition.style.top=y+"px";
        }
    }
    this.release=function b()
    {
        changePosition=null;
    }
    this.capture=function c(e)
    {
	e = e || window.event;
	if( e.preventDefault ) e.preventDefault(); 
    else e.returnValue = false;
        offX=e.offsetX || e.layerX;
        offY=e.offsetY || e.layerY;
        if(!changePosition)
        {
            changePosition=document.getElementById("el");
             
        }
    }
}
var element=new elemPhysics();


Часовой пояс GMT +3, время: 02:02.