2011-03-20 4 views
5

안녕하세요 저는 사용자가 위키피디아의 링크/웹 페이지, 특히 기사를 Solitaire의 스택과 같은 일종의 'Organizer'로 드래그 앤 드롭 할 수 있도록 jQuery UI를 만드는 데 자체 프로젝트를하고 있습니다. 사용자가 항목/카드 비주얼을 그룹화하는 것과 같은 Wikipage를 UI로 끌어다 놓을 때와 같은 다양한 기능을 추가하기를 희망합니다.jQuery 플러그인을 통해 링크/페이지를 드래그 앤 드롭하는 방법은 무엇입니까?

jQuery에 비교적 익숙하지 않아 어디에서 시작해야할지 모르겠습니다. Wikipedia에서 페이지를 드래그하여 jQuery UI에 드롭 할 수 있습니까? 누구라도 조언을한다면, 나는이 일을 어떻게 끝내야 하는지를 실제로 밝혀 내고있는 중 굉장 할 것입니다.


편집 : 아무나? 나는 아직 아무것도 찾지 못했다.

답변

19

편집 2 :

내가 순수한 JS 양식이 재 작성 (또한 몇 가지 문제를 해결합니다).

요점 : https://gist.github.com/matt-curtis/9044134

JSFiddle : http://jsfiddle.net/z9Y86/1/

코드 :

var LinkGrabber = { 
    textarea: null, 

    /* Textarea Management */ 

    attach_ta: function(){ 
     if(LinkGrabber.textarea != null) return; 

     var textarea = LinkGrabber.textarea = document.createElement("textarea"); 
     textarea.setAttribute("style", "position: fixed; width: 100%; margin: 0; top: 0; bottom: 0; right: 0; left: 0; z-index: 99999999"); 
     textarea.style.opacity = "0.000000000000000001"; 

     var body = document.getElementsByTagName("body")[0]; 
     body.appendChild(textarea); 

     textarea.oninput = LinkGrabber.evt_got_link; 
    }, 

    detach_ta: function(){ 
     if(LinkGrabber.textarea == null) return; 
     var textarea = LinkGrabber.textarea; 

     textarea.parentNode.removeChild(textarea); 
     LinkGrabber.textarea = null; 
    }, 

    /* Event Handlers */ 

    evt_drag_over: function(){ 
     LinkGrabber.attach_ta(); //Create TA overlay 
    }, 

    evt_got_link: function(){ 
     /* THIS IS WHERE WE HANDLE THE RECEIVED LINK */ 

     var link = LinkGrabber.textarea.value; 

     alert(link); 

     LinkGrabber.detach_ta(); 
    }, 

    evt_drag_out: function(e){ 
     if(e.target == LinkGrabber.textarea) LinkGrabber.detach_ta(); 
    }, 

    /* Start/Stop */ 

    start: function(){ 
     document.addEventListener("dragover", LinkGrabber.evt_drag_over, false); 
     document.addEventListener("dragenter", LinkGrabber.evt_drag_over, false); 

     document.addEventListener("mouseup", LinkGrabber.evt_drag_out, false); 
     document.addEventListener("dragleave", LinkGrabber.evt_drag_out, false); 
    }, 

    stop: function(){ 
     document.removeEventListener("dragover", LinkGrabber.evt_drag_over); 
     document.removeEventListener("dragenter", LinkGrabber.evt_drag_over); 

     document.removeEventListener("mouseup", LinkGrabber.evt_drag_out); 
     document.removeEventListener("dragleave", LinkGrabber.evt_drag_out); 

     LinkGrabber.detach_ta(); 
    } 
}; 

원래 답변 : 내가 생각할 수있는 유일한 해결 방안은 무엇인가를하는 것입니다

를 사용하는 입력 및 텍스트 영역에 삭제 된 링크의 링크가 텍스트로 수신되므로 삭제 된 앵커의 링크를 가져 오는 입력 또는 텍스트 영역이 있습니다.

HTML :

<textarea id="link_grabber"></textarea> 
<div id="notice">Drop a link on me! :)</div> 

JS : http://jsfiddle.net/C8yAa/2/

편집 :

$("body").bind("dragenter dragover", function(){ 
    //When the user has dragged a link into the document... 
}).bind("dragleave dragexit", function(){ 
    //When the drag is moved outside the document... 
}); 

setInterval(function(){ 
    if($("#link_grabber").val() != ""){ 
     var val = $("#link_grabber").val(); //Get the newly dropped link 
     $("#link_grabber").val(""); //prep textarea for the next link 
     $("#notice > span").text("Your link is: "+val); 
    } 
}, 100);​ 

나는 개념을 보여줍니다 jsFiddle했다이 일의 HTML5 방법도 있습니다 체크 아웃 : http://www.html5rocks.com/en/tutorials/dnd/basics/

+0

내게 뭔가 코딩 했어! 이것은 매우 흥미 롭습니다. '입력을 사용하여 삭제 된 앵커의 링크를 가져 오는 방법'에 대해 자세히 설명해 주시겠습니까? 나는 이제 '링크'가 URL을 보유하고 있다고 가정합니다. 드래그 앤 드랍 가능한 객체를 만드는 데이 객체를 사용할 수도 있지만,이 방법에 대해서는 알지 못합니다. – honeywind

+0

링크 (책갈피 등)가 텍스트 영역이나 입력 위에 놓이면 해당 링크가 텍스트 영역이나 입력에 나타나기 때문에 작동합니다. 이 예제는 가능한 한 가장 낮은 불투명도 (0.01)로 텍스트 영역을 만드는 방식으로 작동합니다. 그런 다음 텍스트 영역에 무언가가 입력되었는지 지속적으로 확인하는 간격을 만들었습니다. 일명 드래그 앤 드롭 링크입니다. 그런 일이 발생하면 링크에 경고하고 텍스트 영역을 다시 사용 가능하게합니다. – mattsven

+2

나는 더 매끄러운 & 더 나은 버전을 만들었다 : http://jsfiddle.net/C8yAa/2/ – mattsven

관련 문제