我正在使用jQuery将图像添加到另一个DOM元素。现在我不想淡出添加的图像,但它不会很好,我猜是因为图像是在文档加载后添加的!?刚刚添加的jQuery访问DOM
这里是我的代码
$('#t' + u).html('<img style="top: 100px;" src="'+data[dataRnd].img+'"/>').find('img').fadeOut(5000);
我正在使用jQuery将图像添加到另一个DOM元素。现在我不想淡出添加的图像,但它不会很好,我猜是因为图像是在文档加载后添加的!?刚刚添加的jQuery访问DOM
这里是我的代码
$('#t' + u).html('<img style="top: 100px;" src="'+data[dataRnd].img+'"/>').find('img').fadeOut(5000);
而不是使用html()
的,首先创建img
作为一个jQuery DOM对象。之后,您可以将其附加到容器并淡出。
var $img = $('<img style="top: 100px;" src="'+data[dataRnd].img+'"/>');
var $container = $('#t' + u).empty();
$img.appendTo($container).fadeOut(5000);
问题的 “清洗” 作用会因为动画可能在图像加载之前启动。正如@adaneo正确建议的那样,.load()
方法可用于在加载图像时添加事件处理程序,并启动动画。这仍然有一些cross-browser issues (see Caveats),但如果load
事件没有触发,您可以在几秒钟内开始动画。
$img.on('load', function() {
$(this).fadeOut(5000);
}).appendTo($container);
setTimeout(function() {
$img.trigger('load');
}, 2000);
bazmegakapa的答案是相当不错的,我用的是自己去了,但这里是另一种方式:
一旦文档已被加载(并连接到该事件的脚本有之前添加的任何HTML都不提供给脚本。
那么还有其他两种方式我所知道的选择尚不存在的元素:
你可以使用.on()
到处理程序绑定到不存在的元素。这不是我知道有很多关于但是这可能帮助: http://api.jquery.com/on/
另一种方式是等待,直到你的处理程序绑定到它之前添加HTML - 例如:
$(function(){
//i run when the doc loads
$.get('someurl', function(data){
$('body').append('<img src="'+data+'" id='myNewElem'/>');
//I run after the element is added to the DOM, so I can select it here
$('img#myNewElem').fadeOut();
});
});
再次我会去与以前的答案个人,这些只是你可以完成同样的事情的其他方式。
编辑:
第三种选择就是有点更适合您的是一个负载()事件附加到您添加到页面的图像,并淡出出来,一旦图像完成加载。
例子:
$('#elem').html('<img src="someSrc" id="myImage">');
$('#myImage').load(function(){
$(this).fadeOut();
});
这将防止褪色发生之前的图像是在网页上可见。
希望这有助于
'live()'已被弃用,如您所链接的页面所述。请不要建议它。 – kapa 2012-02-29 10:49:37
啊,我的错。见编辑后。 – jammypeach 2012-02-29 10:50:57
你做它应该工作得很好的方式,但应该有图片的加载检查,是这样的:
$('#t' + u)
.html('<img style="top: 100px;" src="'+data[dataRnd].img+'"/>')
.children().load(function() {
$(this).fadeOut(5000);
});
用于'.load()'的+1,格式化为可读性。我仍然说,写入时就不应该写/读DOM。请注意'.load()'仍然存在严重的跨浏览器问题:[docs - 请参阅警告部分](http://api.jquery.com/load-event/#load1)。 – kapa 2012-02-29 10:57:34
什么是错的他在干什么? [FIDDLE](http://jsfiddle.net/DQyC6/1/) – adeneo 2012-02-29 10:43:52
如果图像加载时间较长,它可能会创建竞争条件。即你可以在没有任何动画的情况下淡出它,因为图像还没有被显示 – jammypeach 2012-02-29 10:46:52
@ adeneo嗯,它可以工作。但是,当您创建元素并将其添加到DOM时,“添加到DOM然后读取DOM”并不高雅。 – kapa 2012-02-29 10:52:15