在地图功能中获取图像尺寸?

时间:2019-05-04 22:43:29

标签: javascript reactjs image

我正在尝试使用<img>函数遍历循环并将图像URL列表映射到React中的.map()标签,但是我想根据每个图像是垂直图像还是垂直图像进行分类。水平。这是我的代码:

const images = ['path/to/image1.jpg', 'path/to/image2.jpg']
const imageList = images.map((imageSrc) => {
  const image = new Image()
  image.src = imageSrc
  let ratio = 1
  image.onload = () => {
    ratio = image.width / image.height
  }
  return <img src={imageSrc} className={ratio > 1 ? 'img_horiz' : 'img_vert'} />
})

但是,当页面呈现时,imageList为空。有什么方法可以将垂直/水平类别追溯附加到每个图像?还是有一种方法可以使用.map()函数来实现?预先感谢!

2 个答案:

答案 0 :(得分:1)

您可以依赖onLoad函数,然后基于该函数更改className。检查以下代码:在组件中,您可以添加以下功能

onImgLoad = ({ target: img }) => {
        let ratio = img.offsetWidth / img.offsetHeight;
        img.className = ratio > 1 ? "img_horiz" : "img_vert";
      };

----------让函数按如下方式处理onLoad事件

const images = ['path/to/image1.jpg', 'path/to/image2.jpg']
    const imageList = images.map((imageSrc) => {
      return <img src={imageSrc} onLoad={this.onImgLoad} />
    })

答案 1 :(得分:0)

您正在创建new Image(),然后再不返回它。我想您想改成这样:

const images = ['path/to/image1.jpg', 'path/to/image2.jpg']
const imageList = images.map((imageSrc) => {
  const image = new Image()
  image.src = imageSrc
  image.ratio = 1
  image.className = 'img_vert'
  image.onload = () => {
    image.ratio = image.width / image.height
    image.className = ratio > 1 ? 'img_horiz' : 'img_vert'
  }

  return image
})