559 Stimmen

Mit jQuery erkennen, ob ein Element sichtbar ist

Verwendung von .fadeIn() y .fadeOut() Ich habe ein Element auf meiner Seite ein-/ausgeblendet, aber mit zwei Schaltflächen, eine zum Ausblenden und eine zum Einblenden. Ich möchte nun Folgendes haben un Taste zum Umschalten zwischen ambos .

Mein HTML / JavaScript wie es ist:

<a onclick="showTestElement()">Show</a>
<a onclick="hideTestElement()">Hide</a>

function showTestElement() {
  $('#testElement').fadeIn('fast');
}

function hideTestElement() {
  $('#testElement').fadeOut('fast');
}

Mein HTML/JavaScript, wie ich es gerne haben möchte:

<a onclick="toggleTestElement()">Show/Hide</a>

function toggleTestElement() {
  if (document.getElementById('testElement').***IS_VISIBLE***) {
    $('#testElement').fadeOut('fast');
  } else {
    $('#testElement').fadeIn('fast');
  }
}

Wie kann ich feststellen, ob das Element sichtbar ist oder nicht?

778voto

Bojangles Punkte 95745

Sie suchen nach:

.is(':visible')

Obwohl Sie wahrscheinlich Ihren Selektor ändern sollten, um jQuery zu verwenden, wenn man bedenkt, dass Sie es sowieso an anderen Stellen verwenden:

if($('#testElement').is(':visible')) {
    // Code
}

Es ist wichtig zu beachten, dass, wenn eines der übergeordneten Elemente eines Zielelements ausgeblendet ist, dann .is(':visible') auf das Kind wird zurückkehren false (was sinnvoll ist).

jQuery 3

:visible hat den Ruf, ein recht langsamer Selektor zu sein, da er den DOM-Baum durchqueren muss, um eine Reihe von Elementen zu untersuchen. Es gibt jedoch gute Nachrichten für jQuery 3, da diese Stelle erklärt ( Ctrl + F pour :visible ):

Dank der detektivischen Arbeit von Paul Irish bei Google konnten wir einige Fälle identifizieren, in denen wir einen Haufen zusätzlicher Arbeit überspringen konnten, wenn benutzerdefinierte Selektoren wie :visible mehrmals im selben Dokument verwendet werden. Dieser spezielle Fall ist jetzt bis zu 17 Mal schneller!

Denken Sie daran, dass selbst mit dieser Verbesserung Selektoren wie :visible und :hidden teuer sein können, weil sie vom Browser abhängen, um festzustellen, ob Elemente tatsächlich auf der Seite angezeigt werden. Das kann im schlimmsten Fall eine komplette Neuberechnung der CSS-Stile und des Seitenlayouts erfordern! Wir raten zwar in den meisten Fällen nicht von ihrer Verwendung ab, empfehlen aber, Ihre Seiten zu testen, um festzustellen, ob diese Selektoren Leistungsprobleme verursachen.


Um Ihren speziellen Anwendungsfall noch weiter zu vertiefen, gibt es eine integrierte jQuery-Funktion namens $.fadeToggle() :

function toggleTestElement() {
    $('#testElement').fadeToggle('fast');
}

0 Stimmen

Können Sie diese Eigenschaft verwenden, um eine Funktion aufzurufen, sobald ein Element sichtbar wird?

0 Stimmen

Wissen Sie, ob dies funktioniert, wenn das übergeordnete Element nicht sichtbar ist, denn technisch gesehen, wenn das übergeordnete Element nicht sichtbar ist, ist das Element nicht sichtbar.

3 Stimmen

@Felipe Laut diese Seite ... ein Element ist sichtbar, wenn sein vom Browser gemeldeter OffsetWidth oder OffsetHeight größer als 0 ist . Dieses JSBin zeigt, dass wenn ein Elternteil versteckt ist, auch seine Kinder versteckt sind

48voto

Ry- Punkte 208020

Das ist nicht nötig, verwenden Sie einfach fadeToggle() auf das Element:

$('#testElement').fadeToggle('fast');

Hier ist eine Demo.

15 Stimmen

Dies ist eine dieser kniffligen Antworten, bei denen die Frage eindeutig nach einer Sache fragt, aber die beste Vorgehensweise für den Auftraggeber eine andere ist.

30voto

Ivan Castellanos Punkte 7622
if($('#testElement').is(':visible')){
    //what you want to do when is visible
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X