【问题标题】:Delay appearance of buttons in sweetalert2延迟 sweetalert2 中按钮的出现
【发布时间】:2017-07-11 14:41:48
【问题描述】:

我正在使用SweetAlert2 向用户传达一些反馈。这是一个学习应用程序,因此,我希望反馈能够持续一段时间。我不想在显示反馈后立即显示任何按钮,因为人们倾向于只单击“确定”或“取消”,而不阅读文本。

反馈中的字符数因屏幕而异,因此,我使用 sweetalert2 的 timer 参数作为文本字符数的倍数。但是,计时器功能并不完善,因为人们的阅读速度不同。理想情况下,我希望在计时器超时后出现“确定”按钮。是否可以进行某种 API 调用来动态更改警报框的属性?

swal({
        html: feedback,
        timer: feedback.length*50,
        showCloseButton: false,
        showCancelButton: false,
        showConfirmButton: false,
        allowOutsideClick: false,
    });

【问题讨论】:

    标签: javascript alert sweetalert sweetalert2


    【解决方案1】:

    我没有看到任何隐藏和显示按钮的方法,但您可以禁用和启用它们:

    swal({
      html: 'test',
      allowOutsideClick: false,
      allowEscapeKey: false,
    
      onOpen: function () {
        swal.disableButtons();
        setTimeout(swal.enableButtons, 'test'.length * 500) 
      }
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/limonte-sweetalert2/6.6.9/sweetalert2.min.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/limonte-sweetalert2/6.6.9/sweetalert2.min.css">

    或使它们透明:

    swal({
      html: 'test',
      allowOutsideClick: false,
      allowEscapeKey: false,
    
      onOpen: function () {
        var b = swal.getConfirmButton()
        b.style.opacity = 0
        b.disabled = true
        
        setTimeout(function() {
          b.disabled = false
          b.style.opacity = 1
        }, 'test'.length * 500) 
      }
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/limonte-sweetalert2/6.6.9/sweetalert2.min.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/limonte-sweetalert2/6.6.9/sweetalert2.min.css">

    或隐藏和显示:

    swal({
      html: 'test',
      allowOutsideClick: false,
      allowEscapeKey: false,
    
      onOpen: function () {
        var b = swal.getConfirmButton()
        b.hidden = true
        b.disabled = true
        
        setTimeout(function() {
          b.disabled = false
          b.hidden = false
        }, 'test'.length * 500) 
      }
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/limonte-sweetalert2/6.6.9/sweetalert2.min.js"></script>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/limonte-sweetalert2/6.6.9/sweetalert2.min.css">

    【讨论】:

    • 我接受@hayden-passmore 的回答,因为它直接回答了我的问题。但是,我实际上会使用您的解决方案(第一个),因为我认为这是一个更好的用户体验。
    【解决方案2】:

    您好,要实现这一点,您可以使用设置超时函数并在您希望显示的按钮上调用 jQuery 的 .show() 函数(假设您可以使用 jQuery)。

    下面的代码应该可以帮助你

    swal({
            html: feedback,
            timer: feedback.length*50,
            showCloseButton: false,
            showCancelButton: false,
            showConfirmButton: false,
            allowOutsideClick: false,
        });
        setTimeout(function () {
            $(".swal2-cancel").show();
            $(".swal2-confirm").show();
            $(".swal2-close").show();
        }, 3000);
    

    希望这会有所帮助:-)

    【讨论】:

    • 谢谢!对于看到此内容的其他任何人,您可能希望将包含 swal2-confirm 的 div 的类添加到正在显示的类列表中。但是,非常好的方法!
    • 没问题,很高兴这对您有所帮助。
    • 你指的是哪个类?如果您愿意,我可以将其添加到答案中以帮助未来的用户。
    • 我猜包含的 div 取决于究竟使用了什么选项。就我而言,它是.swal2-buttonswrapper div
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 2012-12-03
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多