2013-08-19 70 views
2

我使用gridster创建链接网格。点击它时,链接应该正常工作。问题是它拖动后也会被点击。我怎样才能阻止它被拖动后被点击?拖动链接时阻止`click`

请检查: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可拖动有这个选项,但找不到与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'); 

FIDDLE

+0

谢谢,我喜欢你为小鼠移动留下余量的方式。 – BMH

+0

@BMH - 谢谢,通常15个像素就足以构成一个拖拽,如果不是,它总是可以改变的。 – adeneo

+0

坦克,该网站上的版本不工作。对于任何使用小提琴代码的人来说,不要忘记在CSS上添加“ol,ul {list-style:none;}”,它的小提琴正常化,这就是为什么它不在gridster css中。 – forX

0
$(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/

1

我不知道这会帮助,但只是一个想法

代替制作完整的夹具ddle为可点击的,为什么不使用唯一的联系是可点击,我的意思是

<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> 

+0

在我真正的实现中,链接是填充整个网格的大图像。 – BMH