Запретить "клик", пока ссылка перетаскивается
Я использую гридстер, чтобы сделать сетку ссылок. Ссылка должна работать нормально при нажатии на нее. Проблема в том, что после перетаскивания его тоже нажимают. Как я могу остановить его от нажатия после перетаскивания?
Пожалуйста, проверьте: http://jsfiddle.net/b_m_h/tr4cU/
<div class="gridster">
<ul id="reszable">
<li data-row="1" data-col="1" data-sizex="1" data-sizey="1"></li>
<li data-row="2" data-col="1" data-sizex="1" data-sizey="1"></li>
<li data-row="3" data-col="1" data-sizex="1" data-sizey="1"><a href="http://google.com" target="_blank">LINK</a></li>
<li data-row="1" data-col="2" data-sizex="2" data-sizey="1"></li>
<li data-row="2" data-col="2" data-sizex="2" data-sizey="2"></li>
<li data-row="1" data-col="4" data-sizex="1" data-sizey="1"></li>
</ul>
</div>
Js:
$(function(){
$(".gridster ul").gridster({
widget_margins: [5, 5],
widget_base_dimensions: [100, 100]
});
var gridster = $(".gridster ul").gridster().data('gridster');
});
4 ответа
Не знаю, есть ли что-то встроенное, так как jQuery draggable имеет опции для этого, но не смог найти ничего похожего на gridster.
Вы всегда можете создать функциональность самостоятельно:
$(".gridster ul").gridster({
widget_margins: [5, 5],
widget_base_dimensions: [100, 100]
}).on({
mousedown: function(e) {
$(this).data({top: e.pageX, left: e.pageY});
},
mouseup: function(e) {
var top = e.pageX,
left = e.pageY,
ptop = $(this).data('top'),
pleft = $(this).data('left');
$(this).data('dragged', Math.abs(top - ptop) > 15 || Math.abs(left - pleft) > 15);
},
click: function(e) {
if ( $(this).data('dragged') ) e.preventDefault();
}
}, 'a');
Я не уверен, что это могло бы помочь, но только для идеи
Вместо того, чтобы сделать полную сковородку кликабельной, почему бы не использовать только ссылку как кликабельную, то есть
<li data-row="3" data-col="1" data-sizex="1" data-sizey="1">
<p> <a href="http://google.com" target="_blank">LINK</a></p></li>
Выполнение этого будет выполнять то, что вам нужно, попробовал это, и это работает
<div class="gridster">
<ul id="reszable">
<li data-row="1" data-col="1" data-sizex="2" data-sizey="1"></li>
<li data-row="2" data-col="1" data-sizex="1" data-sizey="1"></li>
<li data-row="3" data-col="1" data-sizex="1" data-sizey="1">
<p> <a href="http://google.com" target="_blank">LINK</a></p></li>
<li data-row="1" data-col="2" data-sizex="2" data-sizey="1"></li>
<li data-row="2" data-col="2" data-sizex="2" data-sizey="2"></li>
<li data-row="1" data-col="4" data-sizex="1" data-sizey="1"></li>
$(function(){ //DOM Ready
$(".gridster ul").gridster({
widget_margins: [5, 5],
widget_base_dimensions: [100, 100],
draggable: {
start: function(event, ui){
$("a").click(function(event) { event.preventDefault(); }) // prevent the click event when the drag started
},
}
});
$("#reszable > li").mouseleave(function(){
$("a").unbind('click'); // bind the click event again when the drag stopped
});
var gridster = $(".gridster ul").gridster().data('gridster');
});
Я обновил вашу скрипку http://jsfiddle.net/tr4cU/6/
draggable: {
start: function(event, ui) {
dragged = 1;
// DO SEOMETHING
}
}
...
if(!dragged){
// DO SOMETHING
}
// RESET DRAGGED SINCE CLICK EVENT IS FIRED AFTER drag stop
dragged = 0
Я думаю, что ссылка отвечает на тот же вопрос