И снова драг энд дроп :)
Есть код
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, время: 03:36. |