Javascript-форум (https://javascript.ru/forum/)
-   Firefox/Mozilla (https://javascript.ru/forum/css-html-firefox-mizilla/)
-   -   В Firefox не работает передвижение оюъеката (https://javascript.ru/forum/css-html-firefox-mizilla/22701-v-firefox-ne-rabotaet-peredvizhenie-oyuekata.html)

shtopor 29.10.2011 16:52

В Firefox не работает передвижение оюъеката
 
Здравствуйте, помогите пожалуйста, нашел в сети такой вот код:
<div style="position:relative; width:450px; height:125px; cursor:pointer">
 
<img src="bear.jpg" style="position:absolute; left:15px; top:10px"
onmousedown="Move(this)">
 
<div style="position:absolute; left:190px; top:10px; width:170px; 
border: 1px solid; padding:5; text-align:left; background-color:white" 
onmousedown="Move(this)">
Этот компонент имеет постоянный размер.
</div>
 
<div style="position:absolute; left:380px; top:10px" onmousedown="Move(this)">
Этот компонент не имеет постоянный размер.
</div>
 
<script type="text/javascript">
var SelectedItem;
var SelectedX, SelectedY;
var MouseX, MouseY;
 
function Move(ClickedItem)
{
SelectedItem = ClickedItem;
SelectedX = SelectedItem.style.pixelLeft;
SelectedY = SelectedItem.style.pixelTop;
MouseX = event.clientX;
MouseY = event.clientY;
document.onmousemove = Drag;
document.onmouseup = Drop;
}
 
 
function Drag()
{
SelectedItem.style.left = SelectedX + (event.clientX - MouseX);
SelectedItem.style.top = SelectedY + (event.clientY - MouseY);
return false;
}
 
function Drop()
{
document.onmousemove = null;
document.onmouseup = null;
}
 
</script>

Но он не работает в FF, что делать?:help:

melky 29.10.2011 17:31

на этом сайте есть статья про drag'n'drop. можно взять код оттуда.

shtopor 29.10.2011 17:53

Я пробовал, там он длинный и неудобный, этот очень простой и красивый, но в FF не работает(

dmitriymar 29.10.2011 19:11

Цитата:

Сообщение от shtopor
Я пробовал, там он длинный и неудобный, этот очень простой и красивый, но в FF не работает(

чем?тем что всплытие не останавливает? тем что не отменяет действия браузера стандартные?....:D
Цитата:

Сообщение от shtopor
SelectedX = SelectedItem.style.pixelLeft;
SelectedY = SelectedItem.style.pixelTop;

pixelLeft,pixelTop-тяжело проверить теми же алертами есть ли такие свойства в фф?

shtopor 29.10.2011 19:37

Мне не очень понравился код в той статье

dmitriymar 29.10.2011 19:42

Цитата:

Сообщение от shtopor
Там код нарезан кривыми кусками, которые у меня просто не работают

странно...а может стоит ещё прочитать статью?;)
а по мне этот "красивый" кривее некуда

shtopor 29.10.2011 20:23

Ну вот код из статьи, почему он не работает:
var dragMaster = (function() {

	var dragObject
	var mouseOffset

	// получить сдвиг target относительно курсора мыши
	function getMouseOffset(target, e) {
		var docPos	= getPosition(target)
		return {x:e.pageX - docPos.x, y:e.pageY - docPos.y}
	}

	function mouseUp(){
		dragObject = null

		// очистить обработчики, т.к перенос закончен
		document.onmousemove = null
		document.onmouseup = null
		document.ondragstart = null
		document.body.onselectstart = null
	}

	function mouseMove(e){
		e = fixEvent(e)

		with(dragObject.style) {
			position = 'absolute'
			top = e.pageY - mouseOffset.y + 'px'
			left = e.pageX - mouseOffset.x + 'px'
		}
		return false
	}

	function mouseDown(e) {
		e = fixEvent(e)
		if (e.which!=1) return

		dragObject  = this

		// получить сдвиг элемента относительно курсора мыши
		mouseOffset = getMouseOffset(this, e)

		// эти обработчики отслеживают процесс и окончание переноса
		document.onmousemove = mouseMove
		document.onmouseup = mouseUp

		// отменить перенос и выделение текста при клике на тексте
		document.ondragstart = function() { return false }
		document.body.onselectstart = function() { return false }

		return false
	}

	return {
		makeDraggable: function(element){
			element.onmousedown = mouseDown
		}
	}

}())

function getPosition(e){
	var left = 0
	var top  = 0

	while (e.offsetParent){
		left += e.offsetLeft
		top  += e.offsetTop
		e	 = e.offsetParent
	}

	left += e.offsetLeft
	top  += e.offsetTop

	return {x:left, y:top}
}


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