Является ли изображение видимым или нет - PullRequest
0 голосов
/ 20 декабря 2011

Проверьте, видно ли пользователю изображение, которое я собираюсь получить с помощью кода, или нет

Ограничения :

  1. Простой javascript - не предлагайте jQuery или другие фреймворки

  2. Меня интересуют только display:none и visibility:hidden, но непрозрачность и так далее, конечно, приветствуется

Код: ниже (взято из здесь ) не работает в моем 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 Ответ

1 голос
/ 20 декабря 2011

Попробуйте взять вычисленные условные стили за пределами проверки стиля. Мы хотим проверить как встроенные стили, так и вычисленные стили (из таблиц стилей).

Изменение:

else if (window.getComputedStyle) {

Кому:

if (window.getComputedStyle) {

Разветвленная скрипка: http://jsfiddle.net/MXgbh/1/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...