2016-10-15 2 views
1

Im обучение css, html и javascript на неделю или 5, и я создаю сайт для школы для проекта.javascript скрипт не отображает/скрывает определенный элемент div

Но я столкнулся с этой проблемой:

В HTML я заказал некоторые дивы, как это:

<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> 

когда пользователь парит над окружностью-внутренней, то DIV с классом popup01 должен стать видимым им.

Таким образом, когда пользователь парит над внутренним полукругом это Javascript должен работать:

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

во внешнем файле CSS стиля для popup01 является:

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

Когда я пытаюсь это, скрытый, но когда я наводил на него курсор, он скрыт.

Я попытался использовать атрибут отображения в CSS и использовать оператор if, чтобы он всегда был скрыт до тех пор, пока пользователь не нахлынет на круг.

Я искал в Интернете эту проблему, но не смог найти что-то подобное.

Если вам нужна дополнительная информация, просто дайте мне знать :).

+1

Предоставить jsfiddle –

+0

Сколько раз код HTML-кода, который вы рассматривали, повторяется в вашем HTML-источнике? Другое дело, 'getElementsByClassName' возвращает массив, поэтому вам нужно использовать индекс указанного элемента. Последнее примечание, использующее 'onmouseover', должно использоваться с другим' onmouseout'. – SaidbakR

ответ

1

В JS document.getElementsByClassName возвращает коллекцию узлов 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

спасибо, ребята, я didn ' я знаю, что он вернет массив. добавив [0] после того, как getElementByClassName() исправил его. – kaymanv

0

document.getElementsByClassName возвращает массив.

Вы можете использовать как этот

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

document.getElementsByClassName возвращает массив. Поэтому вы должны сделать

document.getElementsByClassName("popup01")[0].style.visibility = "visible"; 

Таким образом, я предлагаю пойти с чистым решением css. Что-то вроде:

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

Могу ли я спросить, почему вы использовали visibility свойство вместо display?

+0

Я использовал свойство отображения до этого, но он не работал, поэтому я думал, что свойство видимости будет работать вместо этого, но не будет успеха. Есть ли предпочтение использовать дисплей вместо видимости? – kaymanv

+0

Они работают разные. Хотя 'display: none' полностью скрывает элемент в dom, установка' visibility: hidden' просто делает элемент невидимым, но он будет использовать пространство, которое нужно отобразить. так, например, если у вас есть 3 блока с высотой 30 пикселей по одному, один над другим, то: 1. используя «display: none» во втором блоке, делает третий шаг вверх до места, где была вторая. 2. Использование «видимости: скрытый» во втором, оставит пустое пространство между первым и третьим, тем же пространством, что и второй блок. – hector22x

+0

@kaymanv http://stackoverflow.com/questions/272360/does-opacity0-have-exactly-the-same-effect-as-visibilityhidden/273076#273076 Есть более подробная информация об этом – hector22x

1

Скорее всего, ваш Javascript функция не работает и есть ошибка. Пожалуйста, откройте dev console в своем браузере и сообщите нам, какая у вас ошибка.

Кроме того, я рекомендую вам как хорошую практику, держите dev console перед глазами, пока вы развиваетесь. Это, безусловно, сэкономит вам время и поможет найти корень любой проблемы гораздо быстрее.

В любом случае, вы можете исправить свои исправления для функции hover. Я думаю, это может помочь.

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

Кроме того, взгляните на реактивные или угловые или, по крайней мере, на jquery.

+0

спасибо, ребята, я не знал, что он вернет массив. добавив [0] после того, как getElementByClassName() исправил его. – kaymanv

+0

Я попробую консоль dev, это действительно очень полезно. Я также посмотрю на угловые и jquery. спасибо за ваш ответ и советы – kaymanv

Смежные вопросы