当我将鼠标悬停在缩略图上时,我想删除不透明度和叠加文字。我有几个关于如何做的想法,但我相当肯定他们效率低下且笨拙。
我看到1的问题是它似乎是不必要地使用空间和带宽,并且会导致加载时间变慢。使用2,似乎我必须在每个div的位置进行硬编码,这对维护和更新来说是一种痛苦。我知道这是一个有点普遍的问题,但我对如何解决这个问题感到茫然。如何以一种易于添加新缩略图的方式完成这项相对简单的任务?
答案 0 :(得分:20)
<div class="thumb">
position: relative
添加到.thumb
。<div class="text>
内添加.thumb
。display: none; position: absolute; bottom: 0
添加到.text
。.thumb:hover .text { display: block }
在悬停时显示文字。像这样:http://jsfiddle.net/dYxYs/
您可以使用一些JavaScript / jQuery增强此功能:http://jsfiddle.net/dYxYs/1/
$('.text').hide().removeClass('text').addClass('text-js');
$('.thumb').hover(function(){
$(this).find('.text-js').fadeToggle();
});
这样,基本效果在没有JavaScript的情况下仍然有效,而使用JavaScript的用户可以获得吸引人的淡入淡出效果。
答案 1 :(得分:3)
使用选项2.有一些方法可以不必为每个图像编写jQuery函数。正如我的jsfiddle所见。
http://jsfiddle.net/daybreaker/dfJHZ/
HTML
<img src="http://placekitten.com/300/300" />
<span class="text" style="display:none">THIS IS A KITTEN</span>
<br><br>
<img src="http://placekitten.com/200/200" />
<span class="text" style="display:none">THIS IS A KITTEN</span>
的jQuery
$('img').mouseover(function(){
$(this).css('opacity','.2');
$(this).next('span.text').show();
}).mouseout(function(){
$(this).css('opacity','1');
$(this).next('span.text').hide();
});
你需要修改span.text
css以将其叠加在图像上,但这不应该太糟糕。
答案 2 :(得分:2)
将其包裹在元素中并执行以下操作:
var t;
$('div.imgwrap img').hover(function(){
t = $('<div />').text($(this).attr('title')).appendTo($(this).parent());
$(this).fadeTo('fast',0.5);
},function(){
$(this).fadeTo('fast',1);
$(t).remove();
});
标记类似于:
<div class="imgwrap">
<img src="http://www.gravatar.com/avatar/3d561d41394ff0d5d0715b2695c3dcf0?s=128&d=identicon&r=PG" title="text" />
</div>
答案 3 :(得分:2)
这是一个例子。您可以根据需要定位文本,但下面是基本原则。
#container { position: relative; }
#container img, #container div {
position: absolute;
width: 128px;
height: 128px;
}
#container img { z-index -1; }
#container div {
z-index 1;
line-height: 128px;
opacity: 0;
text-align: center;
}
#container:hover img {
opacity: 0.35;
}
#container:hover div {
opacity: 1;
}
答案 4 :(得分:1)
如果您不想更改HTML包装内容等,我建议您this way。这是jQuery:
$(function() {
$(".thumb").mouseenter(function() {
var $t = $(this);
var $d = $("<div>");
$d.addClass("desc").text($t.attr("alt")).css({
width: $t.width(),
height: $t.height() - 20,
top: $t.position().top
});
$t.after($d).fadeTo("fast", 0.3);
$d.mouseleave(function() {
$(this).fadeOut("fast", 0, function() {
$(this).remove();
}).siblings("img.thumb").fadeTo("fast", 1.0);
});
});
});
答案 5 :(得分:0)
2是一个很好的解决方案,与此完全相同,并没有你想要的那么难;
确实使用css删除不透明度,而不是相对于img定位div,并将其放在上面。它可以用普通的CSS来完成。 z-index就是诀窍。这个div只能用$('#div')显示.slipUp()即。