일부 웹사이트에서는 매우 세련되고 멋진 사진 드래그 앤 드롭을 볼 수 있습니다. 물론 이러한 작업은 JavaScript를 사용하여 수행할 수 있으므로 오늘은 JavaScript를 사용하여 드래그 앤 드롭 기능을 구현하는 방법에 대해 이야기하겠습니다. 혹시 JavaScript를 통한 드래그 앤 드롭 기능 구현에 관심이 있으신 분들은 한번 살펴보세요!
볼 질문:
1. 웹 페이지에서 드래그 기능을 구현하는 방법.
2. document.documentElement와 document.body의 차이점.
document.documentElement.clientWidth는 HTML 문서 전체의 너비, document.body.clientWidth의 너비를 나타냅니다. 둘은 동일하지 않습니다. 콘솔에서 console.log(document.documentElement), console.log(document.body)를 통해 테스트할 수 있습니다.
3. getBoundingClientRect().left와 offsetLeft의 차이점.
(1) getBoundingClientRect()는 요소의 왼쪽, 위쪽, 오른쪽 및 아래쪽을 가져오는 데 사용됩니다.
(2)offset은 부모를 기준으로 왼쪽과 위쪽을 가져옵니다. getBoundingClientRect()는 창을 기준으로 왼쪽, 위쪽, 오른쪽 및 아래쪽을 가져옵니다.
4. e.clientX는 창을 기준으로 한 마우스 포인트의 좌표를 나타냅니다.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>弹窗</title> <style type="text/css"> #mask { position: fixed; left:0; top:0; width:100%; height: 100%; background-color: hsla(250,100%,50%,0.6); display: none; } #popBox { position: absolute; background-color: #fff; width:200px; height: 200px; /*left:50%; top:50%;*/ /*margin-top: -100px; margin-left: -100px;*/ } </style> </head> <body> <button id="clickBtn">点击</button> <p id="mask"> <p id="popBox"></p> </p> <script type="text/javascript"> var clickBtn = document.getElementById("clickBtn"); var popBox = document.getElementById("popBox") var mask = document.getElementById("mask"); clickBtn.onclick = function() { mask.style.display = "block"; popBox.style.left = (document.documentElement.clientWidth - popBox.offsetWidth)/2 + "px"; popBox.style.top = (document.documentElement.clientHeight - popBox.offsetHeight)/2 + "px"; } popBox.onclick = function(e) { var e = e || window.event;//e指所有代码的集合,通过它可以获取事件的各种属性。 e.cancelBubble = true;//阻止事件冒泡,即点击事件不会传递到mask这一层,意味着不会触发点击mask事件代码。 } mask.onclick = function() { mask.style.display = "none"; } //拖拽 mousedown->mousemove->mouseup popBox.onmousedown = function(e) { var e = e || window.event; var pos = popBox.getBoundingClientRect();//getBoundingClientRect()用于获取元素的left、top、right、bottom。offset获取相对于父级的left和top。getBoundingClientRect()获取相对于窗口的left、top、right、bottom。 var oX = e.clientX - pos.left;//clientX指相对于窗口的坐标。 var oY = e.clientY - pos.top; document.onmousemove = function(e) { var e = e || window.event; var oLeft = e.clientX - oX; var oTop = e.clientY - oY; popBox.style.left = oLeft + "px"; popBox.style.top = oTop + "px"; if (oLeft<0) { popBox.style.left = 0 + "px"; }; if (oLeft>document.documentElement.clientWidth - popBox.offsetWidth) { popBox.style.left = document.documentElement.clientWidth - popBox.offsetWidth + "px";//document.documentElement.clientWidth指整个html文档的宽度,document.body.clientWidth的宽度。这两者是不一样的。可以在console控制台通过console.log(document.documentElement)和console.log(document.body)进行测试。 } if (oTop<0) { popBox.style.top = 0 + "px"; }; if (oTop > document.documentElement.clientHeight - popBox.offsetHeight) { popBox.style.top = document.documentElement.clientHeight - popBox.offsetHeight + "px"; } } popBox.onmouseup = function() { document.onmousemove = null; } } </script> </body> </html>
코드 분석과 결합하여 소스 코드를 삭제하고 수정하려는 시도를 했다는 느낌이 듭니다. 이런 종류의 학습은 매우 빠르게 진행되며 쉽게 잊혀지지 않습니다.
관련 권장 사항:
위 내용은 js를 사용하여 세련된 드래그 앤 드롭 기능 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!