Есть ли единый способ узнать, видим ли узел или нет? - PullRequest
8 голосов
/ 18 июня 2010

Я бы хотел знать, если узел виден и отображается на экране. Насколько я знаю, есть как минимум 3 стандартных и простых способа сделать узлы HTML невидимыми:

  • Настройка opacity: 0;
  • Настройка display: none;
  • Настройка visibility: hidden.

Я мог бы проверить только эти три, но я боюсь, что люди могут проявить творческий подход, когда дело доходит до способов скрыть содержание:

  • Отправка элемента за пределы экрана с использованием отрицательных полей;
  • Использование ширины или высоты 0 и скрытие переполнения;
  • гораздо больше, я верю, что люди развились.

Так что мне было интересно, существует ли стандартный способ определения, отображается ли узел на экране. Я уверен, что все основные браузеры сами определяют его для ускорения рисования, так что, возможно, он каким-то образом выставлен.

Ответы [ 2 ]

1 голос
/ 18 июня 2010

Вы можете попробовать использовать модификатор jQuery :visible.

http://api.jquery.com/visible-selector/

К сожалению, я вполне уверен, что не учитывает ни одного "хитрого" случая, о котором вы говорите.

0 голосов
/ 18 июня 2010

Если это ваша страница, то вы можете иметь большую часть контроля, и это становится вопросом применения стандартов, которые вы внедряете. Если это страница forign (например, если вы пишете букмарклет), то число переменных чрезвычайно велико.

Видимость означает разные вещи для людей и браузеров. Браузер должен знать контекст и расположение страницы, а также занимает ли объект место, что верно даже в случаях opacity:0 и visibility:hidden, и именно поэтому jQuery работает таким образом.

Так что вам нужно будет посмотреть на конкретный элемент, включая его поля, отступы, атрибуты переполнения, видимость, отображение, все настройки непрозрачности, также проверьте color:rgba(*,*,*,0). Затем вам нужно просмотреть каждый родительский объект вплоть до документа.

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