【发布时间】:2015-08-27 18:41:12
【问题描述】:
我有一个网页,它将新闻文章的链接显示为正方形,背景图片拉伸了整个高度和宽度,并在底部有一个包含文本的叠加层。
我需要在将鼠标悬停在父 div 上时显示图像(视图图标)。这需要在每个新闻链接元素上发生(会有很多)。
解决方案 #1
我可以使用 CSS 来实现这一点,但据我所知,我需要将图像作为 img 元素添加到每个需要它的 div 中。由于这种感觉像是在浪费时间,我寻找了另一种方法。
解决方案 #2
使用 JavaScript 和 JQuery,我可以在将鼠标悬停在新闻链接上时创建一个 img 元素,并附加到新闻链接。这意味着我可以使用 css 定位它,并使用 JQuery 添加类。
$('.slides .image-container').on('mouseover', function(){
if ($('.view-symbol').length === 0) {
var img = $(document.createElement('img'));
img
.attr('src', 'images/view.png')
.addClass('view-symbol');
$(this).append(img);
}
});
这应该检查图像是否已经显示。如果没有,那么它将创建它。
$('.slides .image-container').on('mouseout', function(){
if ($('.view-symbol').is(':hover')) {
$('.view-symbol').show();
}
$('.view-symbol').on('mouseover', function(event){
event.preventDefault();
});
$('.view-symbol').hide(0, function(){
$('.view-symbol').remove();
});
});
然后在 div 上发生 mouseout 事件时将其隐藏。
这个方法的问题
使用此方法,当鼠标悬停在图像本身上时,它会检测到鼠标已离开新闻链接的父 div,因此会删除该元素。删除后,鼠标再次悬停在新闻元素上,图像返回。这会产生闪烁。
问题
有没有办法修改我的代码,或者我可以指出一种不同的方法来解决这个问题?
#编辑
这是链接的输出 html
<div class='small-12 medium-6 large-4 columns'>
<div id='news-left'>
<div class='image-container'>
<img src='images/news1.jpg'>
<div class='news-overlay'>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quis est, qui non oderit libidinosam
</p>
</div>
</div>
</div>
</div>
【问题讨论】:
-
为什么用 jquery 让事情变得过于复杂,创建的链接的 html 输出是什么?你能提供吗?
-
答案是使用简单的css来实现这个效果,不需要jquer。
-
你查看过背景图片吗?您可以只触发新闻前面的任意元素的背景图像。
-
您可以使用
:after伪元素,并将其与:hover结合使用,这样您就不必更改任何现有标记 - jsfiddle.net/ypj1b94h -
尼克太棒了,几乎正是我所追求的。我可以修改它以完美地为我工作。如果你想作为答案,我会接受。谢谢
标签: javascript jquery html css