【问题标题】:How to randomly make appear one by one images from a map with fade?如何随机使地图中的图像一张一张地出现淡入淡出?
【发布时间】:2020-06-24 09:43:00
【问题描述】:

我目前正在为网站创建徽标墙。 我设法用地图随机显示它们,但现在我希望能够让它们一个接一个地随机出现(例如:图像 1、图像 6、图像 3……),并且在它们出现后也让它们可见已经出现了。

我想我必须将它们的不透明度设置为 0,然后将它们的不透明度设置为 1,但我不知道如何以随机方式执行此操作。

感谢您的帮助。

编辑:

这是我的代码:

import React from "react"

const logoImages = [
  {
    image: "/assets/img/companies/altiplan.png",
    src: "Michelin",
  },
  {
    image: "/assets/img/companies/ametis.png",
    src: "Michelin",
  },
  {
    image: "/assets/img/companies/amplitrain.png",
    src: "Michelin",
  },
  {
    image: "/assets/img/companies/ar.png",
    src: "Michelin",
  },
  {
    image: "/assets/img/companies/artau.png",
    src: "Michelin",
  },
  {
    image: "/assets/img/companies/assaabloy.png",
    src: "Michelin",
  },
  {
    image: "/assets/img/companies/bag.png",
    src: "Michelin",
  },
  {
    image: "/assets/img/companies/bea.png",
    src: "Michelin",
  },
  {
    image: "/assets/img/companies/besix.png",
    src: "Michelin",
  },
  {
    image: "/assets/img/companies/bombardier.png",
    src: "Michelin",
  },
  {
    image: "/assets/img/companies/bouygues.png",
    src: "Michelin",
  },
  {
    image: "/assets/img/companies/ca.png",
    src: "Michelin",
  },
  {
    image: "/assets/img/companies/cartel.png",
    src: "Michelin",
  },
  {
    image: "/assets/img/companies/citymall.png",
    src: "Michelin",
  },
  {
    image: "/assets/img/companies/coyote.png",
    src: "Michelin",
  },
];

function shuffleMap(array) {
  let currentIndex = array.length, temporaryValue, randomIndex;
  while (0 !== currentIndex) {
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;
    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }
  return array
  /*array.sort(() => Math.random() - 0.5)
  return array*/
}

const Image = ({image, src}) => {
  return (
    <div className='box'>
      <div className='content'>
        <img src={image} alt={src}/>
      </div>

      {/*language=CSS*/}
      <style jsx>{`
        .box {
            min-width: 150px;
            height: 200px;
            overflow: hidden;
            display: flex;
            align-items: center;
            background: #000;
        }

        img {
            width: 120px;
            filter: grayscale(1) invert(100%);
        }
      `}</style>
    </div>
  )
}

const allImages = shuffleMap(logoImages.map((companies, index) => {
  return <Image key={companies.src+index} {...companies}/>
}));

const LogoWall = () => {
  return (
    <div className='container'>
      {
        allImages
      }
      {/*language=CSS*/}
      <style>{`
        .container {
            width: 100vw;
            height: auto;
            display: flex;
            justify-content: space-evenly;
            align-content: space-around;
            flex-flow: row wrap;
        }
      `}</style>
    </div>
  )
};
export default LogoWall

【问题讨论】:

  • 随机选择,删除该项目,重复,如果你做了什么然后显示你的代码
  • 如果您需要帮助,请显示代码
  • @JoeLloyd 我编辑我的帖子
  • @EugenSunic 如果你想看,我添加了我的代码
  • 如果你放在一个stackblitz中会更好,在线以便它编译......

标签: javascript css reactjs next.js fade


【解决方案1】:

为什么不显示图像后执行间隔

  1. 由于不透明度为 0,您的所有图像都是黑色且随机堆叠
  2. 立即显示第一张图片,因为 0*1000=0 秒
  3. 以下图片会以 1 秒的间隔一张一张显示

代码:

logoImages.forEach((x, i) => {
  setTimeout(() => {
    x.style.opacity = 1
  }, i * 1000)
})

【讨论】:

  • 所以我需要用 forEach 替换我的 logoImages.map 吗?
  • 不,你需要在那之后做,因为你的地图会在视图上显示图像数组,你可以尝试在地图中实现功能
  • 我可能做错了什么,但 forEach 返回“未定义”。
  • 你不应该从 forEach 返回任何东西,只是修改现有元素。如果没有人回复,我会在晚上检查它。
  • 是的,我的意思是,当我执行 console.log 时,它为 forEach 返回 undefined
猜你喜欢
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
相关资源
最近更新 更多