Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.10.2015, 23:32
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

drag&drop при перекрывающихся блоках
Доброго времени суток, помогите пожалуйста решить проблему. На сереньком блоке висит функция перетаскивания блока. В нем находится другой блок - зелененький, на него повешены другие события мышки. Как сделать так чтобы серый блок нельзя было перетаскивать при нажатии на зеленый блок? Событие все равно почему-то срабатывает.
И второй вопрос. После того как перетащил куда-нибудь серый блок, в консоле штампуются ошибки: "mousePageXY is not defined". Как это исправить?
<div id='gray' style=" position:absolute; border:1px solid blue; background-color: #C0C0C0; width:100px; height:100px; cursor:pointer" >
  <div style="border:1px solid red; background-color:#33FF66; width:40px; height:40px" id="green"></div>
</div>
<script>
document.getElementById('gray').onmousedown = function(event){drag_object(event, this)}
function drag_object( evt, obj ){
	evt = evt || window.event;
	obj.clicked = true;		
	obj.mousePosX = evt.clientX;
	obj.mousePosY = evt.clientY;
	if( evt.preventDefault ) evt.preventDefault(); 
	else evt.returnValue = false;
	
	document.onmouseup = function(){ obj.clicked = false;document.onmousemove = function(e){mousePageXY(e)} }
	document.onmousemove = function( evt )
	{
		evt = evt || window.event;
		if( obj.clicked )
		{
			posLeft = !obj.style.left ? obj.offsetLeft : parseInt( obj.style.left );
			posTop = !obj.style.top ? obj.offsetTop : parseInt( obj.style.top );

			mousePosX = evt.clientX;
			mousePosY = evt.clientY;

			obj.style.left = posLeft + mousePosX - obj.mousePosX + 'px';
			obj.style.top = posTop + mousePosY - obj.mousePosY + 'px';
			
			obj.mousePosX = mousePosX;
			obj.mousePosY = mousePosY;
		}
	}
}

	function setcookie( name, value, timeout )
	{
	    timeout = timeout || 1000*60*60*24;
	    expires = (new Date((new Date).getTime() + timeout)).toUTCString();
	    document.cookie = name + '=' + value + ';expires=' + expires;
	}
</script>

Последний раз редактировалось фонарик, 13.10.2015 в 23:34.
Ответить с цитированием
  #2 (permalink)  
Старый 14.10.2015, 02:11
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

Сообщение от фонарик
Как сделать так чтобы серый блок нельзя было перетаскивать при нажатии на зеленый блок?
Замени:
Сообщение от фонарик
document.getElementById('gray').onmousedown = function(event){drag_object(event, this)}
На:
document.getElementById('gray').onmousedown = function(event){
      if (event.target.id != 'gray') return;
      drag_object(event, event.target);
};

Последний раз редактировалось Decode, 14.10.2015 в 02:26.
Ответить с цитированием
  #3 (permalink)  
Старый 14.10.2015, 02:12
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

Сообщение от фонарик
И второй вопрос. После того как перетащил куда-нибудь серый блок, в консоле штампуются ошибки: "mousePageXY is not defined". Как это исправить?
document.onmouseup = function(){ 
   obj.clicked = false;
   document.onmousemove = function(e){
       mousePageXY(e)
   };
};

Вот тут вызывается эта функция, но в приведенном тобой коде нет определения функции mousePageXY.
Ответить с цитированием
  #4 (permalink)  
Старый 14.10.2015, 17:29
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

Сообщение от Decode Посмотреть сообщение
Вот тут вызывается эта функция, но в приведенном тобой коде нет определения функции mousePageXY.
Действительно нет, ее и у меня нет )) Просто удалил строку. Функцию перетаскивания я нашел в интернете, наверно забыли убрать это из кода
Decode,
Спасибо вам, все работает теперь как надо
Ответить с цитированием
  #5 (permalink)  
Старый 14.10.2015, 17:56
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

<div id='gray' onmousedown = function(event){drag_object(event, this)} style=" position:absolute; border:1px solid blue; background-color: #C0C0C0; width:100px; height:100px; cursor:pointer" >
  <div style="border:1px solid red; background-color:#33FF66; width:40px; height:40px" id="green"></div>
</div>
<script>
//document.getElementById('gray').onmousedown = function(event){drag_object(event, this)}
function drag_object( evt, obj ){
	evt = evt || window.event;
	obj.clicked = true;		
	obj.mousePosX = evt.clientX;
	obj.mousePosY = evt.clientY;
	if( evt.preventDefault ) evt.preventDefault(); 
	else evt.returnValue = false;
	
	document.onmouseup = function(){ obj.clicked = false;}
	document.onmousemove = function( evt )
	{
		evt = evt || window.event;
		if( obj.clicked )
		{
			posLeft = !obj.style.left ? obj.offsetLeft : parseInt( obj.style.left );
			posTop = !obj.style.top ? obj.offsetTop : parseInt( obj.style.top );

			mousePosX = evt.clientX;
			mousePosY = evt.clientY;

			obj.style.left = posLeft + mousePosX - obj.mousePosX + 'px';
			obj.style.top = posTop + mousePosY - obj.mousePosY + 'px';
			
			obj.mousePosX = mousePosX;
			obj.mousePosY = mousePosY;
		}
	}
}

	function setcookie( name, value, timeout )
	{
	    timeout = timeout || 1000*60*60*24;
	    expires = (new Date((new Date).getTime() + timeout)).toUTCString();
	    document.cookie = name + '=' + value + ';expires=' + expires;
	}
</script>
Если 5ю строку, что вешает функцию, перенести в сам див блок, то не получается ее прилепить к блоку Как не пробовал, не работает Подскажите пожалуйста, как надо ?
Ответить с цитированием
  #6 (permalink)  
Старый 14.10.2015, 18:09
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

фонарик,
onmousedown="if (event.target.id != 'gray') return; drag_object(event, event.target);
Ответить с цитированием
  #7 (permalink)  
Старый 14.10.2015, 18:13
Кандидат Javascript-наук
Отправить личное сообщение для фонарик Посмотреть профиль Найти все сообщения от фонарик
 
Регистрация: 23.02.2013
Сообщений: 127

Decode, все работает, спасибо.
<div id='gray' onmousedown="if (event.target.id != 'gray') return; drag_object(event, event.target)"; style=" position:absolute; border:1px solid blue; background-color: #C0C0C0; width:100px; height:100px; cursor:pointer" >
  <div style="border:1px solid red; background-color:#33FF66; width:40px; height:40px" id="green"></div>
</div>
<script>
//document.getElementById('gray').onmousedown = function(event){drag_object(event, this)}
function drag_object( evt, obj ){
	evt = evt || window.event;
	obj.clicked = true;		
	obj.mousePosX = evt.clientX;
	obj.mousePosY = evt.clientY;
	if( evt.preventDefault ) evt.preventDefault(); 
	else evt.returnValue = false;
	
	document.onmouseup = function(){ obj.clicked = false;}
	document.onmousemove = function( evt )
	{
		evt = evt || window.event;
		if( obj.clicked )
		{
			posLeft = !obj.style.left ? obj.offsetLeft : parseInt( obj.style.left );
			posTop = !obj.style.top ? obj.offsetTop : parseInt( obj.style.top );

			mousePosX = evt.clientX;
			mousePosY = evt.clientY;

			obj.style.left = posLeft + mousePosX - obj.mousePosX + 'px';
			obj.style.top = posTop + mousePosY - obj.mousePosY + 'px';
			
			obj.mousePosX = mousePosX;
			obj.mousePosY = mousePosY;
		}
	}
}

	function setcookie( name, value, timeout )
	{
	    timeout = timeout || 1000*60*60*24;
	    expires = (new Date((new Date).getTime() + timeout)).toUTCString();
	    document.cookie = name + '=' + value + ';expires=' + expires;
	}
</script>

Последний раз редактировалось фонарик, 14.10.2015 в 18:18.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как восстановить инфу из sessionStorage при выполнении определенных условий? ligisayan jQuery 1 26.06.2015 09:34
Смена класса у отдельного div при нажатии на ссылку Maxim-Ra Элементы интерфейса 6 15.02.2015 12:20
Изменение прозрачности при клике AJIUK jQuery 8 09.03.2014 16:00
при нажатии на раздел меню поворачивается маркер Сергей545 Элементы интерфейса 5 08.12.2013 22:15
Теряется event при перемещении объекта (Drag&Drop) seagor Events/DOM/Window 16 25.07.2007 01:28