html - 使用 Vue 努力显示然后隐藏成功警报

标签 html css vue.js vuejs2

我有一个 Vue 网站并且是 Vue 新手。

我有一个测试按钮,单击它时我想显示 Bootstrap 4(不是 Bootstrap-vue)成功 alert 然后在 x 秒后将其删除。

我已经完成了简单的部分,显示它,但我似乎无法在一定时间后隐藏它。

我的代码:

HTML

<template>
    <transition name="fade" mode="out-in">
        <button type="button" class="btn btn-danger" @click="testToast">TEST BUTTON</button>

        <div v-if="testButClicked" class="alert alert-success" role="alert">
            Item successfully added to your cart
        </div>
    </transition>
</template>

代码

<script>
    export default {
        data() {
            return {
                testButClicked: false
            }
        },

        methods: {
            testToast() {
                this.testButClicked = true;
            }
        }
    }
</script>

CSS

<style scoped>
.fade-enter-active, .fade-leave-active {
  transition: opacity 1.3s ease;
}

.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

我创建了这个 fiddle

我尝试添加一个 watch 来说明何时显示 setTimout 将值设置回 false,然后我尝试在全局文件中使用以下代码集,这样它可以在全局范围内使用它,因为我想在其他页面上使用它,但根本无法使其工作,也找不到有关如何使其工作的帮助

Vue.effect('toast', {
    enter: function (el, insert, timeout) {
        // insert() will actually insert the element
    },
    leave: function (el, remove, timeout) {
        // remove() will actually remove the element
    }
})

然后我尝试了下面的 HTML,它再次正确地转换或删除

<transition name="fade" mode="out-in" :duration="{ enter: 1500, leave: 2000 }">

我不想按下按钮,这是我似乎在网上找到的所有解决方案,我知道 jQuery 可以做到这一点,但无法让它在 Vue 中工作。

最佳答案

您可以在函数中添加setTimeout。无论此函数是否为点击处理程序。

new Vue({
  el: "#app",
  data() {
    return {
      testButClicked: false
    }
  },
  methods: {
    testToast() {
      this.testButClicked = true;
      setTimeout(() => {
        this.testButClicked = false
      }, 5000)
    }
  }
})
body {
  padding: 20px;
  font-family: Helvetica;
}

#app {
  background: #fff;
  border-radius: 4px;
  padding: 20px;
  transition: all 0.2s;
}

.alert {
  background-color: lightgreen;
  padding: 15px;
}

.fade-enter-active,
.fade-leave-active {
  transition: opacity 1.3s ease;
}

.fade-enter,
.fade-leave-to {
  opacity: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
  <button type="button" @click="testToast">TEST BUTTON</button>
  <br><br>
  <transition name="fade" mode="out-in">
    <div v-if="testButClicked" class="alert" role="alert">
      Item successfully added to your cart
    </div>
  </transition>
</div>

关于html - 使用 Vue 努力显示然后隐藏成功警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58956203/

相关文章:

javascript - 在仍然能够导航页面的同时放大元素

javascript - 迭代使用时,JQuery on Change 事件不会触发

vue.js - 如何将类属性传递给子组件元素

vue.js - 为什么使用 router.push 会在控制台中出现错误?

html - 使用 angularjs 的 Elasticsearch 搜索数据

html - 悬停时闪烁的 svg 矩形

html - 如何设置宽度以包括浏览器滚动条?

javascript - 响应式图库解决方案

vue.js - 为什么我在 Vue 中出现错误 "Unexpected mutation of "modelValue"prop"?

javascript - jQuery .mouseleave 不工作