드래그 앤 드롭의 기본 아이디어도 이전 글에서 다루었습니다. 이제 이론이 생겼으니 어디에 적용할 수 있을까요? 아래에서는 참고용으로 드래그 앤 드롭 방식을 사용하여 작성된 작은 예를 제시하겠습니다. 대략적인 효과는 아래 그림에서 볼 수 있습니다.
스크롤바, 양식의 수량 선택 컨트롤, 진행률 표시줄 등으로 이해할 수 있는 간단한 드래그 바입니다. 어쨌든 여러 가지로 변경할 수 있습니다. 끝났어!
생각해 보니 원리를 설명할 필요가 없다는 생각이 들었습니다. 이미 드래그 효과에서 매우 명확하게 설명했습니다. 확실하지 않은 학생들은 나가서 왼쪽으로 가서 자바스크립트의 작은 예를 볼 수 있습니다. PC 웹페이지에 드래그 앤 드롭하면 코드가 바로 게시됩니다.
css:
<style> #drag_wrap{ width:220px; height:10px; position:relative; margin:100px auto; } .dis_bg{ width:200px; height:10px; border-radius:10px; background:#ccc; margin-left:10px; } #drag_bg{ width:0; height:10px; border-radius:10px; background:#0CF; } #drag_box{ width:20px; height:20px; border-radius:10px; background:#F30; position:absolute; top:-5px; left:0; cursor:move; } #drag_box span{ width:40px; height:20px; text-align:center; line-height:20px; border:1px solid #ccc; position:absolute; top:-25px; left:-10px; color:#333; background:#fff; } #drag_wrap1{ width:10px; height:220px; position:relative; margin:100px auto; } .dis_bg1{ width:10px; height:200px; border-radius:10px; background:#ccc; position:absolute; top:10px; } #drag_bg1{ width:10px; height:0; border-radius:10px; background:#0CF; } #drag_bg1{ width:10px; height:0; border-radius:10px; background:#0CF; } #drag_box1{ width:20px; height:20px; border-radius:10px; background:#F30; position:absolute; top:-5px; left:-5px; cursor:move; } #drag_box1 span{ width:40px; height:20px; text-align:center; line-height:20px; border:1px solid #ccc; position:absolute; top:0; left:25px; color:#333; background:#fff; } </style>
html:
<div id="drag_wrap"> <div class="dis_bg"> <div id="drag_bg"></div> </div> <div id="drag_box"><span>0</span></div> </div> <div id="drag_wrap1"> <div class="dis_bg1"> <div id="drag_bg1"></div> </div> <div id="drag_box1"><span>0</span></div> </div>
자바스크립트:
window.onload = function(){ drag("drag_box","drag_wrap","drag_bg","left"); drag("drag_box1","drag_wrap1","drag_bg1","top"); function drag(obj,parentNode,bgObj,attr,endFn){ var obj = document.getElementById(obj); var parentNode = document.getElementById(parentNode); var bgObj = document.getElementById(bgObj); var oNum = obj.getElementsByTagName('span')[0]; obj.onmousedown = function(ev){ var ev = ev || event; //非标准设置全局捕获(IE) if(obj.setCapture){ obj.setCapture() }; var disX = ev.clientX - this.offsetLeft, disY = ev.clientY - this.offsetTop; var oWidth = obj.offsetWidth, oHeight = obj.offsetHeight; var pWidth = parentNode.offsetWidth, pHeight = parentNode.offsetHeight; document.onmousemove = function(ev){ var ev = ev || event; if(attr == "left"){ //横向 var left = ev.clientX - disX; //左侧 if(left <= 0){ left = 0; }else if(left > pWidth - oWidth){//右侧 left = pWidth - oWidth; }; obj.style.left = bgObj.style.width = left + 'px'; oNum.innerHTML = left; }else if(attr == "top"){ //竖向 var top = ev.clientY - disY; //上面 if(top <= 0){ top = 0; }else if(top > pHeight - oHeight){//下面 top = pHeight - oHeight; }; obj.style.top = bgObj.style.height = top + 'px'; oNum.innerHTML = top; }; }; document.onmouseup = function(ev){ var ev = ev || event; document.onmousemove = document.onmouseup = null; endFn && endFn(); //非标准释放全局捕获(IE) if(obj.releaseCapture){ obj.releaseCapture() }; }; return false; }; } }
매개변수 설명:
여기에는 각각 obj, parentNode, bgObj, attr, endFn 등 5개의 매개변수가 제공됩니다.
obj: 끌어온 개체
parentNode: 드래그된 객체의 활성 영역을 제한하는 객체로, 일반적으로 해당 부모로 설정됩니다.
bgObj: 드래그할 때 배경색 개체 색상
attr: 가로 또는 세로로 드래그할지 여부를 나타내는 왼쪽, 위쪽 매개변수 2개
endFn: 반환 함수, 존재하면 실행되고, 그렇지 않으면 실행되지 않음, 선택 사항
위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.