2015-06-25 116 views
-2

有什麼辦法讓10000%的人確信HTML元素不可見嗎? 目前我做的:HTML元素的實際大小n Javascript

var rect = element.getBoundingClientRect(); 

if (element.style.visibility !== 'hidden') && atLeastTen(element.clientWidth, 
     element.clientHeight, element.offsetWidth, element.offsetHeight, 
     element.scrollWidth, element.scrollHeight, rect.height, rect.width) { 
    console.log("Element is visibile!"); 
    return true; 
} else { 
    console.log("Element is invisible!"); 
    return false; 
} 

function atLeastTen() { 
    for (var i = 0; i < arguments.length; i++) { 
     var v = arguments[i]; 
     console.log("CHECKING V:", v); 
     if (v < 10) return false; 
    } 
    return true; 
} 

但是,這感覺有點跛...... 想法?

+2

是不是'100%'夠了嗎? ;-) – Cerbrus

+0

取決於你對「可見」的定義是什麼。顯然你計算一個9像素×9像素大小的元素不可見?那麼零不透明度的元素呢?完全透明的圖像? '顯示:none'?空元素與透明背景?視口外的元素? – JJJ

+0

兩個downvotes ...到底是什麼? – Merc

回答

1

您可能需要檢查兩件事情:

  1. 能見度眼睛和DOM:
    1. 檢查display
    2. 檢查visibility
    3. 檢查opacity
  2. 是否在視口內。
    1. 獲取元素的座標和尺寸。
    2. 獲取視口的尺寸。
    3. 創建兩者的範圍。
    4. 檢查相交。

您可能需要爲父母做所有事情!

你可以很容易地使用jQuery或none將它翻譯成JavaScript。而剛剛與:visible從jQuery的檢查,該文件說:

我們改變背後的邏輯的:可見的:隱藏選擇 (其中使用jQuery的整個決定的 元素的可見性)。

這是怎樣的邏輯已經改變:

  • 在jQuery中1.3.1(或以上)的元件可見,如果它的CSS「顯示」不是「無」,它的CSS「能見度」不是「隱藏」,並且其類型(如果它是輸入)不是「隱藏的」。
  • 在jQuery中1.3.2的元素是可見的,如果其瀏覽器的報道offsetWidth或的offsetHeight大於0

是什麼變化呢?這意味着如果元素的CSS 顯示爲「none」,或其父/祖先元素的任何顯示爲 「none」,或者如果元素的寬度爲0並且元素的高度爲0 那麼元素將被報告爲隱。

製作此開關有什麼好處?結果是雙重的:

  • 性能更好,更好,更好。 (見下面)
  • 如果元素位於「隱藏」元素中(如果不使用插件,那麼以前不可能的元素會報告爲「隱藏」)。

簡單來說,你可以通過這個小碼檢查能見度:

$(element).is(":visible");