Всплывающее окно при наведении - PullRequest
1 голос
/ 13 марта 2020

Я хочу отображать всплывающее окно с текстом при наведении курсора на оранжевый текст, но я борюсь с двумя различными ситуациями с кодом, который я написал:

1) Всплывающие окна уже отображаются, когда Вы попали на страницу. Если я попытаюсь display: none в классе «всплывающее», они никогда не будут отображаться.

2) Я хочу, чтобы они относились к слову, а не ко всему абзацу, но я не знаю, как это сделать sh position: relative для класса «выбирать», так как это тег span, и, похоже, это не разрешено.

function showPopupAmplitud() {
  const popup = document.getElementById('popup_amplitud');
  popup.style.display = "";
}

function hidePopupAmplitud() {
  const popup = document.getElementById('popup_amplitud');
  popup.style.display = "none";
}

function showPopupDAW() {
  const popup = document.getElementById('popup_daw');
  popup.style.display = "";
}

function hidePopupDAW() {
  const popup = document.getElementById('popup_daw');
  popup.style.display = "none";
}
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

.text {
  margin-left: 20%;
  margin-right: 42%;
  text-align: justify;
}

.popup_container {
  position: relative;
}

.choose {
  color: #FFAC3E;
  font-weight: bold;
}

.popup {
  padding: 0px 15px 25px 15px;
  background-color: white;
  box-shadow: 1.5px 1.5px 25px rgba(0, 0, 0, 0.3);
  color: #6A6A6A;
  position: absolute;
  width: 50%;
  top: 30px;
  font-size: 16px;
  line-height: 22.7px;
}

.popup p {
  margin-left: 4%;
  margin-right: 4%;
  padding-top: 20px;
}
<div class="text">
  <article>
    <div class="popup_container">
      Nuestro objetivo es que la <span class="choose" onmouseover="showPopupAmplitud()" onmouseout="hidePopupAmplitud()">amplitud</span> de la señal proporcionada por el sintetizador disminuya algunos decibeles cada vez que suene el redoblante. Lo que
      hacemos es asignar un compresor al canal del sintetizador, y mediante el routeo entre ambos canales, activar la opción de Sidechain que tal compresor nos proporciona (no todos los compresores poseen la alternativa de ser utilizados como Sidechain).</br>
      </br>
      <div class="popup" id="popup_amplitud">
        <p>La amplitud de un movimiento oscilatorio, ondulatorio o señal electromagnética es una medida de la variación máxima del desplazamiento u otra magnitud física que varía periódica o cuasiperiódicamente en el tiempo. Es la distancia entre el punto
          más alejado de una onda y el punto de equilibrio o medio.</p>
      </div>
    </div>
    <div class="popup_container">
      En la seccion Mixer del <span class="choose" onmouseover="showPopupDAW()" onmouseout="hidePopupDAW()">DAW</span> a utilizar, se deberá routear el canal que posee asignado el Trigger al canal de la señal a afectar (en el caso de ser FL Studio como
      se muestra en la imagen, se hace click derecho en la flecha inferior y a continuacion “Sidechain to this track”, lo cual generará un enlace entre ambos canales).</br>
      </br>
      <div class="popup" id="popup_daw">
        <p>Una estación de trabajo de audio digital (EAD) o DAW por sus siglas en inglés (Digital Audio Workstation) es un sistema electrónico dedicado a la grabación y edición de audio digital por medio de un software de edición de audio.</p>
      </div>
    </div>
  </article>
</div>

Ответы [ 4 ]

1 голос
/ 13 марта 2020

Нет необходимости в JavaScript здесь, поскольку псевдоселектор :hover будет отлично работать в CSS. При наведении курсора на элемент .choose выберите элемент .popup с помощью селектора брата (~) и установите желаемое состояние.

Примерно так:

.choose:hover ~ .popup { 
  ...
}

Однако я Я предлагаю изменить вашу HTML структуру. Превратите элемент .popup в <span> и поместите его внутри элемента .choose span. Таким образом, вы можете расположить всплывающее окно относительно позиции элемента .choose. И вам не нужно использовать селектор брата сейчас, когда .popup является потомком .choose.

Поместите ваше всплывающее окно с обоими свойствами left и transform, чтобы разместить их прямо под Слово, которое было найдено.

См. пример ниже.

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

.text {
  margin-left: 20%;
  margin-right: 42%;
  text-align: justify;
}

.popup_container {
  position: relative;
}

.choose {
  position: relative;
  color: #FFAC3E;
  font-weight: bold;
}

.popup {
  display: none;
  padding: 15px 15px 25px 15px;
  background-color: white;
  box-shadow: 1.5px 1.5px 25px rgba(0, 0, 0, 0.3);
  background-color: #ffffff;
  color: #6A6A6A;
  position: absolute;
  width: fit-content;
  left: 50%;
  top: 30px;
  font-size: 16px;
  font-weight: normal;
  line-height: 22.7px;
  z-index: 1;
  transform: translate(-50%, 0);
}

.choose:hover .popup,
.popup:hover {
  display: block;
}

.popup p {
  margin-left: 4%;
  margin-right: 4%;
  padding-top: 20px;
}
<div class="text">
  <article>
    <div class="popup_container">
      <p>
      Nuestro objetivo es que la <span class="choose">amplitud
          <span class="popup" id="popup_amplitud">
            La amplitud de un movimiento oscilatorio, ondulatorio o señal electromagnética es una medida de la variación máxima del desplazamiento u otra magnitud física que varía periódica o cuasiperiódicamente en el tiempo. Es la distancia entre el punto
          más alejado de una onda y el punto de equilibrio o medio.
          </span>
        </span> de la señal proporcionada por el sintetizador disminuya algunos decibeles cada vez que suene el redoblante. Lo que hacemos es asignar un compresor al canal del sintetizador, y mediante
      el routeo entre ambos canales, activar la opción de Sidechain que tal compresor nos proporciona (no todos los compresores poseen la alternativa de ser utilizados como Sidechain).</p>
    </div>
    <div class="popup_container">
      <p>
      En la seccion Mixer del <span class="choose">DAW<span class="popup" id="popup_daw">
        Una estación de trabajo de audio digital (EAD) o DAW por sus siglas en inglés (Digital Audio Workstation) es un sistema electrónico dedicado a la grabación y edición de audio digital por medio de un software de edición de audio.
      </span></span> a utilizar, se deberá routear el canal que posee asignado el Trigger al canal de la señal a afectar (en el caso de ser FL Studio como se muestra en la imagen, se hace click derecho en la flecha
      inferior y a continuacion “Sidechain to this track”, lo cual generará un enlace entre ambos canales).
      </p>
    </div>
  </article>
</div>
0 голосов
/ 13 марта 2020

Так что я немного изменил код и подключил onmouseover и onmouseout слушателей к draw и amplitud. Изначально я установил всплывающее окно dispay на none и при наведении курсора на пустую строку. Также я применил z-index к классу popup, чтобы всплывающее окно всегда находилось над текстом

$(document).ready(function() {
  // DOM Elements
  const draw = document.getElementById("draw");
  const popupdraw = document.getElementById("popup_daw");
  const amplitud = document.getElementById("amplitud");
  const popupamplitud = document.getElementById("popup_amplitud");

// Event Listeners
  amplitud.onmouseover = function() {
    popupamplitud.style.display = "";
  };
  amplitud.onmouseout = function() {
    popupamplitud.style.display = "none";
  };

  draw.onmouseover = function() {
    popupdraw.style.display = "";
  };
  draw.onmouseout = function() {
    popupdraw.style.display = "none";
  };
});
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

.text {
  margin-left: 20%;
  margin-right: 42%;
  text-align: justify;
}

.popup_container {
  position: relative;
}

.choose {
  color: #ffac3e;
  font-weight: bold;
}

.popup {
 padding-top:15px;
  background-color: white;
  box-shadow: 1.5px 1.5px 25px rgba(0, 0, 0, 0.3);
  color: #6a6a6a;
  position: absolute;
  width: 50%;
  top: 30px;
  left:50%;
  font-size: 16px;
  line-height: 22.7px;
  z-index: 400;
    display:inline-block;
  vertical-align:top;
}

.popup p {
  margin-left: 4%;
  margin-right: 4%;
  padding-top: 20px;
}
<!DOCTYPE html>
<html lang="en">
  <head>
    <link rel="stylesheet" href="./index.css" />
    <!-- jquery -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  </head>
  <body>
    <div class="text">
      <article>
        <div class="popup_container">
          Nuestro objetivo es que la <span class="choose" id="amplitud">amplitud</span> de la señal proporcionada por el sintetizador disminuya algunos decibeles cada vez que suene el redoblante. Lo que
          hacemos es asignar un compresor al canal del sintetizador, y mediante el routeo entre ambos canales, activar la opción de Sidechain que tal compresor nos proporciona (no todos los compresores poseen la alternativa de ser utilizados como Sidechain).</br>
          </br>
          <div class="popup" id="popup_amplitud" style="display:none">
            <p>La amplitud de un movimiento oscilatorio, ondulatorio o señal electromagnética es una medida de la variación máxima del desplazamiento u otra magnitud física que varía periódica o cuasiperiódicamente en el tiempo. Es la distancia entre el punto
              más alejado de una onda y el punto de equilibrio o medio.</p>
          </div>
        </div>
        <div class="popup_container">
          En la seccion Mixer del <span class="choose" id="draw">DAW</span> a utilizar, se deberá routear el canal que posee asignado el Trigger al canal de la señal a afectar (en el caso de ser FL Studio como
          se muestra en la imagen, se hace click derecho en la flecha inferior y a continuacion “Sidechain to this track”, lo cual generará un enlace entre ambos canales).</br>
          <br/>
          <div class="popup" id="popup_daw" style="display:none">
            <p>Una estación de trabajo de audio digital (EAD) o DAW por sus siglas en inglés (Digital Audio Workstation) es un sistema electrónico dedicado a la grabación y edición de audio digital por medio de un software de edición de audio.</p>
          </div>
        </div>
      </article>
    </div>
    <script src="./index.js"></script>
  </body>
</html>
0 голосов
/ 13 марта 2020

Для вопроса 1 Используйте это:

    .popup_container{display:none;}

    .choose:hover + .popup_container {position:relative;display:auto;}

Для вопроса 2:

Вам необходимо объявить позицию элемента .choose, поместите .popup_container в элемент div .choose, и затем поместите это соответственно.

0 голосов
/ 13 марта 2020

Чтобы навести порядок, вы должны добавить ": hover" перед пропеллером, с которым вы хотите навести курсор, в css. Подробнее: https://www.w3schools.com/cssref/sel_hover.asp Посмотрите, как это работает для вас, и если относительное положение нуждается в каких-либо изменениях.

...