如何在使用JQuery加载图像后运行代码
How to run code after an image has been loaded using JQuery
我试图加载元素后,img元素已加载,但我已经尝试了一切我能想到的和没有工作。现在我想看看代码停止工作的地方,我发现我设置的警报没有在我需要执行代码的行之后运行。
$img = $('#picture');
function bubbleOnLoad() {
$(document).ready(function() {
$img.load(function(){
alert('document loaded')
$('#left-bubble').show();
})
})
$img是在函数中定义的。警报对文档起作用。准备线,而不是在$img.load
之后。我尝试过添加事件监听器、jquery .on、.load等。我还调用了在init函数中运行的函数。谁能给我解释一下为什么什么都不起作用?
function choosePic()
$('.speechbubble').hide();
$('#picture').remove();
var randomNum = Math.floor(Math.random() * samplePics.length);
var img = new Image();
img.onload = function() {
$('.playing-field').prepend(img);
handleImageLoad();
}
img.src = samplePics[randomNum];
img.id = "picture";
}
var samplePics =
"assets/images/barack-obama.jpg",
"assets/images/donald-trump_3.jpg",
"assets/images/dt-2.jpg",
"assets/images/bill-clinton.jpg",
"assets/images/Rose-Byrne.jpg",
"assets/images/pic.jpeg",
"assets/images/priest.jpg",
"assets/images/tb.jpg",
"assets/images/test.jpg",
"assets/images/amy-poehler.jpg",
"assets/images/stephen-colbert.jpg",
"assets/images/aziz-ansari.jpg"
];
你的代码中有一些语法错误,我纠正了,并提出了这个:
function bubbleOnLoad() {
$img = $('#picture');
$img.load(function () {
alert('document loaded');
$('#left-bubble').show();
});
}
$(document).ready(function () {
bubbleOnLoad();
});
这里是JSFiddle演示
在你的代码中,你甚至没有告诉浏览器它应该在图像加载后运行代码。你应该这样做:
$(function(){
// DOM Content is ready, let's interact with it.
$('#picture').attr('src', 'image.jpg').load(function() {
// run code
alert('Image Loaded');
});
});
根据文档,开发人员试图使用.load()快捷方式解决的一个常见挑战是,当图像(或图像集合)完全加载时执行函数。这里有几个需要注意的警告。这些都是:
- 它不一致也不可靠跨浏览器
- 如果图像src被设置为与之前相同的src,它在WebKit中不会正确触发
- 它没有正确地冒泡DOM树可以停止触发已经存在于浏览器缓存中的图像
试试这个jQuery插件waitForImages
https://github.com/alexanderdickson/waitForImages//Javascript/jQuery
$(document).ready(function(){
var counter = 0,totalImages= $('#preloader').find('img').length;
$('#preloader').find('img').waitForImages(function() {
//fires for all images waiting for the last one.
if (++counter == totalImages) {
$('#preloader').hide();
yourCallBack();
}
});
});
/*css*/
#preloader{
position:absolute;
top:-100px;/*dont put in DOM*/
}
#preloader > img{
width:1px;
height:1px;
}
<!--HTML [add the plugin after jQuery] -->
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery.waitforimages/1.5.0/jquery.waitforimages.min.js" ></script>
<!--HTML [after body start] -->
<div id=preloader>
<img src="1.jpg" />
<img src="2.jpg" />
<img src="3.png" />
<img src="4.gif" />
<img src="5.jpg" />
</div>
只能在DOM中创建HTML元素后才能访问。
此外,您需要检查图像是否在显示之前加载。
因此,您的代码需要如下所示:
$(document).ready(function() {
bubbleOnLoad();
});
function bubbleOnLoad() {
var newSrc = "https://lh5.googleusercontent.com/-lFNPp0DRjgY/AAAAAAAAAAI/AAAAAAAAAD8/Fi3WUhXGOY0/photo.jpg?sz=328";
$img = $('#picture');
$img.attr('src', newSrc) //Set the source so it begins fetching
.each(function() {
if(this.complete) {
alert('image loaded')
$('#left-bubble').show();
}
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="left-bubble" style="display:none">
<img id="picture"/>
</div>
相关文章:
- 如何在运行时使用javascript隐藏图像
- HTML/JS github页面项目没有't在使用firefox运行时加载图像或声音
- 运行POST时显示图像
- 如何在MVC5中运行时在HTML5 Canvas中显示图像
- 无法使用javascript插件在首次运行时加载实际图像大小(图像在刷新后加载)
- 在多个元素上运行的函数插入多个图像
- 运行fancybox thumb时隐藏其他图像
- 加载图像后运行JS
- Bxslider预加载程序在没有图像的情况下以无限循环运行
- 检查运行到CORS的图像是否存在
- 如果光标在图像上在某种意义上不停止.它正在运行
- 带有谷歌地图和天气图像的网页只能在IE中运行,在Chrome中无效
- 在生产模式下运行时,图像不会显示在 yeoman 应用中
- 网页:当我在本地运行时出现某些图像,但在互联网上显示时会消失
- 运行一个函数,每次
到达窗口中间时更改图像
- 我的 jQuery 滑块运行良好,但存在错误,它有时不会在下次或上一次单击时显示图像
- 如何在浏览器中完成图像大小调整后运行功能?(JS/JQuery)
- 在页面加载时运行 Jquery 函数,而不是在图像单击时运行
- 在图像点击时运行Javascript
- 寻找一种在一个页面上运行多个图像循环仪的方法