如何在叠加层中显示正确的电影信息?

how to display the right movie informations in an overlay?

我正在寻找在叠加层中显示正确电影信息的解决方案。 我有一个“弹出 window”,当我点击一部电影时出现,它应该在其中显示电影的信息但是当我点击一部电影时,无论是哪一部电影,它只显示最后一部电影信息,我应该怎么做才能解决它?

const movieIntegration =() => {
    allMovies.map(movie=> {
        movieGallery.innerHTML += `<div class="imgContainer">
                                        <img src="${movie.img}" alt="${movie.name}">
                                                <div class="titleContainer">
                                                    <div class="movieTitle"> ${movie.name} </div>
                                                    <div class="seemore"> See more </div>
                                                </div>
                                    </div>`

        const seemore = document.querySelectorAll(".seemore")
        seemore.forEach(elm => {
            elm.addEventListener("click",() => {
                pageContainer.innerHTML += `<div class="popupContainer">
                                                <div class="popup">

                                                    ${movie.name}

                                                    <div id="likeButton">
                                                        <img src="img/like.png">
                                                    </div>

                                                    <div id="editButton">
                                                        <img src="img/edit.png">
                                                    </div>

                                                    <a href="submit.html">
                                                        <div id="addingButton">
                                                            <img src="img/add.png">
                                                        </div>
                                                    </a>
                                                </div>
                                            </div>`
                console.log(true)
            }, true)
        })
    })
    
}

问题是您正在获取每部电影的所有 .seemore 元素,并且您正在编辑每部电影的所有元素的内容,因此最后一部电影将覆盖所有之前的内容。

解决方案可能是这样的:

const movieIntegration = () => {
  allMovies.map((movie) => {
    movieGallery.innerHTML += `<div class="imgContainer">
                                <img src="${movie.img}" alt="${movie.name}">
                                <div class="titleContainer">
                                  <div class="movieTitle"> ${movie.name} </div>
                                  <div class="seemore"> See more </div>
                                </div>
                              </div>`
  })
  const seemore = document.querySelectorAll('.seemore')
  seemore.forEach((elm, i) => {
    elm.addEventListener(
      'click',
      () => {
        pageContainer.innerHTML += `<div class="popupContainer">
                                      <div class="popup">
                                        ${allMovies[i].name}
                                        <div id="likeButton">
                                          <img src="img/like.png">
                                        </div>
                                        <div id="editButton">
                                          <img src="img/edit.png">
                                        </div>
                                        <a href="submit.html">
                                          <div id="addingButton">
                                            <img src="img/add.png">
                                          </div>
                                        </a>
                                      </div>
                                    </div>`
      },
      true
    )
  })
}

通过这种方式,您在完成 allMovies 的映射后映射 .seemore 元素,并且对于每个 .seemore 元素,您将获得关联的电影并在其中写下他的名字。