Как проверить, виден ли элемент с помощью jQuery?

я использую

$('#analytics').toggle("slide");

для переключения видимости элемента. Но когда я пытаюсь проверить, видно ли, используя

$('#analytics').is(":visible")

Он всегда отображается как видимый после того, как был переключен видимым один раз ...

Как лучше всего проверить видимость элемента, если он контролируется с помощью функции переключения jQuery?

Возможный дубликат Как проверить, скрыт ли элемент в jQuery?

Matheus Cuba 02.04.2018 19:58

в зависимости от того, как вы определяете свои компоненты, я бы сохранил его как логическое значение в вашем объекте, а затем применил и ссылался соответственно ... Поскольку некоторые вложенные структуры могут стать довольно сложными. Причина, по которой я сказал, заключается в том, что, возможно, #analytics виден, но некоторые дочерние элементы div могут не отображаться.

Fallenreaper 02.04.2018 19:58

Лучше всего было бы придумать скрипт live snippet / js, который имеет именно эту проблему, чтобы каждый мог увидеть и протестировать его.

Isac 02.04.2018 19:59

Замечание Re @ Isac: вы можете выполнить минимальный воспроизводимый пример, демонстрирующий проблему, в идеале - работоспособный, используя Stack Snippets (кнопка панели инструментов [<>]; вот как это сделать).

T.J. Crowder 02.04.2018 20:00

То, что вы показали в вопросе, явно получает false после завершения slide: jsfiddle.net/bwz2dkh5 Итак, нам действительно нужен этот MCVE.

T.J. Crowder 02.04.2018 20:04

не могли бы вы проверить мои изменения и отзывы?

Scaramouche 02.04.2018 20:32
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что display - это то, что вы ищете:

РЕДАКТИРОВАТЬ

Я только что попробовал ваш собственный $('#analytics').is(":visible") и подумал, что может быть проблема с вашим время (думаю, асинхронный); попробуйте этот код, который ждет, пока анимация не закончится, прежде чем запрашивать видимость, по крайней мере, в фрагменте работает, я был бы очень признателен за ваш отзыв.

$('button').click(function(){
  $('#analytics').toggle("slide", function(){
    console.info($('#analytics').is(":visible") ? 'visible':'hidden');
  });
  
});
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id = "analytics">analytics</div>
<button>button</button>

Дисплей - это не то же самое, что и видимость, это не сработает

Sterling Archer 02.04.2018 20:01

@SterlingArcher, ты ведь нажал Запустить фрагмент кода, да?

Scaramouche 02.04.2018 20:02

Что делать, если кнопка не отображается на экране (пользователь прокручивает вниз), в то время как CSS все еще настроен на отображение?

Chin Leung 02.04.2018 20:04

@Scaramouche: Есть несколько аспектов того, чтобы быть видимым, см. документация jQuery для функции :visible, которую использует OP.

T.J. Crowder 02.04.2018 20:05

@ChinLeung, я не думаю, что не отображается, потому что окно было прокручено - это то, к чему стремился ОП, когда пробовал $('#analytics').is(":visible")

Scaramouche 02.04.2018 20:06

@ T.J.Crowder, OP использует $('#analytics').toggle("slide"); для переключения видимости элемента, и что делает .toggle("slide"), помимо его первой анимации, устанавливает display на none, верно? что является ключом к моему ответу. конечно, вы не можете сузить видимость до состояния display, но в этом случае, как OP переключает его, это вполне жизнеспособно IMO

Scaramouche 02.04.2018 20:09

@Scaramouche: конечно, но :visible это проверяет. Поэтому, если :visible не работает (согласно OP), выполнение собственной проверки только на display тоже не сработает.

T.J. Crowder 02.04.2018 20:20

@ T.J. Crowder, пожалуйста, проверьте мои изменения и скажите, что вы думаете

Scaramouche 02.04.2018 20:31

@Scaramouche: это полностью возможный (и почему я опубликовал рабочий пример для OP и попросил OP показать нам реальную проблему), но это предположение до тех пор, пока / если они этого не сделают, - поэтому я публикую комментарий, а не ответ.

T.J. Crowder 03.04.2018 00:19

Ответ @Scaramouche был правильным и правильным. Ключевым моментом была проверка видимости внутри функции переключения из-за выполнения асинхронного кода. Спасибо!

Aerodynamika 03.04.2018 10:01

Другие вопросы по теме