【发布时间】:2016-07-11 17:03:11
【问题描述】:
我有一个不同尺寸的图片列表。
images = ['https://example.com/1.jpg','https://example.com/2.jpg', ... ]
我想在渲染它们之前获取它们的高度数组。然后,我将仅根据 scrollHeight 渲染应在视口中的图像。例如使用React Infinte
我可以在 react 组件之外轻松做到这一点
let imgHeights = images.map(imgUrl => {
var img = new Image()
img.src = imgUrl
return img.height;
})
但是 new image() 在 react 中不起作用,因为它依赖于 DOM。
我的 React 组件渲染方法如下所示。
var ImageList = (images) => {
let buildImageList = images.map(imgUrl => {
return <img src= {imgUrl}></img>
})
let imgHeights = images.map(imgUrl => {
let img = new Image()
img.src = imgUrl
return img.height //this doesn't work
})
return (
<Infinte elemetHeight = {imgHeights} onInfiniteLoad ={buildImageList} />
)
}
如何获得图像高度?我应该使用 ReactDOM 在临时 div 中渲染图像吗?
【问题讨论】:
-
嗯应该可以工作,因为你并没有真正渲染
new Image,只是使用api来获取高度。当您说“不起作用”时,您能详细说明什么不起作用吗?img.height返回什么? -
每次都返回0。
-
它返回 0。我认为新图像依赖于 DOM
-
问题是当您在 Image 对象上设置
src属性时,浏览器会异步获取图像。您需要注册onload回调,以便在图像下载完成时收到通知。只有这样你才能得到尺寸。