Почему событие onmouseup одного html-элемента не запускается во время перетаскивания?
Мне кажется, что весь учебник по html-перетаскиванию устанавливает события onmousedown и onmouseup для документа, а не для самого элемента, и, как я тестировал с помощью приведенных ниже кодов, при щелчке по элементу будут срабатывать как события onmousedown, так и onmouseup, но при попытке перетащить элемент в другое место событие onmouseup не запускается,
Я использую ниже коды, мой вопрос: почему onmouseup не запускается при перетаскивании? Я использую Firefox 8.0.1
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Border</title>
<style type="text/css">
body{
background-color: gray;
}
#page{
margin: 20px auto;
width:800px;
height:639px;
/*background-image: url("./img/board.jpg");*/
background-image: url("https://www.google.com/logos/2012/dickens-2012-HP.jpg");
background-repeat: no-repeat;
}
#target{
position: relative;
top: 10px;
left: 20px;
/*background-image: url("./img/target.jpg");*/
background-image: url("https://www.google.com/images/icons/product/chrome-48.png");
background-repeat: no-repeat;
width: 145px;
height:117px;
}
</style>
<script type="text/javascript">
function mylog(msg)
{
if(window.console && console.log){
console.log(msg);
}
}
window.onload = function(){
initdragdrop();
}
/*
todo: learn how to make a getObject()
function getObject(id){
var t = document.getElementById(id);
this.x = t.left;
this.y = t.top;
}
*/
function initdragdrop(){
var t = document.getElementById('target');
t.onmousedown = function(){
this.status = 'down';
mylog(this.status);
}
t.onmouseup = function(){
this.status = 'up';
mylog(this.status);
}
}
</script>
</head>
<body>
<div id="page">
<div id="target">
</div>
</div>
</body>
</html>
1 ответ
Мне кажется, это работает, когда я перемещаюсь вверх и вниз в пределах target
вот вам "jsfiddle" с вашим кодом и черной рамкой вокруг цели: http://jsfiddle.net/prsYk/
Однако, когда я нажимаю кнопку мыши и "перетаскиваю" свою мышь за пределы области цели, а затем поднимаю мышь - событие не запускается. Я бы сказал, что это связано с тем фактом, что мышь больше не находится в области цели, когда вы поднимаете мышь.
Эта скрипка: http://jsfiddle.net/V4HPw/ показывает, что оба события по-прежнему срабатывают, когда вы присоединяете события к document
объект, вы в настоящее время прикрепляете их к вашему t
цель, которая является элементом с черной рамкой.
Если вы реализуете фактическое перетаскивание, когда элемент меняет свое положение при перемещении мыши, то onmouseup
событие должно сработать, когда вы отпустите, потому что вы все еще находитесь в регионе цели.
Вместо того, чтобы заново изобретать колесо, возможно, библиотека Javascript могла бы помочь избавиться от боли, связанной с реализацией реальной функции перетаскивания:
Обе вышеперечисленные библиотеки также предоставят вам удобные методы для манипулирования элементами DOM и многое другое - как я заметил вашу заметку "todo", чтобы узнать о "получении элементов".
Надеюсь, это поможет!