我正在做一个 Vue.js 项目,当我点击一个元素时,我正在使用 Vue 过渡标签将其淡出。问题是,由于元素正在淡出,它仍然是可点击的,这在我的应用程序中可能会导致问题。
我的问题是:如何在过渡期间使元素不可单击,以便用户在过渡完成之前不会多次单击它?
我已经尝试过将带有点事件的 css 类:none; 在过渡开始时应用于元素,但它在过渡期间没有停止点击。
例:
<transition name="fade">
<div v-if="shouldShow" @click="doSomeAction">Example text</div>
</transition>
(其中doSomeAction设置应该显示为false(。
Vue 有事件修饰符可能会有所帮助。可能对您有帮助的特定方法是@click.once。如果将其添加到单击事件,则用户只能单击一次。它的文档在这里。
如果你使用的是 Vue.js 2.6+,你可以轻松做到。在这个次要的现实中添加了动态指令参数,因此您可以有条件地绑定所需的事件名称,或者在您的情况下禁用它(传递null
(。
动态参数值应为字符串。但是,它会 如果我们允许
null
作为明确的特殊值,则很方便 指示应删除绑定。任何其他非字符串 值可能是错误,将触发警告。
参考。
// using computed property
<transition name="fade">
<div v-if="shouldShow" @[event]="doSomeAction">Example text</div>
</transition>
export default {
data() {
return {
shouldShow: true
}
},
computed: {
event() {
return this.shouldShow ? "click" : null;
}
}
}
// using object
<transition name="fade">
<div v-if="shouldShow" v-on="{ [shouldShow ? 'click' : null]: doSomeAction }">Example text</div>
</transition>
更新
如果还需要确保用户可以立即单击"穿过"要淡出到其后面项的元素,则可以向元素添加一个带有指针事件:none; 的类,然后执行以下操作:
this.$nextTick(() => {
this.shouldShow = false;
});
这将确保在添加类之前不会发生淡入淡出。 this.$nextTick 是一个 Vue 函数,它等待 dom 更新(在本例中是添加指针事件类(,然后再运行回调: https://v2.vuejs.org/v2/api/#Vue-nextTick
请注意,指针事件:none;在某些非常旧的浏览器(IE <10(上不起作用