使用 jquery 将悬停标题添加到选项卡图片库

Adding hover title to tab image gallery with jquery

我已经通过 W3Schools but with jquery instead of javascript as shown 建立了一个像这样的画廊。

我在修改时遇到问题,也许有人可以提供帮助:我使用以下代码将使用图像 alt 标签的鼠标悬停标题添加到缩略图:

//show alt as title on hover
var alt;
var $imgElem = $('.column img');

$imgElem.each(function(){
    alt = $(this).attr('alt');
    $(this).parent().append('<h2>' + alt + '</h2>');
});

与 css

配合使用效果很好
.column {
position:relative;
}
.column h2 {
position:absolute;
top:0;left:0;
width:420px;
background:#EDE9D6;
font-size:38px;
line-height:90px;
padding:0 30px;
box-sizing:border-box;
opacity:0;
cursor:pointer;
}
.column:hover h2 {
opacity:1;
}

现在的问题是,当标题可见时,没有用于更改展开图像的 onclick 函数。有人知道如何将该功能添加到 h2 标题吗?我尝试了以下方法,但没有用(图像总是一样的):

$(".column h2").click(function() {
        console.clear();
        var newclass = $(".column img").attr("src");
        console.log(newclass);
        var oldclass = $("#expandedImg").attr("id");
        console.log(oldclass);
        
        $(".stage").show();

        $("#expandedImg").attr('src', newclass).hide().fadeIn("slow");
        //set new source and hide element in order to be able to fade it in again

    });

这是html:

<div class="stage">
  <div id="imgtext"></div>
  <span class="closebtn">×</span>
  <img id="expandedImg" />
</div> 
<div id="column1" class="column">
  <img src="train.jpg" alt="train" title="train" />
</div>
<div id="column2" class="column">
  <img src="bike.jpg" alt="bike" title="bike" />
</div>
<div id="column3" class="column">
  <img src="cake.jpg" alt="cake" title="cake" />
</div>

感谢您的帮助和想法。

var alt;
var $imgElem = $('.column img');

$imgElem.each(function(){
    alt = $(this).attr('alt');
    $(this).parent().append('<h2>' + alt + '</h2>');
});

$(".column h2").on("click", function(){ alert('Hello') });
.column {
  position: relative;
}

.column h2 {
  position: absolute;
  top: 0;
  left: 0;
  width: 420px;
  background: #EDE9D6;
  font-size: 38px;
  line-height: 90px;
  padding: 0 30px;
  box-sizing: border-box;
  opacity: 0;
  cursor: pointer;
}

.column:hover h2 {
  opacity: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="stage">
  <div id="imgtext"></div>
  <span class="closebtn">×</span>
  <img id="expandedImg" />
</div>
<div id="column1" class="column">
  <img src="https://via.placeholder.com/150" alt="train" title="train" />
</div>
<div id="column2" class="column">
  <img src="https://via.placeholder.com/150g" alt="bike" title="bike" />
</div>
<div id="column3" class="column">
  <img src="https://via.placeholder.com/150" alt="cake" title="cake" />
</div>

现在你在 h2 上有一个点击事件。 你到底想要什么? 也许你可以解释得更详细一些。

所以您的代码中存在一些问题。

您不需要顶部的全局 alt var,您正在通过 Jquery 使用 h2 标签创建动态元素。

所以在那种情况下你也想使用

$(document).on('click','.column h2',function(){

});

而不是

$(".column h2").click(function() {

});

为了防止事件冒泡与动态创建的元素,特别是如果你想在不同的 js 文件中加载点击事件。

还有

//var oldclass = $("#expandedImg").attr("id");
//console.log(oldclass);

除了控制台记录 id 属性外不做任何事情,它不提供任何功能。

在 HTML 中,我添加了一个样式属性 display:none 因为您要显示它然后在之后淡入。

<div class="stage" style="display:none">
  <div id="imgtext"></div>
  <span class="closebtn">×</span>
  <img id="expandedImg" />
</div> 

点击事件中我改了

var newclass = $(this).siblings("img").attr("src");

由于您正在为 .column h2 执行点击事件,因此您要确保使用 $(this) 来识别您点击的是哪一个,然后遍历到该列的兄弟项,即“img”

接下来我修改了这一行

$("#expandedImg").hide().attr('src', newclass).fadeIn(5000);

您想首先按照您的要求隐藏 img id,然后将 source 属性设置为 newclass var,它再次在点击事件中获取 $(this) 的兄弟。然后你 fadein 我把它设置为 5000 但你可以把它改回 "slow"

所有这些都是变化

<style>

.column {
position:relative;
}

.column h2 {
position:absolute;
top:0;left:0;
width:420px;
background:#EDE9D6;
font-size:38px;
line-height:90px;
padding:0 30px;
box-sizing:border-box;
opacity:0;
cursor:pointer;
}


.column:hover h2 {
opacity:1;
}

</style>

<div class="stage" style="display:none">
  <div id="imgtext"></div>
  <span class="closebtn">×</span>
  <img id="expandedImg" />
</div> 
<div id="column1" class="column">
  <img src="https://via.placeholder.com/350x300" alt="train" title="train" />
</div>
<div id="column2" class="column">
  <img src="https://via.placeholder.com/350x200" alt="bike" title="bike" />
</div>
<div id="column3" class="column">
  <img src="https://via.placeholder.com/350x100" alt="cake" title="cake" />
</div>


<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<script>

//show alt as title on hover


$('.column img').each(function(){
    alt = $(this).attr('alt');
    $(this).parent().append('<h2>' + alt + '</h2>');
});



$(document).on('click','.column h2',function(){

        console.clear();
        
        var newclass = $(this).siblings("img").attr("src");
        console.log(newclass);
        
        //var oldclass = $("#expandedImg").attr("id");
        //console.log(oldclass);
        
        $(".stage").show();

        $("#expandedImg").hide().attr('src', newclass).fadeIn(5000);
        //set new source and hide element in order to be able to fade it in again

});

</script>

我使用了 HTML 占位符图像

https://via.placeholder.com/350x300
https://via.placeholder.com/350x200
https://via.placeholder.com/350x100

演示并轻松查看图像正在更改来源