【发布时间】:2018-08-08 23:52:20
【问题描述】:
在一个 svg 标记中,有多个图像元素,显示缩略图。由于图片较多,页面加载耗时较长。所以我想实现一个简单的延迟加载,比如David Walsh’s Simple Image Lazy Load and Fade。对于 img 元素,它工作正常。但是对于 SVG 区域的图像元素,将不会进行加载。 示例:
<div>
<img id="myimg" height="20" width="20" data-src="img1.jpg"/>
</div>
<div>
<svg width="10%">
<image id="myimage" height="20" width="20" xlink:href="img1.jpg"/>
</svg>
</div>
还有JS编码:
// This works fine
var img = jQuery("#myimg");
img.attr('src', img.attr('data-src'));
img.on("load", function () {
img.removeAttr('data-src');
});
// This doens't work, onload will not be processed, image will not be not shown
var image = jQuery("#myimage");
image.attr('xlink:href', image.attr('data-href'));
image.on("load", function () {
image.removeAttr('data-href');
});
脚本将以这种方式离开页面:
<div>
<img id="myimg" height="20" width="20" data-src="img1.jpg"/>
</div>
<br>
<div>
<svg width="10%">
<image id="myimage" height="20" width="20" data-href="img1.jpg" xlink:href="img1.jpg"/>
</svg>
</div>
为什么 onload 不适用于此 SVG 图像元素?
【问题讨论】:
-
是什么让您认为
<svg>元素中的<image>元素具有onload事件? -
我发现 onload 是图像元素的图形事件属性之一,在 SVG 文档结构规范 1.1 中定义
标签: javascript image svg onload