2011-09-22 31 views

回答

3

我找不到任何完全一样的东西,所以我写了一个快速的库函数。

Element.addMethods({ 
    isClipped: function(element, recursive){ 
     element = $(element); 
     var parent = element.up(); 
     if ((element === document.body) || !parent) return true; 
     var eLeft = element.offsetLeft, 
      eRight = eLeft+element.getWidth(), 
      eTop = element.offsetTop, 
      eBottom = eTop+element.getHeight(); 
     var pWidth = $R(parent.scrollLeft, parent.getWidth()+parent.scrollLeft), 
      pHeight = $R(parent.scrollTop, parent.getHeight()+parent.scrollTop); 
     if (!pWidth.include(eLeft) || !pWidth.include(eRight) || !pHeight.include(eTop) || !pHeight.include(eBottom)) { 
      return true; 
     } 

     if (recursive) return parent.isClipped(true); 
     return false; 
    } 
}); 

这不是优雅的(我没有说“快”),但它可以让你在任何元素上使用isClipped()。你可以看到一个jsfiddle测试here。它测试一个元素的任何部分(不包括边界)是否是溢出的一部分。您可以做类似的测试,以测试完全在包含客户区域之外的元素。

0

如果一个节点的scrollWidth /身高高于它的offsetWidth /高度,那么事情会被(部分)隐藏。然后通过简单的数学算法确定哪个区域是隐藏的(增加图标宽度,计算滚动偏移量,然后最终检查图标是否在该可见区域内)。