我正在构建一个动态加载内容的网站,根据内容的结果替换图像。但是,当浏览器加载图像时,会显示alt属性,通常是难看的方式。如果可能的话,我想保留alt属性,但是当浏览器下载图像时,图像应该显示而不会闪烁'alt'属性。有没有人遇到这个问题并找到了解决方案?
我正在使用jQuery。
答案 0 :(得分:3)
您可以在加载图片时暂时禁止替代文字。像这样:
$(function ()
{
var ATTR = 'alt';
$('img').each(function ()
{
var $this = $(this);
$this.data(ATTR, $this.prop(ATTR)).removeProp(ATTR);
}).load(function ()
{
var $this = $(this);
$this.prop(ATTR, $this.data(ATTR);
});
});
重构版本:
$(function ()
{
var ATTR = 'alt';
function disableAlt()
{
var $this = $(this);
$this.data(ATTR, $this.prop(ATTR)).removeProp(ATTR);
}
function enableAlt()
{
var $this = $(this);
$this.prop(ATTR, $this.data(ATTR);
}
$('img').each(disableAlt).load(enableAlt);
});
答案 1 :(得分:2)
您可以“预加载”您的图片,只有在加载后才能交换src
。
var tmp = new Image();
tmp.src = "yourimage.png";
tmp.onload = function() {
$("#actual_image").prop("src", tmp .src);
};
答案 2 :(得分:1)
更改图像来源时,请尝试以下操作:
$('#image-id').fadeOut(250, function () {
$(this).attr('src', 'new-source.jpg');
}).on('load', function () {
$(this).fadeIn(250);
});
这会淡化图像,使其不可见,然后更改它的来源,当图像加载后,它会淡入。
以下是演示:http://jsfiddle.net/xSkau/
请注意,.on()
是jQuery 1.7中的新增内容,在这种情况下与.bind()
相同。
答案 3 :(得分:0)
您可以在数据属性中存储alt,然后在加载图像后将alt属性添加到图像。
答案 4 :(得分:0)
这个怎么样:
var alt = $('#myimg').attr('alt');
$('#myimg').attr('alt', '');
$('#myimg').load(function () {
$(this).attr('alt', alt);
});
答案 5 :(得分:0)
类似于MДΓΓБДLL上面的答案,但更多jQueryish:
$('img').each(function() {
var $this = $(this);
$this.data("alt", $this.attr("alt")).removeAttr("alt");
}).load(function() {
var $this = $(this);
$this.attr($this.data("alt"));
});
这样做非常简单:对于每个<img>
,将它的alt
属性存储在jQuery的缓存中,删除属性,然后加载图像。完成后,将alt
设置回原来的状态,从缓存中提取值。