图像是否可见

时间:2011-12-20 07:33:11

标签: javascript dom visibility

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

限制

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

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

  3. 下面的

    代码:(取自 here在我的 DEMO

    中不起作用

    问题:您能帮忙制作更好的剧本吗?

    版本A

    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;}
    }
    

1 个答案:

答案 0 :(得分:1)

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

更改:

else if (window.getComputedStyle) {

要:

if (window.getComputedStyle) {

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