2013-08-19 4 views
2

나는 그리드 스터를 사용하여 링크 그리드를 만들고 있습니다. 링크를 클릭하면 정상적으로 작동합니다. 문제는 드래그 한 후에도 클릭됩니다. 드래그 한 후 클릭하지 못하게하려면 어떻게해야합니까?링크가 드래그되는 동안 '클릭'금지

확인하시기 바랍니다 : 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'); 

FIDDLE

+0

감사를 작동하지, 나는 작은 마우스 이동에 여유를 남기는 방식을 좋아합니다. – BMH

+0

@BMH - 덕분에 드래그를 구성하기에 일반적으로 15 픽셀이 적당합니다. 그렇지 않으면 항상 변경할 수 있습니다. – adeneo

+0

탱크, 웹 사이트의 버전이 작동하지 않습니다. 바이올린 코드를 사용하는 사람이라면 css에 "ol, ul {list-style : none;}"을 추가하는 것을 잊지 마십시오. – 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