【问题标题】:Render a div visible or hidden depend on mouseOver and mouseOut根据 mouseOver 和 mouseOut 渲染 div 可见或隐藏
【发布时间】:2020-08-23 20:25:18
【问题描述】:

我有这 9 张卡片,当鼠标悬停在我要隐藏/可见的组件上时,每张卡片 .

``
<div class="cards__food">
    <% @foods.each do |food| %>
      <%= link_to(foods_path) do %>
        <div class="card__food">
          <div class="card__food-img" style="background-image: url(<%= food.image_url %>);"></div>
          <h3><%= food.name.upcase %></h3>
          <div id="hide">
            <p>ORDER</p>
          </div>
        </div>
        <% end %>
      <% end %>
  </div>

#hide {
  visibility: hidden;
}
  • 我选择了每张卡片。每个都被分配到一个变量卡。
  • 为了影响我做了同样的事情

这是我的麻烦,没有 forEach 我无法使用 addEventListener。

控制台说:

TypeError:cards.addEventListener 不是函数

所以我使用了 forEach。但是当鼠标悬停在卡片上时,只有第一张卡片会触发并呈现可见或隐藏:

          <div id="hide">
            <p>ORDER</p>
          </div>

取决于鼠标悬停/鼠标移出

const addOrderToFood = () => {
  const cards = document.querySelectorAll(".card__food");
  const order = document.getElementById('hide');
  if (cards) {
    cards.forEach(card => {
      card.addEventListener("mouseover", (event) => {
        console.log(event)
        order.style.visibility='visible';
      })
      card.addEventListener("mouseout", (event) => {
        console.log(event)
        order.style.visibility='hidden';
      })
    })

  }

}

我找不到问题,我真的很想打败这段代码哈哈! :D

【问题讨论】:

  • 问题是每次调用addOrderToFood 方法时都附加eventListner。您无需遍历所有卡片并附加 eventlistner。

标签: javascript html css ruby ruby-on-rails-4


【解决方案1】:

纯 CSS 就可以了。 hide 选择器不应该是 id,因为它在页面上出现了多次。

.card__food:hover > .hide {
    visibility: 'visible';
}
.card__food > .hide {
    visibility: 'hidden';
}

【讨论】:

  • 所以我应该删除 forEach() ?
  • 是的,删除它。
  • .card__food > .hide { &:hover { visibility: 'visible'; } } .card__food > .hide { 可见性:'隐藏'; }
  • 如果我删除 forEach 我有这个错误:TypeError: cards.addEventListener is not a function
  • 感谢您的帮助,让您变得如此简单!哈哈
猜你喜欢
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 2023-04-05
  • 2023-03-10
  • 2011-01-20
  • 1970-01-01
相关资源
最近更新 更多