本文解決的問題:
1、怎樣在網頁中實現拖曳功能;
2、document.documentElement與document.body的區別。
document.documentElement.clientWidth指整個html文檔的寬度,document.body.clientWidth的寬度。這兩者是不一樣的。可以在console控制台通過console.log(document.documentElement)和console.log(document.body)進行測試。
3、getBoundingClientRect().left與offsetLeft的區別。
getBoundingClientRect()用於獲取元素的left、top、right、bottom。offset獲取相對於父級的left和top。getBoundingClientRect()獲取相對於窗口的left、top、right、bottom。
4、e.clientX指的是鼠標點相對於窗口的坐標。
<!DOCTYPE html>
<html lang="en">
<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>
<div id="mask">
<div id="popBox"></div>
</div>
<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>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持。