目錄
元素屬性中的各種「距離」
滑鼠事件中的各種「距離」
jQuery中元素距離屬性
首頁 web前端 js教程 js中滑鼠事件和距離屬性的介紹

js中滑鼠事件和距離屬性的介紹

Sep 10, 2018 pm 04:18 PM
html html5 javascript

這篇文章帶給大家的內容是關於js中滑鼠事件和距離屬性的介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

js中有很多“距離”,為了不會混淆這裡總結一下其中部分距離

本文包括元素屬性相關的距離和滑鼠事件中的距離,廢話不多說,進入正文

先補充一下,本文的測試環境如下:

Chrome Dev 54.0.2840.71
Firefox 49.0
Opera 41.0
Safari 10.1
IE 11。

前四者運行在macOS Sierra 10.12上,IE11運行在搭載windows10 1607的虛擬機器上

元素屬性中的各種「距離」

元素屬性中的距離有以下6對:

scrollLeft: 設定或取得位於物件左邊界與視窗中可見內容的最左端之間的距離
scrollTop: 設定或取得位於物件最頂端與視窗中可見內容的最頂端之間的距離

offsetHeight: 取得物件的視覺區域的高度,包括邊框
offsetWidth: 取得物件的視覺區域的寬度,包括邊框

clientHeight: 取得物件邊框內部分的高度
clientWidth: 取得物件邊框內部分的寬度

offsetLeft: 取得物件相對於版面或由offsetParent屬性指定的父座標的計算左側位置
offsetTop: 取得物件相對於版面或由offsetTop屬性指定的父座標的計算頂端位置

clientTop: 取得物件頂部邊框寬度
clientLeft: 取得物件左側邊框寬度

scrollWidth: 取得物件的捲動寬度
scrollHeight : 取得物件的滾動高度。

上面提到了offsetParent屬性,其實目前p相對誰定位,這個屬性是誰。根據position值不同,有以下2種情況

  • 當父輩元素都沒有relative屬性時,無論目前元素的position是absolute,relative,fixed或fixed,offsetParent都是body元素

  • 父輩元素有relative屬性時,無論當前元素的position是absolute,relative,fixed或fixed,offsetParent是具有relative屬性的最近父元素

分不清楚?看下圖

js中滑鼠事件和距離屬性的介紹

這裡面可以清楚的看到上方的前4對,和他們之間的關係。

關於jQuery的元素距離屬性,文章最後整理了他們和DOM屬性的關係。

第一個值得強調的是,上面的這個例子中的p的box-sizing屬性是預設的content-box, 它的offsetHeight,clientHeight,clientWidth和offsetWidth有以下關係:

clientHeight = height paddingTopWidth paddingBottomWidth;
clientWidth = width paddingLeftWidth paddingRightWidth;

offsetHeight = clientHeight borderTopWidthorderNofftomWidorder##offsetHeight = clientHeight borderTopWidthorderNoffdWidorderthf-dw-id-dwidboxpoff izing屬性是border-box ,那麼,它們的關係將如下(ie6 ie7預設是這樣的):
offsetHeight = height;

offsetWidth = width;

clientHeight = height - borderTopWidth - borderBottomWidth;

LeentWidth = widclith - bftpid. - borderRightWidth;

第二個值得強調的是,這個例子中,由於它的父元素沒有設定position:relative,所以圖中這個p利用position:absolute;相對文檔定位,如果給他添加一個具有position:relative屬性的父p,那麼offsetLeft和offsetTop就是下圖這樣:

js中滑鼠事件和距離屬性的介紹不過無論它怎麼的定位,哪怕是position :relative或fixed,它的計算關係也不會改變,依然是:

offsetLeft = left marginLeft;

offsetTop = top marginTop;

講了這麼多,那麼scrollWidth和scrollHeight呢? scrollWidth和scrollHeight在不同瀏覽器裡面並不一致,如下圖(從左到右依序是Chrome, Firefox,  Opera,  Safari,  IE11)

js中滑鼠事件和距離屬性的介紹

#其實仔細研究這個裡面的不同,會發現在不同的瀏覽器p的offsetLeft、offsetTop這兩個值的屬性並不完全相同。當p裡面的內容溢位時,只有IE保留了padding的全部值,chrome、opera和safari會忽略padding-right的值視其為0,firefox會同時忽略padding-right和padding-bottom,如下圖js中滑鼠事件和距離屬性的介紹

#######

在各個瀏覽器中,對於捲軸本身的渲染也不一樣。它們會在計算scrollWidth和scrollHeight時排除各自的捲軸寬度。除了上述的不同,實際上發現每個瀏覽器中scrollLeft和scrollTop的最大值也不一樣,甚至差距極大,由於scrollLeft和scrollTop隨滾動事件發生而輸出,博主就上述例子的最大值記錄如下:

maximum value chrome #Firefox opera safari # IE11
scrollLeft #330 160 827 #330 217
scrollTop 230 210 485 230 330

其實是由於這些元素屬性在不同瀏覽器中的差異導致scrollWidth和scrollHeight的不同,具體使用應格外注意。不過部落客看過一些資料表示這兩個屬性和offsetParent有關,透過實際程式發現它們和offsetParent無關,這裡不展開描述了,因為低版瀏覽器,尤其ie7 ie6的實作方式可能會比較奇葩。

滑鼠事件中的各種「距離」

滑鼠事件很多,不過每個事件中關於距離的屬性意義是一樣的,這裡用mousemove來講解,具體的內容會在不久之後寫到了js事件部分講解。
滑鼠實作對於現在​​的瀏覽器來說,實作都是一樣的了,下面例子都在Chorme中實作。

滑鼠事件有以下6對:

event.clientX:相對瀏覽器左上角的水平座標
event.clientY:相對瀏覽器左上角的垂直座標

event.offsetX:相對於事件來源(event.target||event.srcElement)左上角水平偏移
event.offsetY:相對於事件來源(event.target||event.srcElement)左上角垂直偏移

event.pageX:相對於document左上角的水平座標
event.pageY:相對於document左上角的垂直座標

event.layerX:相對於offsetParent左上角的水平偏移
# event.layerY:相對於offsetParent左上角的水平偏移

event.movementX:相對於前一次事件中screenX的偏移量
event.movementY:相對於前一次事件中screenY的偏移

event.screenX:相對於螢幕左上角的水平座標
event.screenY:相對於螢幕左上角的垂直座標

x:和pageX一樣,用於相容於IE8及以前瀏覽器
y:和pageY一樣,用來相容IE8及以前瀏覽器

總之,還是先看圖

js中滑鼠事件和距離屬性的介紹
*這個圖中,黑色實線邊框表示瀏覽器可視區域部分,外層藍色虛線框表示整個DOM部分,整個圖為電腦螢幕

圖裡面怎麼沒有movementX和movementY?因為這個事件的值和上一個事件有關,關係如下:

currentEvent.movementX = currentEvent.screenX - previousEvent.screenX
currentEvent.movementY = currentEvent.screenY - previousEvent.screenY

#offsetX和值得注意的時offsetX和offsetY,他表示滑鼠到事件來源padding左上角的的偏移,這裡mousemove事件註冊在window上,所以位置如圖所示。

當瀏覽器的水平捲軸滑動以後,pageX和clientX就不同了。同理,當瀏覽器的垂直滾動條滑動以後,pageY和clientY就不同了,但它們始終存在以下關係:

event.pageX = event.clientX body.scrollLeft;
event.pageY = event. clientY body.scrollTop;

滑鼠事件中的距離比元素中的簡單一些,具體的使用放在之後寫的事件部分。

jQuery中元素距離屬性

var $p = $("#p");

$p.width(); //元素寬度,不包含padding和border
$p.height(); //元素高度,不包括padding和border

$p.innerWidth(); //元素內寬度,包括padding,不包括border
&dollar ;p.innerHeight(); //元素內高度,包括padding,不包括border

$p.outterWidth(); //元素可見寬度,包括padding和border
#$p. outterHeight(); //元素可見高度,包含padding和border

$p.outterWidth(true); //元素全部寬度,包括padding、border和margin
$p.outterHeight( true); //元素全部高度,包含padding、border和margin

相關建議:

jquery計算滑鼠和指定元素之間距離的方法_jquery

#js關於滑鼠離開事件

#

以上是js中滑鼠事件和距離屬性的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

在 HTML 中移動文字 在 HTML 中移動文字 Sep 04, 2024 pm 04:45 PM

HTML 中的文字移動指南。在這裡我們討論一下marquee標籤如何使用語法和實作範例。

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

See all articles