Я предлагаю решение, основанное на сочетании [1] и решения, предоставленного PriorityMark.Это решение работает более надежно, и я думаю, что оно немного более эффективно.
$(".draggable").draggable({
start: function(event) {
var content = $(this).children('.content');
// if we're scrolling, don't start and cancel drag
if (event.originalEvent.pageX-content.offset().left > content.innerWidth())
{
console.log('should-cancel');
$(this).trigger("mouseup");
return false;
}
}
});
Чтобы это работало, я немного скорректировал пример DOM (но это не должно быть такой большой проблемой):
<div class="draggable" style="width:100px;height:100px;overflow:auto;">
<div class="content" style="width:80px;height:80px;">
Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula ut id elit.
</div>
</div>
Обратите внимание, что здесь перетаскиваемый div имеет переполнение , а не content div.Для решения это не имеет большого значения, но я не хотел добавлять дополнительный уровень div, так как не обязательно указывать это.
Вот jsfiddle .
[1] - прослушивать события мыши… кроме переполнения div: полоса прокрутки?