图像是否可见

Is the image visible or not

本文关键字:是否 图像      更新时间:2023-09-26

测试我要使用代码抓取的图像是否对用户可见

:

  1. 纯javascript -请不要建议使用jQuery或其他框架

  2. 我只对display:nonevisibility:hidden感兴趣,但不透明度等当然是受欢迎的

代码:下面(取自这里)不工作在我的DEMO

问题:你能帮助使工作或建议一个更好的脚本吗?

版本

function isVisible(obj){
  if (obj == document) return true;
  if (!obj) return false;
  if (!obj.parentNode) return false;
  if (obj.style) {
    if (obj.style.display == 'none' || obj.style.visibility == 'hidden') return false;
  }
  else if (window.getComputedStyle) { // MY BAD - I PUT THE INCORRECT ELSE HERE
    var style = window.getComputedStyle(obj, "");
    if (style.display == 'none' || style.visibility == 'hidden') return false;
  }
  else if (obj.currentStyle) {
    var style = obj.currentStyle;
    if (style['display'] == 'none' || style['visibility'] == 'hidden') return false;
  }
  return isVisible(obj.parentNode);
}
版本B

function isVisible1(obj) {
  var cnode = obj;
  try {
    while(cnode) {
      if (cnode.nodeName) {
        if (cnode.nodeName.toLowerCase()=="body") {
          return true;
        }
      }
      if (cnode.style.display=="none" || cnode.style.visibility=="hidden") {
        return false;
      }
      cnode = cnode.parentNode;
    }
    return true;
  }
  catch(ex) {return false;}
}

尝试将计算的样式条件置于样式检查的else之外。我们想检查内联样式和计算样式(来自样式表)

改变:

else if (window.getComputedStyle) {

:

if (window.getComputedStyle) {

小提琴分叉:http://jsfiddle.net/MXgbh/1/