/ / Animation de survol jQuery sur un seul élément parmi d'autres similaires - javascript, jquery, html, css

Animation de survol jQuery sur un seul élément parmi d'autres - Javascript, jquery, html, css

Je suis nouveau sur Js et jQuery, et j'ai réussi à mettre en placeune animation de changement de largeur sur un div lorsque je survole un autre. Mais quand je mets 3 groupes de divs similaires, un survol sur l'un déclenche l'action sur tous les autres. J'ai essayé de mettre un peu "this" et "next ()" mais ça a juste cessé de fonctionner complètement. Pouvez-vous m'éclairer s'il vous plaît. Je vous remercie

Voici le code.

https://jsfiddle.net/HiD3f/LmbaL1qo/2/

<html>
<div class="mapHideBtn collapsed"></div>
<div class="searchBlock hidden"></div>

<div class="mapHideBtn collapsed"></div>
<div class="searchBlock hidden"></div>

<div class="mapHideBtn collapsed"></div>
<div class="searchBlock hidden"></div>
</html>

<style>
.searchBlock {
display : inline-block;
height: 50px;
background : red;
}
.hidden {
width: 0;
transition : width 0.4s ease-in
}
.shown {
width: 300px;
transition : width 0.4s ease-in
}
.mapHideBtn {
display : inline-block;
width: 50px;
height: 50px;
background : green;
}
</style>

<script>
$(".mapHideBtn").hover(function(){
if ($(this).hasClass("collapsed")) {
$(".searchBlock").removeClass("hidden").addClass("shown");
$(".mapHideBtn").removeClass("collapsed").addClass("expanded");
}

else {
$(".searchBlock").removeClass("shown").addClass("hidden");
$(".mapHideBtn").removeClass("expanded").addClass("collapsed");
};
});

Réponses:

7 pour la réponse № 1

Vous pouvez utiliser $(this).next() et toggleClass() DEMO

$(".mapHideBtn").hover(function(){
$(this).next().toggleClass("shown");
});

Mise à jour: si vous voulez que la barre rouge reste ouverte lorsque vous la survolez, vous pouvez utiliser cette approche CSS pure DEMO ou lieu .searchBlock à l'intérieur .mapHideBtn DEMO


0 pour la réponse № 2

Vous devez changer vos sélecteurs jQuery en $(this) et $(this).next().

Ce que vous rencontrez est un type de boucle qui trouve TOUS les sélecteurs que vous avez marqués et exécute les règles sur eux.

Voici un violon fixe pour vous: https://jsfiddle.net/LmbaL1qo/5/

Et voici le code:

$(".mapHideBtn").hover(function() {
if ($(this).hasClass("collapsed")) {
$(this).next().removeClass("hidden").addClass("shown");
$(this).removeClass("collapsed").addClass("expanded");
} else {
$(this).next.removeClass("shown").addClass("hidden");
$(this).removeClass("expanded").addClass("collapsed");
};
});

0 pour la réponse № 3

La solution est simple:

<script>
$(".mapHideBtn").hover(function(){
if ($(this).hasClass("collapsed")) {
$(this).next().removeClass("hidden").addClass("shown");
$(".mapHideBtn").removeClass("collapsed").addClass("expanded");
}

else {
$(".searchBlock").removeClass("shown").addClass("hidden");
$(".mapHideBtn").removeClass("expanded").addClass("collapsed");
}
});
</script>