И снова драг энд дроп :)
Есть код
main.prototype.drag = function(data) { var drag = this.obj; drag.onmousedown = function(e) { var self = this; e = mj().getEvent(e); drag.style.position = 'absolute'; var coords = mj().getCoords(self); var shiftX = e.pageX - coords.left; var shiftY = e.pageY - coords.top; document.onmousemove = function(e) { if(data['move']) data['move'](); /////ПРОБЛЕМА ТУТ ////// drag.style.left = e.pageX - shiftX + 'px'; drag.style.top = e.pageY - shiftY + 'px'; }; }; drag.onmouseup = function() { drag.style.cursor = 'default'; document.onmousemove = document.onmousemove = document.onmouseup = document.ondragstart = document.body.onselectstart = null; }; drag.ondragstart = function() { return false; }; } Как видно в data передаётся функция, которая должна выполняться только во время того, когда элемент перетаскивают. Но чот не так с этой функцией, а именно то, что она выполняется во время обычного движения мыши, а не нажатия+движения. Не пойму что именно( Подскажите пожалуйста, как её исправить? |
drag.onmouseup -> document.onmouseup
|
nikita.mmf,
согласно статье на этом сайте, движение нужно отслеживать на объекте документа, а не объекте передвигаемого элемента, т.к. если быстро передвигать элемент, то элемент может не успевать передвигаться за мышью и "уйти" из под курсора. |
(Sandr),
а я говорю и не про onmousemove, я говорю про onmouseup |
nikita.mmf,
ой.. извиняюсь за невнимательность)) Сейчас попробую) |
nikita.mmf,
при document.onmouseup элемент движется с курсором после того, как я уже отпустил кнопку. Т.е. не подошло(( |
main.prototype.drag = function(data) { var drag = this.obj; drag.onmousedown = function(e) { var self = this; e = mj().getEvent(e); drag.style.position = 'absolute'; var coords = mj().getCoords(self); var shiftX = e.pageX - coords.left; var shiftY = e.pageY - coords.top; document.onmousemove = function(e) { if(data['move']) data['move'](); /////ПРОБЛЕМА ТУТ ////// drag.style.left = e.pageX - shiftX + 'px'; drag.style.top = e.pageY - shiftY + 'px'; }; document.onmouseup = function() { drag.style.cursor = 'default'; document.onmousemove = document.onmousemove = document.onmouseup = document.ondragstart = document.body.onselectstart = null; }; }; drag.ondragstart = function() { return false; }; } |
nikita.mmf,
спасибо, всё заработало) Но вот я так понял, что при тестировании драг&дроп не следует использовать алерты? Т.к. когда пытался сделать так: drag({ move: function() { alert(11); } }); То алерт выскакивал постоянно когда мышка сдвинется с места, даже когда кнопки отпущены. Причём даже в твоём варианте) а когда сделал так: drag({ move: function() { document.getElementById('block2').innerHTML = parseInt(document.getElementById('block2').innerHTML) + 1; } }); То всё заработало как часы. |
где-то прочел, что алерты нельзя для дебагга использоваться, они прерывают исполнение скрипта и вообще нарушают логику. используйте консоль хрома и console.info вместе с ней, мощнее средство, эта консоль.
|
tadjik1,
спасибо за совет) |
Часовой пояс GMT +3, время: 22:17. |