You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Materialize.toast仅显示一次?

解决Materialize Toast持续点击堆叠的问题

这个问题我之前做项目的时候也遇到过,频繁点按钮弹出一堆堆叠的toast确实很影响体验,给你分享两个实用的解决思路:

方法一:用状态变量控制触发时机

定义一个变量来跟踪当前是否有toast处于显示状态,只有当没有活跃toast时才触发新的提示,toast消失后再重置状态:

// 初始化状态:当前无活跃toast
let isToastActive = false;

// 封装弹出toast的函数
function showToast(message) {
  if (!isToastActive) {
    isToastActive = true;
    Materialize.toast(message, 3000, '', function() {
      // toast动画结束、关闭后,重置状态
      isToastActive = false;
    });
  }
}

// 按钮点击事件绑定
document.querySelector('#your-button').addEventListener('click', () => {
  showToast('这是你的提示内容');
});

这个方法逻辑简单直观,适合大多数场景,而且不会依赖DOM结构的变化。

方法二:通过DOM检查判断活跃toast

Materialize的toast会被渲染到.toast-container容器中,活跃的toast不会带有fadeOut类(消失时会添加这个类做动画),我们可以直接通过DOM选择器判断是否有正在显示的toast:

function showToast(message) {
  // 查找当前未消失的活跃toast
  const activeToast = document.querySelector('.toast-container .toast:not(.fadeOut)');
  // 如果没有活跃toast,再弹出新的
  if (!activeToast) {
    Materialize.toast(message, 3000);
  }
}

这个方法不需要额外维护状态变量,直接通过DOM元素的状态来判断,适合不想额外声明变量的场景。

框架中的适配(以Vue为例)

如果是在Vue这类框架中使用,可以把状态变量放到组件的data中,逻辑和方法一一致:

<template>
  <button @click="showToast">点击弹出提示</button>
</template>

<script>
export default {
  data() {
    return {
      isToastActive: false
    }
  },
  methods: {
    showToast() {
      if (!this.isToastActive) {
        this.isToastActive = true;
        Materialize.toast('Vue项目中的提示内容', 3000, '', () => {
          this.isToastActive = false;
        });
      }
    }
  }
}
</script>

内容的提问来源于stack exchange,提问作者blg2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:58:13