Используя .fadeIn()
и .fadeOut()
, я скрывал/показывал элемент на моей странице, но с двумя кнопками, один для скрытия и один для показа. Теперь я хочу, чтобы одна кнопка переключала оба. Поэтому, мой вопрос заключается в том, как определить, является ли элемент видимым или нет?
Мой HTML как есть:
<a onclick="showTestElement()">Show</a>
<a onclick="hideTestElement()">Hide</a>
Мой JS как есть:
<script>
function showTestElement(){
$('#testElement').fadeIn('fast');
}
function hideTestElement(){
$('#testElement').fadeOut('fast');
}
</script>
Мой HTML, поскольку я хотел бы иметь его:
<a onclick="toggleTestElement()">Show/Hide</a>
My JS, как хотелось бы, хотя чистый jQuery будет приятным:
<script>
function toggleTestElement(){
if (document.getElementById('testElement').***IS_VISIBLE***) {
$('#testElement').fadeOut('fast');
}
else{
$('#testElement').fadeIn('fast');
}
}
</script>
Любая помощь с благодарностью получила..
Вы ищете:
.is(':visible')
Хотя вы, вероятно, должны изменить свой селектор, чтобы использовать jQuery, учитывая, что вы используете его в других местах:
if($('#testElement').is(':visible')) {
// Code
}
Важно отметить, что если какой-либо из родительских элементов целевого элемента скрыт, то .is(':visible')
для дочернего объекта вернет false
(что имеет смысл).
:visible
имеет репутацию довольно медленного селектора, поскольку он должен проходить дерево DOM, проверяя кучу элементов. Однако хорошие новости для jQuery 3, как этот пост объясняет (Ctrl + F для :visible
):
Благодаря какой-то детективной работе Пола Ирриша в Google мы выявили некоторые случаи, когда мы могли пропустить кучу дополнительной работы, когда пользовательские селектора типа: visible используются много раз в одном документе. Этот конкретный случай теперь в 17 раз быстрее!
Имейте в виду, что даже с этим улучшением селектора типа: visible и: hidden могут быть дорогими, потому что они зависят от браузера, чтобы определить, действительно ли элементы отображаются на странице. Это может потребовать, в худшем случае, полного пересчета стилей CSS и макета страницы! Хотя мы не препятствуем их использованию в большинстве случаев, мы рекомендуем тестировать ваши страницы, чтобы определить, вызывают ли эти селекторы проблемы с производительностью.
Расширяясь еще до вашего конкретного варианта использования, существует встроенная функция jQuery, называемая $.fadeToggle()
:
function toggleTestElement() {
$('#testElement').fadeToggle('fast');
}
Нет необходимости, просто используйте fadeToggle()
для элемента:
$('#testElement').fadeToggle('fast');
if($('#testElement').is(':visible')){
//what you want to do when is visible
}