【问题标题】:Overlay on hover in vue.js在 vue.js 中悬停时覆盖
【发布时间】:2019-07-22 23:57:39
【问题描述】:

我试图在 vue.js 中将鼠标悬停在图像上时实现显示文本,但我有点卡住了。我试图在具有多个图像的数组上实现此示例: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_image_overlay_fade

我有一个非常大的 vue 文件,但这是必不可少的:

模板:

</template>

[...]

<div v-for="item in filteredPeople" v-bind:key="item.id" class="list-complete-item">
  <router-link @mouseover.native="hovertext" :to="'/'+item.link">
    <img class="list-complete-img" :src="'http://placehold.it/400x300?text='+item.id" alt>  
  </router-link>
</div>

[...]

</template>

脚本

<script>
export default {
  data() {
    return {
      info: [
        {
          id: 1,
          title: "Title one",
          link: "project1",
          hovertext: "project1 hover text lorem lorem lorem",
          category_data: {
            "1": "Category 1"
          }
        },
[...]
  methods: {
    hovertext() {
      console.log("");
    },

我有一些想法尝试使用一种方法将文本放在图像下方的 div 中,但是我无法让文本在悬停时出现在图像上方。而且我无法正确使用方法...不太确定这是一种好方法,

我还发现了这个 codepen 示例: https://codepen.io/oliviaisarobot/pen/xzPGvY

这与我想要做的非常接近,但我也无法在此处显示文本。

我有点失落。任何帮助如何在 vue 中做到这一点?

--------- 更新 ----------

我希望图像框可以拉伸,以便它们始终适合窗口,但我的 flexbox 行之间似乎有一个我似乎无法摆脱的间隙。您可以看到空白区域。我附上我的样式表。

.list-complete { 显示:弯曲; 高度:自动; 弹性方向:行; flex-flow:换行; }

.list-complete-item {
  flex: 0 1 50%;
  display: inline-block;
}

.list-complete-item a {
  display: inline-block;
  position: relative;
  width: 100%;
  height: auto;
  outline: 1px solid #fff;
}

.list-complete-img {
  width: 100%;
}

.text {
  color: rgb(186, 74, 74);
  position: absolute;
  top: 50%;
  left: 50%;
  -webkit-transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%);
  transform: translate(-50%, -50%);
  text-align: center;
}

.list-complete-item a:hover .overlay {
  opacity: 1;
}

.overlay {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  overflow: hidden;
  height: 60%;
  width: 100%;
  opacity: 0;
  transition: 0.5s ease;
  background-color: #008cba;
}

【问题讨论】:

  • 您尝试做的很多事情都依赖于 CSS。

标签: vue.js hover


【解决方案1】:

你不需要使用 js(vue) 事件。用普通的 CSS 来做,就像你链接到的例子一样。

使用这个模板:

<div v-for="item in filteredPeople" v-bind:key="item.id" class="list-complete-item">
    <router-link :to="'/'+item.link">
        <img class="list-complete-img" :src="'http://placehold.it/400x300?text='+item.id" alt>
        <div class="overlay">
            <div class="text">{{ item.hovertext }}</div>
        </div>
    </router-link>
</div>

并对其进行样式化:

.list-complete-item {
    width: 400px;
    height: 300px;
    display: inline-block;
}
.list-complete-item a {
    display: inline-block;
    position: relative;
    width: 400px;
    height: 300px;
}
.list-complete-item a .image {
    display: block;
    width: 100%;
    height: auto;
}
.list-complete-item a .overlay {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    height: 100%;
    width: 100%;
    opacity: 0;
    transition: .5s ease;
    background-color: #008CBA;
}
.list-complete-item a:hover .overlay {
    opacity: 1;
}
.list-complete-item a .text {
    color: white;
    font-size: 20px;
    position: absolute;
    top: 50%;
    left: 50%;
    -webkit-transform: translate(-50%, -50%);
    -ms-transform: translate(-50%, -50%);
    transform: translate(-50%, -50%);
    text-align: center;
}

最后的结果:

【讨论】:

  • 我还有一个问题,我更新了我上面的帖子。我希望图像框可以拉伸,以便它们始终适合窗口,但我的 flexbox 行之间似乎有一个间隙,我似乎无法摆脱。您可以看到空白区域。我附上我的样式表。
猜你喜欢
  • 2017-10-20
  • 1970-01-01
  • 2012-10-07
  • 2020-01-14
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多