当鼠标悬停在文本上时显示图像

3
我正在创建一个简单的库存应用程序,目前有一张表格列出所有库存物品。当用户悬停在每个物品的描述上时,我希望显示该物品的图像,但列表中可能有许多不同的物品,每个物品都有自己的图片。我正在使用下面的物品测试一些代码,但它不正确地工作,因为这两个物品只显示同一张图片。
我如何才能获得列表中每个物品的不同图片呢?
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');
}
);

我相信这将需要太多的代码和手动维护。它会怎样? - Just code
4个回答

9

最好的方法就是使用jQuery。

  1. 将jQuery库链接到您的项目中,将其放置在标题标记内
  2. 按照以下代码操作

$(".Your_class").mouseenter(function(){
        if ($(this).parent('div').children('div.image').length) {
            $(this).parent('div').children('div.image').show();
        } else {
            var image_name=$(this).data('image');
            var imageTag='<div class="image" 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.image').hide();
    });
<html>
<head>
<title>Bikash Test</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
</head>
<body>
<div>
    <a class="Your_class" href="#" data-image="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png">Show Image</a>
</div>
<div style="margin-left:250px;">
    <a class="Your_class" href="#" data-image="https://istack.dev59.com/q1b4w.webp?s=64&g=1">Another Image</a>
</div>
</body>
</html>

  1. data-image: 在这里保留您的图像名称
  2. 为div(imageTag字符串)提供适当的样式

5

建议隐藏元素而非销毁,这通常更好,浏览器会感谢你。

为什么?当你将display属性从block变为none,或从none变为block时,浏览器必须销毁该元素并重新渲染。而当你只是隐藏它时,浏览器只需定位它即可。

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

请查看其运行效果:https://jsfiddle.net/b5Lvq7yL/ 另一方面,如果您想使用JavaScript以使其更具可重用性和可维护性,我建议您将此想法与一些通用CSS相结合,并将其视为您可能稍后要在软件的其他部分(或其他项目)中使用的内容。
实际上,您可以泛化这个想法。
您可以拥有一个触发选择器".onhover-toggle-child-class",它从"data-target"中获取其子级并在鼠标进入和离开时切换"data-toggle"中的类。
使用相同的HTML但其他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>

一些非常通用的CSS。
.on-top {
  z-index: 99;
}

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

.shown {
  display: block;
}

.hidden {
  display: none;
}

还有一些使用jQuery的JavaScript代码

$('.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);
  }
);

或者,如果您想使用原生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);
});

请查看两个示例的工作效果:https://jsfiddle.net/kg22ajm6/ 您可以创建使用 opacity: 0 和 opacity: 1 的类来实现 "fadeIn" 和 "fadeOut"。通常情况下,CSS 比原始的 Javascript 或 jQuery 更好,jQuery 的 fadeIn 和 fadeOut 需要手动执行动画,而 CSS 转换已嵌入浏览器中。
请查看使用透明度动画的示例:https://jsfiddle.net/Lwcbn0ae/1/ 敬礼,

1
使用CSS的display:none属性将图片隐藏,当鼠标悬停时使用Jquery的鼠标悬停事件显示它,再次鼠标移出时再次隐藏它。
$( "#id" ).mouseenter(function() {
    // code here
});

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

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

试一下吧...你从来没有把它们放在同一个元素中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接