您好,登錄后才能下訂單哦!
小編給大家分享一下JavaScript offset怎么實現鼠標坐標獲取和窗口內模塊拖動,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
offset 即偏移量,使用 offset 系列相關屬性可以 動態的 獲取該元素的位置(偏移)、大小等,如:
元素距離帶有定位父元素的位置
獲取元素自身的大小(寬度高度)
注:返回的數值不帶單位
offset 系列常用的屬性包括:
element.offsetParent
返回作為該元素帶有定位的父級元素,如果父級元素沒有定位,則返回 body
注意,parentNode 和 offsetParent 還是有本質上的區別的:parentNode 返回的是直接父級元素,offsetParent 返回的是帶有定位的父級元素。
element.offsetTop
返回元素帶有定位父元素上方的偏移
element.offsetLeft
返回元素帶有定位父元素左邊框的偏移
element.offsetWidth
返回自身包括 padding, 邊框, 內容區的寬度,返回數值不帶單位
element.offsetHeight
返回自身包括 padding, 邊框, 內容區的高度,返回數值不帶單位
offset 和 style 的區別
offset | style |
---|---|
offset 可以得到任意樣式表中的樣式值 | style 只能得到行內樣式表中的樣式值,無法獲得內嵌樣式 |
offset 系列獲得的數值是沒有單位的 | style.width 獲得的是帶有單位的字符串 |
offsetWidth 包含 padding+border+width | style.width 獲得不包含 padding 和 border 的值 |
offsetWidth 等屬性是只讀屬性,只能獲取不能賦值 | style 屬性是可讀寫屬性,style.width 可以獲取也可以賦值 |
只想要獲取元素大小位置的時候,用 offset 更合適 | 要對元素樣式進行修改的話,使用 style 更合適 |
演示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>鼠標位置獲取-01</title> <style> .box { width: 500px; height: 500px; background-color: #55aaff; margin-left: 50px; } </style> </head> <body> <p>獲取鼠標在盒子內坐標</p> <div class="box"></div> <script> // 在盒子中點擊,想要獲得鼠標距離盒子左右的距離 // 實現: // 1. 獲得鼠標在頁面中的坐標,e.pageX, e.pageY // 2. 獲得盒子到頁面中的距離, box.offsetLeft, box.offsetTop // 3. 兩者相減就能夠獲得鼠標在盒子中的坐標 // 下面看實現過程吧! const box = document.querySelector(".box"); box.addEventListener("mousemove", function(e) { // console.log(e.pageX, e.pageY); // console.log(box.offsetLeft, box.offsetTop); const x = e.pageX - this.offsetLeft; const y = e.pageY - this.offsetTop; box.textContent = `x: ${x}, y: ${y}`; }); </script> </body> </html>
演示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>模塊拖動-02</title> <style> * { margin: 0; padding: 0; } .login, .modal { display: none; } .login { width: 512px; height: 280px; position: fixed; border: #ebebeb solid 1px; left: 50%; top: 50%; background-color: #fff; box-shadow: 0 0 20px #ddd; z-index: 999; transform: translate(-50%, -50%); text-align: center; } .modal { position: absolute; top: 0; left: 0; width: 100vw; height: 100vh; background-color: rgba(0, 0, 0, 0.3); z-index: 998; } .login-content { margin: 100px auto; text-align: center; } .login-content h4:hover, .closeBtn:hover { cursor: pointer; } .closeBtn { position: absolute; right: 10px; top: 10px; } .login h5 { margin-top: 10px; } .login h5:hover { cursor: move; } </style> </head> <body> <div class="login-content"> <h4 id="openLogin">點擊彈出模擬框</h4> </div> <div class="login"> <div class="closeBtn" id="closeBtn">關閉</div> <h5 class="loginHeader">點擊我拖動吧</h5> </div> <div class="modal"></div> <script> // 獲取元素 const login = document.querySelector(".login"); const modal = document.querySelector(".modal"); const closeBtn = document.querySelector("#closeBtn"); const openLogin = document.querySelector("#openLogin"); // 點擊顯示元素 openLogin.addEventListener("click", () => { modal.style.display = "block"; login.style.display = "block"; }); closeBtn.addEventListener("click", () => { modal.style.display = "none"; login.style.display = "none"; }); // 實現拖拽移動功能 // 1. 鼠標按下獲得鼠標在盒子內的坐標 const loginHeader = document.querySelector(".loginHeader"); loginHeader.addEventListener("mousedown", function (e) { const x = e.pageX - login.offsetLeft; const y = e.pageY - login.offsetTop; const move = function (e) { login.style.left = `${e.pageX - x}px`; login.style.top = `${e.pageY - y}px`; }; // 2. 移動鼠標 document.addEventListener("mousemove", move); document.addEventListener("mouseup", function () { document.removeEventListener("mousemove", move); }); }); </script> </body> </html>
看完了這篇文章,相信你對“JavaScript offset怎么實現鼠標坐標獲取和窗口內模塊拖動”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。