2
votes

L'animation de texte masquée ne fonctionne pas correctement

Je souhaite créer une page similaire à celle-ci: https://lp.anzi.kr /? page = auditeurs . Lorsque vous passez la souris sur un bouton, il se déplace vers le haut et du texte s'affiche avec un arrière-plan.

J'essaye de faire ceci avec le code suivant: https://jsfiddle.net/rcv8b0kh/3/

<div>
  <button>
</button>
  <div class="textcontent">
    <p>some text</p>
  </div>
</div>
button {
  background-color: red;
  border-radius: 50%;
  width: 10rem;
  height: 10rem;
}

button:hover {
  box-shadow: 0px 4rem 6rem -2rem rgba(0, 0, 0, 0.57);
  -moz-box-shadow: 0px 2px 40px -10px rgba(0, 0, 0, 0.57);
  transform: translateY(-3.5rem);
  transition: all .3s ease 0s;
  border: none;
}

.textcontent {
  visibility: hidden;
}

.active {
  visibility: 1;
  transform: translateY(-3.5rem);
  transition: all .3s ease 0s background-color: black;
  color: white
}
$button = document.querySelector('button');
$textcontent = document.querySelector('.textcontent');

if ($button.hover) {
  $textcontent.classList.add('active')
}

Je vois aussi des gens utiliser :: before et :: after pour ce genre d'animations mais je ne sais pas vraiment comment les implémenter ici .


0 commentaires

4 Réponses :


1
votes

Voici une solution avec du CSS pur et : après pseudo élément:

<div>
  <p>some text</p>
</div>
div {
  position: relative;
  width: 10em;
}
p {
  text-align: center;
  transform: translateY(4rem);
}
p:after {
  content: "";
  display: block;
  background-color: red;
  border-radius: 50%;
  width: 10rem;
  height: 10rem;
  transition: all .3s ease 0s;
  transform: translateY(-5rem);
}
div:hover p:after {
  transform: translateY(-12rem);
}


0 commentaires

1
votes

Vous semblez être confus entre javascript et jquery. Cependant, je ne pense pas que ($ button.hover) serait une condition valide dans l'un ou l'autre.

<div>
  <button>
</button>
  <div class="textcontent">
    <p>some text</p>
  </div>
</div>
button {
  background-color: red;
  border-radius: 50%;
  width: 10rem;
  height: 10rem;
}

button:hover {
  box-shadow: 0px 4rem 6rem -2rem rgba(0, 0, 0, 0.57);
  -moz-box-shadow: 0px 2px 40px -10px rgba(0, 0, 0, 0.57);
  transform: translateY(-3.5rem);
  transition: all .3s ease 0s;
  border: none;
}

.textcontent {
  opacity: 0;
  transition: opacity  0.2s linear;
}

.active {
  opacity: 1;
}
button = document.querySelector('button');
textcontent = document.querySelector('.textcontent');
button.addEventListener('mouseover', handlerIn)
button.addEventListener('mouseout', handlerOut)

function handlerIn() {
  textcontent.classList.add('active')
}

function handlerOut() {
  textcontent.classList.remove('active')
}


0 commentaires

0
votes

Vous ne devriez vraiment pas avoir besoin de Javascript pour cela.

Je ne suis pas vraiment sûr de ce que vous recherchez, mais j'utiliserais une transition largeur / opacité sur le .textContent (lorsque le bouton est survolé) et il obtient des résultats très similaires à la page que vous avez liée.

/ p>

<div>
  <button>
</button>
  <div class="textcontent">
    <p>some text</p>
  </div>
</div>
button {
  background-color: red;
  border-radius: 50%;
  border: none;
  width: 10rem;
  height: 10rem;
  transition: all .3s ease 0s; 
}

button:hover {
  box-shadow: 0px 3rem 4rem -2rem rgba(0, 0, 0, 0.57);
  -moz-box-shadow: 0px 3rem 4rem -2rem rgba(0, 0, 0, 0.57);
  transform: translateY(-3.5rem);
  transition: all .3s ease 0s;
  border: none;
}

.textcontent p{
  width:0px;
  opacity:0;
  transition: opacity .3s ease 0s; 
}

button:hover + .textcontent p{
  width:200px;
  opacity:1;
  transition: all .3s ease 0s; 
}


0 commentaires

1
votes

vous n'avez pas besoin de js pour faire cela, c'est une simple méthode css

.hoverbtn {
  background-color: red;
  border-radius: 50%;
  width: 10rem;
  height: 10rem;
}

.hoverbtn:hover {
  box-shadow: 0px 4rem 6rem -2rem rgba(0, 0, 0, 0.57);
  -moz-box-shadow: 0px 2px 40px -10px rgba(0, 0, 0, 0.57);
  transform: translateY(-3.5rem);
  transition: all 0.3s ease 0s;
  border: none;
}

.textcontent {
  opacity: 0;
}

.hoverbtn:hover+.textcontent {
  opacity: 1;
}

et voici css pour masquer et afficher le texte

Si le deuxième élément est directement à l'intérieur du conteneur:

#hoverbtn:hover ~ #textcontent { opacity : 1 }

Si le deuxième élément est à côté (après la balise de fermeture des conteneurs) du conteneur:

#hoverbtn:hover #textcontent { opacity : 1 }

Si le deuxième élément est quelque part dans le conteneur:

#hoverbtn:hover + #textcontent { opacity : 1 }

Si le second élément est un frère du conteneur:

#hoverbtn:hover > #textcontent { opacity : 1 }

voici donc votre css:

<div>
  <button class="hoverbtn" id="hoverbtn">
  </button>
  <div id="textcontent" class = "textcontent">
    <span>some text</span>
  </div>
</div>

référence: https: // stackoverflow. com / a / 4502693/6550949


0 commentaires