Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как отловить событие onmouseup (https://javascript.ru/forum/events/74385-kak-otlovit-sobytie-onmouseup.html)

Passazhir 06.07.2018 06:48

Как отловить событие onmouseup
 
Всем привет!
Мне нужно отследить последовательность действий мыши, которые были сделаны над элементом при его перемещении. Сценарий действий пользователя такой: нажали кнопку мыши над элементом – протащили его в сторону – отпустили.
Пробую получить нужный результат вот с таким кодом:
var myElement = document.getElementById("myElement");

myElement.onmousedown = function(event) {
  console.log("нажали");
  myElement.onmousemove = function(event) {
    console.log("перемещаем");
  };
  myElement.onmouseup = function(event) {
    console.log("отпустили");
  };
};
Проблема в том, что событие «отпустили» не возникает.
Подскажите, пожалуйста, что сделал неправильно и как сделать, чтобы отпускание мыши тоже отрабатывало?

j0hnik 06.07.2018 07:24

myElement.addEventListener('mousedown', function(event) {
  console.log("нажали");
  myElement.addEventListener('mousemove', function(event) {
    console.log("перемещаем");
  });
  myElement.addEventListener('mouseup', function(event) {
    console.log("отпустили");
  });
});


так попробуйте

ksa 06.07.2018 10:03

Цитата:

Сообщение от Passazhir
Подскажите, пожалуйста, что сделал неправильно и как сделать, чтобы отпускание мыши тоже отрабатывало?

Вот целая статья на эту тему... ;)
https://javascript.ru/ui/draganddrop

j0hnik 06.07.2018 12:32

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style>
		div{
			display: block;
			position: absolute;
		}
	</style>
</head>
<body>
<div>1ddddddddddddddddddd</div>
<div>1ddddddddddddddddddd</div>
	<script>

[].forEach.call(document.querySelectorAll('div'), function(el){
	el.onmousedown = function(e) {
		console.log("нажали");
		var a = [e.pageX - el.getBoundingClientRect().left, e.pageY - el.getBoundingClientRect().top];
		document.onmousemove = e => {
			console.log("перемещаем");
			el.style.cssText  = 'left:'+(e.pageX-a[0])+'px; top:'+(e.pageY-a[1])+'px'
		};
		el.onmouseup = function() {
			console.log("отпустили");
			document.onmousemove = null;
			el.onmouseup = null;
		};
	};
	el.ondragstart = e => false;
});

	</script>
</body>
</html>

Passazhir 07.07.2018 10:21

Всем спасибо, дело было в отсутствии
document.ondragstart = function () {
  return false;
};


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