【问题标题】:how to display the right movie informations in an overlay?如何在叠加层中显示正确的电影信息?
【发布时间】:2021-12-05 21:46:18
【问题描述】:

我正在寻找在我的叠加层中显示正确电影信息的解决方案。 我有一个“弹出窗口”,当我点击一部电影时会出现,它应该在其中显示电影的信息,但是当我点击一部电影时,无论它是哪一部电影,它只显示最后一部电影的信息,应该我要修复它吗?

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)
        })
    })
    
}

【问题讨论】:

    标签: javascript popup


    【解决方案1】:

    问题是您获取了每部电影的所有 .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 元素,您可以获得相关的电影并在其中写下他的名字。

    【讨论】:

    • 我明白了,但我不确定“i”指的是什么以及它的用途?你能给我解释一下吗?
    • forEach 方法应用了一个带有两个(实际上更多,但在我们的例子中只需要这些)参数的回调函数。第一个是元素,第二个是当前索引。因此,例如使用 ['a', 'b', 'c'].map((e, i) =&gt; console.log(e, i) 之类的内容,您可以看到 a 0 然后是 b 1 然后是 c 2
    • 好的,我想我明白了,还有一个问题:你不需要在回调中增加'i',它会自己做吗?
    • 是的,map 函数可以解决这个问题。您可以随时阅读 MDN 文档以获取更多信息,链接如下:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
    猜你喜欢
    • 2011-06-20
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多