Я использую эту функцию для обнаружения mousedown()
и инициализации перетаскивания содержимого:
var mouseDown = false;
var prevCoords = { x: 0, y: 0 };
$("#mainDiv").mousedown(function() {
mouseDown = true;
}).mousemove(function(e) {
var currentScrollX = $('#mainDiv').scrollLeft();
var currentScrollY = $('#mainDiv').scrollTop();
if(mouseDown) {
$('#mainDiv').scrollLeft(currentScrollX + prevCoords.x - e.clientX)
$('#mainDiv').scrollTop(currentScrollY + prevCoords.y - e.clientY)
};
prevCoords.x = e.clientX;
prevCoords.y = e.clientY;
}).mouseup(function() {
mouseDown = false;
});
Но #mainDiv
содержит таблицы .foo
которые перетаскиваются сами. Как проверить, если mousedown()
произошло на таблице .foo
? В этом случае mouseDown
должен стать false
чтобы отменить перетаскивание контента. Я пробовал это, но это не сработало:
$("#mainDiv").mousedown(function() {
if($('.foo').mousedown()){
mouseDown = false;
}
else{
mouseDown = true;
}
Чтобы проверить, какой элемент вызвал событие, которое пузырился до #mainDiv
вы можете проверить target
события. Вы также можете сделать логику немного более аккуратной:
$("#mainDiv").mousedown(function(e) {
mousedown = !$(e.target).closest('.foo').length;
});
mousedown = !$(e.target).closest('.foo').length;
if($(event.target).closest('.foo').length) return;
и передатьevent
качестве аргумента обработчика, так что try:$("#mainDiv").mousedown(function(event) {if($(event.target).closest('.foo').length) return; //else not: following logic there...});