2016-10-15 7 views
1

Ich lerne CSS, HTML und Javascript für eine Woche oder 5 und ich mache eine Website für die Schule für ein Projekt.Javascript Skript zeigt nicht/verstecken ein bestimmtes div Element

Aber ich stieß gegen dieses Problem:

Im html ich einige divs wie folgt bestellt:

<div class="circledef"> 
    <div class="circle"> 
     <div class="circle-inner" onmouseover="hover()"> 
      <img src="images/inSite/pasfoto.png"> 
     </div> 

     <div class="popup01"> 
      test 
     </div> 
    </div> 
</div> 

, wenn der Benutzer über Kreis-Innen schwebt, die div mit der Klasse popup01 sollte sichtbar werden zu ihnen.

Also, wenn der Benutzer inneren Kreis schwebt über dieses Javascript laufen soll:

function hover(){ 
    document.getElementsByClassName("popup01").style.visibility = "visible"; 
} 

In der externen CSS-Datei der Stil für popup01 ist:

.popup01 { 
    visibility: hidden; 
    position: absolute; 
    left: -10%; 
    top: -10%; 
    width: 50%; 
    height: 50%; 
    border-radius: 50%; 
    background-color: #FFF; 
} 

Als ich dies versuchen, es ist versteckt, aber wenn ich darüber schwebe, bleibt es verborgen.

Ich habe versucht, das Anzeigeattribut in CSS zu verwenden und eine if-Anweisung zu verwenden, um es immer ausgeblendet zu lassen, bis der Benutzer über dem Kreis-inneren schwebt.

Ich habe das Internet nach diesem Problem gesucht, konnte aber etwas ähnliches nicht finden.

Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen :).

+1

Geben Sie jsfiddle –

+0

Wie oft der HTML-Block-Code, den Sie angesehen haben, in Ihrer HTML-Quelle wiederholt wird? Eine andere Sache, 'getElementsByClassName', gibt ein Array zurück, daher müssen Sie den Index des angegebenen Elements verwenden. Die letzte Note, die 'onmouseover' verwendet, sollte mit einer anderen' onmouseout' verwendet werden. – SaidbakR

Antwort

1

In js document.getElementsByClassName eine Sammlung von Knoten zurückgeben http://www.w3schools.com/jsref/met_document_getelementsbyclassname.asp

function hover(){ 
 
    document.getElementsByClassName("popup01")[0].style.visibility = "visible"; 
 
}
.popup01 { 
 
    visibility: hidden; 
 
    position: absolute; 
 
    left: -10%; 
 
    top: -10%; 
 
    width: 50%; 
 
    height: 50%; 
 
    border-radius: 50%; 
 
    background-color: red; 
 
}
<div class="circledef"> 
 
    <div class="circle"> 
 
     <div class="circle-inner" onmouseover="hover()"> 
 
      <img src="images/inSite/pasfoto.png"> 
 
     </div> 
 

 
     <div class="popup01"> 
 
      test 
 
     </div> 
 
    </div> 
 
</div>

+0

danke Jungs, ich habe nicht ' Ich weiß, dass es ein Array zurückgeben würde. durch Hinzufügen der [0] nach getElementByClassName() behoben. – kaymanv

0

document.getElementsByClassName gibt ein Array zurück.

können Sie mögen dieses

document.getElementsByClassName("className")[0].style... 
0

verwenden document.getElementsByClassName ein Array zurückgibt. Also sollten Sie tun

Das sagte, würde ich vorschlagen, mit einer reinen CSS-Lösung gehen. Etwas wie:

.circle:hover .popup01 { 
    visibility: visible; 
} 

Darf ich fragen, warum Sie visibility Eigenschaft statt display verwendet haben?

+0

Ich habe die Anzeige-Eigenschaft zuvor verwendet, aber es hat nicht funktioniert, also dachte ich, die Visibility-Eigenschaft würde stattdessen funktionieren, aber keinen Erfolg. Gibt es eine Präferenz für die Verwendung von Display statt Sichtbarkeit? – kaymanv

+0

Sie arbeiten anders. Während 'display: none' das Element im dom vollständig ausblendet, wird durch das Setzen von' visibility: hidden' das Element unsichtbar gemacht, aber es wird der Platz benötigt, der angezeigt werden soll. Wenn Sie zum Beispiel 3 Blöcke mit jeweils 30px Höhe übereinander haben, dann: 1. Wenn Sie im zweiten Block "display: none" verwenden, wird der dritte zu dem Platz verschoben, an dem der zweite war. 2. Wenn Sie "Sichtbarkeit: Versteckt" in der zweiten Spalte verwenden, bleibt ein leerer Bereich zwischen dem ersten und dem dritten Platz, der gleiche Abstand wie der zweite Block. – hector22x

+0

@kaymanv http://stackoverflow.com/questions/272360/does-opacity0-have-exactly-the-same-effect-as-visibilityhidden/273076#273076 Es gibt weitere Details darüber – hector22x

1

Höchstwahrscheinlich Ihre JavaScript-Funktion nicht und hat einen Fehler funktioniert. Bitte öffnen Sie in Ihrem Browser dev console und teilen Sie uns mit, welchen Fehler Sie haben.

Darüber hinaus würde ich Sie als eine gute Praxis empfehlen, halten Sie dev console vor Ihren Augen, während Sie entwickeln. Es wird auf jeden Fall Zeit sparen und helfen, Wurzel eines Problems viel schneller zu entdecken.

In irgendeiner Weise können Sie meine Korrekturen für Hover-Funktion versuchen. Ich denke, es kann helfen.

function hover(){ 
    document.getElementsByClassName("popup01")[0].style.visibility = "visible"; 
} 

Darüber hinaus schauen Sie auf reagieren oder angular oder zumindest auf jquery.

+0

danke Jungs, ich wusste nicht, dass es ein Array zurückgeben würde. durch Hinzufügen der [0] nach getElementByClassName() behoben. – kaymanv

+0

Ich werde versuchen, die Dev-Konsole, es scheint wirklich sehr nützlich. Ich werde auch auf eckige und jQuery schauen. Danke für Ihre Antwort und Tipps – kaymanv

Verwandte Themen