判斷元素是否有重疊部分
使用絕對定位或者浮動,可能導致多個元素重疊,實際應用中,可能需要判斷相應元素是否已經重疊。
下面通例項介紹一下如何實現此效果。
程式碼如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>判斷元素是否有重疊部分-螞蟻部落</title> <style type="text/css"> div{ width:200px; height:200px; background:#EEE; margin-top:5px; } #two{ position:absolute; left:100px; top:50px; background:#F60; } </style> <script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script> <script type="text/javascript"> function isOverlap(idOne,idTwo){ var objOne=$("#"+idOne), objTwo=$("#"+idTwo), offsetOne=objOne.offset(), offsetTwo=objTwo.offset(), topOne=offsetOne.top, topTwo=offsetTwo.top, leftOne=offsetOne.left, leftTwo=offsetTwo.left, widthOne=objOne.width(), widthTwo=objTwo.width(), heightOne=objOne.height(), heightTwo=objTwo.height(); var leftTop=leftTwo>leftOne&&leftTwo<leftOne+widthOne&& topTwo>topOne&&topTwo<topOne+heightOne, rightTop=leftTwo+widthTwo>leftOne &&leftTwo+widthTwo<leftOne+widthOne &&topTwo>topOne&&topTwo<topOne+heightOne, leftBottom=leftTwo>leftOne&&leftTwo<leftOne+widthOne&& topTwo+heightTwo>topOne&&topTwo+heightTwo<topOne+heightOne, rightBottom=leftTwo+widthTwo>leftOne&&leftTwo+widthTwo<leftOne+widthOne&& topTwo+heightTwo>topOne&&topTwo+heightTwo < topOne+heightOne; return leftTop||rightTop||leftBottom||rightBottom; } $(document).ready(function(){ $("#result").text(isOverlap("one","two")); }) </script> </head> <body> <div id="one">One</div> <div id="two">Two</div> <div id="three">Three</div> <h1 id="result"></h1> </body> </html>
程式碼實現了判斷兩個元素是否有重疊部分的功能,下面介紹一下實現過程。
一.實現原理:
獲取兩個元素相對於視窗的座標值和尺寸,然後根據相關的值來判斷兩個元素在網頁中是否有重合的區域;程式碼通過判斷一個元素和另一個元素的相對位置關係,來判斷兩個元素是否有重合的部分,就一數學問題,比較難以表述,更多內容看程式碼註釋。
二.程式碼註釋:
(1).function isOverlap(idOne,idTwo){},宣告一個函式用於判斷兩個元素是否有重合的部分。具有兩個引數,都是物件的id值。
(2).var objOne=$("#"+idOne)和objTwo=$("#"+idTwo)獲取指定id屬性值的jquery物件。
(3).offsetOne=objOne.offset(),獲取objOne物件在視窗的偏移量。offset()函式返回的物件包含top和left屬性。
(4).offsetTwo=objTwo.offset(),和上面同樣的道理。
(5).topOne=offsetOne.top,獲取offsetOne物件相對於視窗頂部的偏移量。
(6).topTwo=offsetTwo.top,和上面是同樣的道理。
(7).leftOne=offsetOne.left,獲取offsetOne物件相對於視窗左部的偏移量。
(8).leftTwo=offsetTwo.left,和上面是同樣的道理。
(9).widthOne=objOne.width(),獲取objOne物件的寬度。
(10).widthTwo=objTwo.width(),和上面是同樣的道理。
(11).heightOne=objOne.height(),獲取objOne物件的高度。
(12).heightTwo=objTwo.height(),和上面是同樣的道理。
(13).leftTop=leftTwo>leftOne&&leftTwo<leftOne+widthOne&&topTwo>topOne&&topTwo<topOne+heightOne,當offsetTwo元素的左邊緣位於objOne元素的內部並且offsetTwo元素的上邊緣位於objOne的內部,也就是說有重合的部分,如果都滿足,leftTop的值就為true,否則為false,以下三個都是一樣的道理,大家可以自行理解一下。
(14).return leftTop||rightTop||leftBottom||rightBottom,只要滿足任何一個,都會返回true,也就是有重合的部分。
(15).$(document).ready(function(){}),文件結構完全載入完成再去執行函式中的程式碼。
(16).$("#result").text(isOverlap("one","two")),呼叫函式,判斷id為one和two的元素是否有重合的部分。
三.相關閱讀:
(1).offset()參閱jQuery offset()方法一章節。
(2).width()參閱jQuery width()方法一章節。
(3).height()參閱jQuery height()方法一章節。
(4).text()參閱jQuery text()方法一章節。
相關文章
- 判斷表中資料是否有重複
- JQuery中判斷元素中是否有內容jQuery
- 41:判斷元素是否存在
- Java stream判斷列表是否包含某幾個元素/重複元素Java
- jQuery 判斷元素是否隱藏jQuery
- jQuery如何判斷元素是否存在jQuery
- dataset 判斷整列是否有重複,找出重複資料
- 判斷元素是否在視口和元素相交
- jQuery 判斷頁面元素是否存在jQuery
- jQuery如何判斷一個元素是否存在jQuery
- 如何利用jQuery判斷指定元素是否存在jQuery
- 判斷DOM元素是否含有子節點
- 如何判斷一個元素是否隱藏
- JavaScript判斷元素是否具有required屬性JavaScriptUI
- JavaScript 判斷元素是否獲得焦點JavaScript
- JavaScript判斷陣列是否包含指定元素JavaScript陣列
- Array · 判斷某元素是否在陣列中陣列
- 如何判斷頁面是否存在某個元素
- javascript如何判斷元素是否具有指定屬性JavaScript
- javascript判斷元素是否具有指定樣式類JavaScript
- jquery判斷元素是否存在於陣列中jQuery陣列
- jQuery如何判斷某一個元素是否存在jQuery
- javascript陣列如何判斷是否有重複的陣列項JavaScript陣列
- 判斷一個元素是否是另一個元素的子元素或者父元素
- jquery判斷指定元素是否存在於某陣列jQuery陣列
- js判斷元素是否為空程式碼例項JS
- jQuery如何判斷元素是否具有指定的屬性jQuery
- js如何判斷陣列是否含有指定的元素JS陣列
- javascript如何判斷一個頁面元素是否存在JavaScript
- 如何判斷一個元素是否位於另一個元素之中
- 判斷字元是否重複正規表示式字元
- 技術乾貨:如何判斷一個整數陣列是否存在重複元素......陣列
- 利用位運算判斷陣列中是否有重複的數字陣列
- 如何判斷元素是否進入可視區域viewport?View
- js如何判斷頁面中是否存在某個元素JS
- JavaScript判斷表單元素value值是否被修改過JavaScript
- JavaScript如何判斷指定元素是否具有class樣式類JavaScript
- js如何判斷陣列中是否含有某個元素JS陣列