Sweet Alert,但按钮在前几秒内被禁用

Sweet Alert, but buttons are disabled for the first few seconds

我正在创建一个显示非常重要消息的 Sweet Alert,我不希望用户未阅读就关闭它。

因此,为了强调消息的重要性,我想将“确定”按钮禁用(比方说...)5 秒,这样用户必须至少等待 5 秒才能解除警报。

可见的计时器也很不错。我在我的应用程序中使用 AngularJS。

为此,我可以轻松地制作一个自定义模式作为警报,但我想使用 Sweet Alert 的原因是因为它已经在我的整个应用程序中使用,我不想打破这种模式。

我认为这段代码就是您要找的

var h = 1;

function run(){
  if(h==1){
    swal('hello','warning', {button: {closeModal: false}, closeOnEsc: false, closeOnClickOutside: false}).then(nnn => {if(h==1){
      run();
    }else{
      swal.close();
    }});
    setTimeout(function(){ h = 0;}, 5000);
  }
}

run();

我确信有更好的方法来编写这个,但这对我有用,只需将超时计时器设置为您希望它保持打开状态的任何持续时间。

您可以使用 SweetAlert2 中已有的内容来实现它。正如 Joseph 在另一个答案中提到的,您应该将以下 sweetalert2 属性设置为 false 以避免用户关闭模态:

allowOutsideClick: false,
allowEscapeKey: false, 

您可以在显示 swal 时隐藏确认按钮:

onOpen: () => {
  swal.showLoading()
  ....
}

然后在一段时间后使用 setTimeout 再次显示确认按钮:

onOpen: () => {
  swal.showLoading()
  setTimeout(() => { swal.hideLoading() }, 5000)
}

swal的完整代码是:

swal({
  title: 'Please read this message!',
  allowOutsideClick: false,
  allowEscapeKey: false, 
  onOpen: () => {
    swal.showLoading()
    setTimeout(() => { swal.hideLoading() }, 5000)
  },
}).then((result) => {
  if (!result.dismiss) {
     console.log('user read the important message')
  }
})