Miałem ten sam problem i próbowałem wielu podejść i żadna nie działała dla mnie.
Rozwiązanie 1
$('.item').click(function(e)
{
if ( $(this).is('.ui-draggable-dragging') ) return false;
});
nic dla mnie nie robi. Element jest klikany po zakończeniu przeciągania.
Rozwiązanie 2 (autorstwa Toma de Boera)
$('.item').draggable(
{
stop: function(event, ui)
{
$( event.originalEvent.target).one('click', function(e){ e.stopImmediatePropagation(); } );
}
});
Działa to dobrze, ale zawodzi w jednym przypadku - kiedy przechodziłem na pełny ekran po kliknięciu:
var body = $('body')[0];
req = body.requestFullScreen || body.webkitRequestFullScreen || body.mozRequestFullScreen;
req.call(body);
Rozwiązanie 3 (autorstwa Sashy Yanovets)
$('.item').draggable({
start: function(event, ui) {
ui.helper.bind("click.prevent",
function(event) { event.preventDefault(); });
},
stop: function(event, ui) {
setTimeout(function(){ui.helper.unbind("click.prevent");}, 300);
}
})
To nie działa dla mnie.
Rozwiązanie 4 - jedyne, które działało dobrze
$('.item').draggable(
{
});
$('.item').click(function(e)
{
});
Tak, to wszystko - właściwa kolejność załatwia sprawę - najpierw musisz powiązać zdarzenie draggable (), a następnie click (). Nawet gdy umieściłem kod przełączający na pełny ekran w zdarzeniu click (), nadal nie przechodził do pełnego ekranu podczas przeciągania. Idealne dla mnie!