如果我有以下内容:
<img src="filler.jpg" class="imgClass" delays="otherImage.jpg" delayw="400" delayw="600" delayt="Loaded">
<img src="filler.jpg" class="imgClass" delays="otherImage2.jpg" delayw="450" delayw="600" delayt="Loaded 2">
$(document).ready(function() {
$(".imgClass").each(function(){
$(this).attr("src", $(this).attr("delays"));
$(this).attr("width", $(this).attr("delayw"));
$(this).attr("height", $(this).attr("delayh"));
$(this).attr("title", $(this).attr("delayt"));
});
})
有没有一种方法可以让宽度,高度和标题属性仅在src属性更改后更改?使用上面的代码,它们似乎都在同一时间发生变化。在一个完美的世界里,我希望他们一次发生一个。至少我希望src改变,然后其他三个改变,因为src改变需要一点点时间。
答案 0 :(得分:2)
您可以使用.onload
回调。这是一个没有jQuery的版本:
var img = document.getElementsByClassName('imgClass');
for (var i = 0, n = img.length; i < n; ++i) {
var el = img[i];
el.onload = function() {
this.width = this.getAttribute('delayw');
this.height = this.getAttribute('delayh');
this.title = this.getAttribute('delayt');
};
el.src = this.getAttribute('delays');
});
注意:要获得更好的HTML5兼容性,请使用data-foo
属性,而不是自己制作。
答案 1 :(得分:1)
检索到图像后会触发load
事件:
$(".imgClass").each(function(){
this.src = $(this).attr("delays"));
}).one('load', function() { // `.one` executes the event handler only once
var $this = $(this);
$this.attr({
width: $this.attr('delayw'),
height: $this.attr('delayh'),
title: $this.attr('delayt')
});
});
为DOM属性分配值通常比分配给HTML属性更受欢迎,因此您可能需要考虑使用.prop
而不是.attr
。
答案 2 :(得分:0)
你可以这样做 -
$(".imgClass").each(function(){
$(this).attr("src", $(this).attr("delays"));
$(this).on('load',function(){
$(this).attr("width", $(this).attr("delayw"));
$(this).attr("height", $(this).attr("delayh"));
$(this).attr("title", $(this).attr("delayt"));
})
})