2017-03-09 2 views
1

Je crée une application d'inventaire simple, et j'ai actuellement une table qui liste tous les articles en stock. Je voudrais afficher une image de chaque élément lorsque l'utilisateur survole la description de chaque élément, mais il peut y avoir plusieurs éléments différents dans la liste et chacun a sa propre image. Je testais du code avec les éléments ci-dessous mais cela ne fonctionne pas correctement car seule l'image s'affiche pour les deux éléments.Afficher l'image en survolant le texte

Comment puis-je obtenir une image différente pour chaque élément d'une liste?

HTML

<li> 
<a href="#">Get Well</a> 
<div class="place-image"><img src="../img/Get%20Well.jpg"></div> 
</li> 

<li> 
<a href="#">I Love You</a> 
<div class="place-image"><img src="../img/I%20Love%20You.jpg"></div> 
</li> 

Javascript

$('a').hover(
function() { 
    $('.place-image').fadeIn('slow'); 
},function() { 
    $('.place-image').fadeOut('slow'); 
} 
); 
+0

Je crois que cela nécessiterait trop de code et de maintenance manuelle. Comment ça va? –

Répondre

1

La meilleure façon est que vous venez d'utiliser jQuery.

  1. Lien la bibliothèque jQuery à votre projet, placez-le dans balise d'en-tête
  2. Suivez le code

$(".Your_class").mouseenter(function(){ 
 
     var image_name=$(this).data('image'); 
 
     var imageTag='<div style="position:absolute;">'+'<img src="'+image_name+'" alt="image" height="100" />'+'</div>'; 
 
     $(this).parent('div').append(imageTag); 
 
    }); 
 
    $(".Your_class").mouseleave(function(){ 
 
     $(this).parent('div').children('div').remove(); 
 
    });
<html> 
 
<head> 
 
<title>Bikash Test</title> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
</head> 
 
<div> 
 
    <a class="Your_class" href="#" data-image="http://www.claraapollo.com/wp-content/uploads/2017/01/images.duckduckgo-3.jpg">Show Image</a> 
 
</div> 
 
<div style="margin-left:250px;"> 
 
    <a class="Your_class" href="#" data-image="http://www.therocks.com/media/52168/The_Rocks_Discovery_Museum_exterior.jpg">Another Image</a> 
 
</div> 
 
</body> 
 
</html>

  1. données-image: -keep votre image nom ici
  2. Donner une application styles appropriés à la div (chaîne imageTag) fi
0

HTML

<div class="hover_img"> 
<span><img src="images/01.png" alt="image" height="100" /></span 
<a href="#">Show Image</a> 
</div> 

CSS

.hover_img a { position:relative; } 
.hover_img span { position:absolute; display:none; z-index:99; } 
.hover_img a:hover span { display:block; } 

Il suffit de l'essayer ... Vous ne mettez jamais ensemble les deux dans un même élément

1

Mettez l'image cachée sur l'initiale en utilisant css display:none et sur la souris sur l'utilisation Jquery souris sur l'événement montrez-le et à nouveau sur la souris cachez-le comme:

$("#id").mouseenter(function() { 
    // code here 
}); 

$("#outer").mouseout(function() { 
    // code here 
}); 
3

Juste une recommandation, il est normalement préférable de cacher plutôt que de détruire, les navigateurs vous en seront reconnaissants.

Pourquoi? Lorsque vous désactivez le bloc d'affichage ou qu'aucun bloc ne se bloque, le navigateur doit détruire l'élément et le restituer. Lorsque vous le cachez, le navigateur doit simplement le positionner.

HTML

<a href="#"><div class="hover-img"> 
    Show Image 
    <span><img src="http://placehold.it/150x150" alt="image" height="100" />  </span> 
</div></a> 

CSS

a .hover-img { 
    position:relative; 
} 
a .hover-img span { 
    position:absolute; left:-9999px; top:-9999px; z-index:9999; 
} 
a:hover .hover-img span { 
    top: 20px; 
    left:0; 
} 

Voir fonctionner https://jsfiddle.net/b5Lvq7yL/

D'autre part, étant donné que vous souhaitez utiliser javascript afin de le rendre plus réutilisable et maintenable, Je vous suggère de combiner l'idée avec un CSS générique et de le considérer comme quelque chose que vous voudrez probablement utiliser plus tard pour d'autres sections du logiciel (ou d'autres ojects)

En fait, vous pouvez généraliser.

Vous pouvez avoir un sélecteur de trigger ".onhover-toggle-child-class", qui prend son enfant de "data-target" et bascule les classes dans "data-toggle" à chaque fois que la souris entre et sort ..

En utilisant le même code HTML que vous avez, mais d'autres classes CSS

<div> 
    <a href="#" class="relative onhover-toggle-child-class" data-target=".target" data-toggle="hidden shown">Show Image 
    <span class="absolute target hidden on-top"> 
     <img src="http://placehold.it/150x150" alt="image" height="100" /> 
    </span> 
    </a> 
</div> 

<div> 
    <a href="#" class="relative onhover-toggle-child-class" data-target=".target2" data-toggle="hidden shown">Show Image 
    <span class="absolute target2 on-top hidden"> 
     <img src="http://placehold.it/150x150" alt="image" height="100" /> 
    </span> 
    </a> 
</div> 

Certains CSS super générique.

.on-top { 
    z-index: 99; 
} 

.relative { 
    position: relative; 
} 
.absolute { 
    position: absolute; 
} 

.shown { 
    display: block; 
} 

.hidden { 
    display: none; 
} 

Et javascript (en utilisant jQuery)

$('.onhover-toggle-child-class').on(
    'mouseenter mouseleave', 
    function() { 
    var element = $(this); 
    var selector = element.data('target'); 
    var child = element.find(selector); 
    var classes = element.data('toggle'); 


    child.toggleClass(classes); 
    } 
); 

Ou, si vous souhaitez utiliser vainilla javascript:

var queried = document.querySelectorAll('.onhover-toggle-child-class'); 
var elements = Array.prototype.slice.call(queried); 
var onhover = function(event) { 
    var element = event.srcElement || event.target; 
    var selector = element.getAttribute('data-target'); 
    var classes = element.getAttribute('data-toggle').split(' '); 
    var childs = element.querySelectorAll(selector); 
    //console.log(selector, classes, childs); 
    childs.forEach(function(child) { 
    classes.forEach(function(toggleClass) { 
    if (child.classList.contains(toggleClass)) 
     child.classList.remove(toggleClass); 
    else 
     child.classList.add(toggleClass); 
    }); 
    }); 
} 

elements.forEach(function(element) { 
    element.addEventListener('mouseenter', onhover); 
    element.addEventListener('mouseleave', onhover); 
}); 

Voir les exemples de travail: https://jsfiddle.net/kg22ajm6/

Vous peut créer des classes qui utilisent l'opacité: 0 et l'opacité: 1 afin de rendre le "fadeIn" nd "fadeOut". CSS est normalement un meilleur choix que JavaScript ou jQuery brut, fadeIn et fadeOut de jQuery animent manuellement et les transitions CSS sont intégrées dans les navigateurs.

Vérifiez l'exemple en utilisant l'animation d'opacité: https://jsfiddle.net/Lwcbn0ae/1/

Cordialement,