正确的jQuery图像加载()
Proper jQuery image load()?
<script type="text/javascript">
jQuery(document).ready(function(){
setTimeout(function(){
jQuery('.my-image').each(function(){
jQuery(this).greyScale({
fadeTime: 200,
reverse: false
});
$(this).animate({ 'opacity' : 1 }, 1000);
$(this).load(function(){
jQuery(this).greyScale({
fadeTime: 200,
reverse: false
});
$(this).animate({ 'opacity' : 1 }, 1000);
});
});
}, 200);
});
</script>
在上面的示例中,我使用了 greyScale() 函数,该函数将图像复制到画布中并保持两个版本(灰色 = 默认值,颜色 = 悬停)。
它在 99% 的时间内工作正常,但是当浏览器首次运行时,它有时无法加载 1 张图像、2 张图像或类似的东西。就像"加载"和"正常事件"都不起作用一样。
有人可以确认我做得是否正确吗?如果图像已经存在或不存在,我会尝试加载该事件,然后有替代的"load()"来确保它在加载后将执行。从逻辑上讲,这似乎是很好的解决方案。
测试图像是否已加载的一个好方法是尝试访问其尺寸,如果可以获得图像的高度或宽度,则可以假设它已加载并对其进行灰度缩放。因此,您可以修改代码以执行此操作:
jQuery('.my-image').each(function()
{
var greyscale = function(image)
{
jQuery(image).greyScale({
fadeTime: 200,
reverse: false
});
}
if ( jQuery(this).width() )
{
// it's loaded, greyscale its ass
greyscale( this );
}
else
{
// wait for the load
$(this).load(greyscale);
}
});
在这种情况下,由于您希望图像首先是灰度的,因此我建议以编程方式插入图像:
在您的<img>
标签所在的位置,将它们替换为<div>
标签,您可以在其中添加data-src
属性,这将包含图像的 URL。
加载文档后,使用遍历所有<div>
标签的脚本,并在<div>
标签中插入<img>
标签,例如:
jQuery('div.my-image').each(function()
{
var el = jQuery( this );
// get the src for the image
var src = el.data( 'src' );
// start loading the image
var img = new Image();
img.onload = function()
{
// greyscale it
jQuery(img).greyScale({
fadeTime: 200,
reverse: false
});
// append it
el.append( img );
}
// load the image by setting the src
img.src = src;
});
不要依赖.load()
函数来处理图像。
甚至jQuery也这么说。
与图像一起使用时加载事件的注意事项
开发人员尝试使用 .load() 解决的常见挑战 快捷方式是在执行函数时的图像(或集合 图像)已完全加载。有几个已知的警告 这一点应该注意。这些是:
它不能始终如一地工作,也不能可靠地跨浏览器工作 它没有 在 WebKit 中正确触发,如果映像 src 设置为 与 之前 它没有正确冒泡 DOM 树 可以停止发射 对于已存在于浏览器缓存中的图像
在这里阅读
如果可以,请使用这个,
$(window).load(function(){
// Images are now loaded for sure
})
编辑:
或者使用Paulirish非常精简的jQuery插件
图像已加载
.load()
可能是一个棘手的问题,但这样的事情应该可以工作(注意this.complete检查):
jQuery('.my-image').each(function(){
$(this).load(function(){
jQuery(this).greyScale({
fadeTime: 200,
reverse: false
});
$(this).animate({ 'opacity' : 1 }, 1000);
});
if (this.complete) {
$(this).trigger('load');
}
});
尽量避免重复代码,这不是最佳做法。
- 如何在谷歌字体加载时显示加载图像
- 预加载图像并插入DOM
- 加载图像时加载图标
- 在页面启动期间加载图像
- 预加载图像image.onload脚本MVC
- 可以't在我的React组件中加载图像
- 加载图像后调整HTML画布的大小
- HTML/JS github页面项目没有't在使用firefox运行时加载图像或声音
- 错误:$injector:modulerr加载图像时模块处于角度
- 谷歌地图加载后隐藏加载图像
- 在照片查看器(Javascript和jQuery)中异步加载图像时可能出现错误
- 正在从字节数组加载图像内容
- 网页上已有tinymce加载图像列表
- 单击提交按钮后加载图像将冻结
- 如何使用Express'正确加载图像;s的静态中间件
- 使用jquery即时加载图像
- Html5画布使用JCanvasScript加载图像
- Javascript使用JCanvaScript在画布中加载图像
- 使用jquery/ajax显示加载图像
- ajax缓存false无法加载图像