使用js重写confirm弹窗,支持回调函数,弹窗出现时页面不可滑动/滚动

因项目需要,自己网上找了一些代码然后再完善了一些,增加了弹窗出现时不可滑动/滚动,可自定义弹窗的标题、内容、按钮文字等,无需jquery,引入jquery是为了测试,代码如下:

<!DOCTYPE html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>js confirm弹出框自定义样式</title>
    <style>
    html,
    body {
        margin: 0;
        padding: 0;
        font-family: "Microsoft YaHei";
    }
    .wrap-dialog {
        position: fixed;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        font-size: 16px;
        text-align: center;
        background-color: rgba(0, 0, 0, .4);
        z-index: 999;
    }

    .dialog {
        position: relative;
        margin: 10% auto;
        width: 300px;
        background-color: #FFFFFF;
    }

    .dialog .dialog-header {
        height: 20px;
        padding: 10px;
        background-color: #22b9ff;
    }

    .dialog .dialog-body {
        height: 30px;
        padding: 20px;
    }

    .dialog .dialog-footer {
        padding: 8px;
        background-color: #f5f5f5;
    }

    .dialog-btn {
        width: 70px;
        padding: 2px;
        cursor: pointer;
    }

    .dialog-hide {
        display: none;
    }

    .dialog-ml50 {
        margin-left: 50px;
    }
    </style>
</head>

<body>
    <input type="button" value="删除" class="dialog-btn dialog-ml50" id="dialog-remove">
    //组件html部分
    <div style="height: 1000px;"></div>
    <div class="wrap-dialog dialog-hide" >
        <div class="dialog" id="dialog">
            <div class="dialog-header">
                <span class="dialog-title">信息确认</span>
            </div>
            <div class="dialog-body">
                <span class="dialog-message">你确认删除此条信息?</span>
            </div>
            <div class="dialog-footer">
                <input type="button" class="dialog-btn dialog-btn-cancel" id="dialog-cancel" value="取消" />
        		<input type="button" class="dialog-btn dialog-btn-confirm" id="dialog-confirm" value="确认" />
            </div>
        </div>
    </div>
    
</body>
<script src="http://cdn.bootcss.com/jquery/2.2.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
	var mo=function(e){e.preventDefault();};
	//禁止页面滑动
     function stopSlide(){
        document.body.style.overflow='hidden'
        document.addEventListener("touchmove",mo,{ passive: false })
      }
      //出现滚动条
      function moveStop(){
        document.body.style.overflow=''
        document.removeEventListener("touchmove",mo,{ passive: false })
      }
    //自定义部分
    window.confirm = function(confirmInfo, yesCallBack, noCallBack) {
        let title = confirmInfo.title || '温馨提示'
        let message = confirmInfo.message || '确定要进行此操作吗?'
        let cancelButtonText = confirmInfo.cancelButtonText || '取消'
        let confirmButtonText = confirmInfo.confirmButtonText || '确定'

        let choose = function (tag) {
          return document.querySelector(tag);
        }
        choose(".dialog-title").innerHTML = title;
        choose(".dialog-message").innerHTML = message;
        choose(".dialog-btn-cancel").value = cancelButtonText;
        choose(".dialog-btn-confirm").value = confirmButtonText;

        // 显示遮罩和对话框
        choose(".wrap-dialog").className = "wrap-dialog";
        // 确定按钮

        choose("#dialog").onclick = function (e) {
          if (e.target.className == "dialog-btn dialog-btn-cancel") {
            choose(".wrap-dialog").className = "wrap-dialog dialog-hide";
            noCallBack();
          } else if (e.target.className == "dialog-btn dialog-btn-confirm") {
            choose(".wrap-dialog").className = "wrap-dialog dialog-hide";
            yesCallBack();
          }
        }
        //显示弹窗后禁止页面滑动
        stopSlide()
      }
    $('#dialog-remove').click(function() {
        function btnOk() {
           alert('点击了我要登录');
           moveStop()
        }

        function btnCancel() {
            alert('点击了以后再说');
            moveStop()
        }
        confirm({
            title:'您还未登录',
            message: '是否马上去登录?',
            cancelButtonText: '以后再说',
            confirmButtonText: '我要登录'
          }, btnOk, btnCancel);
    });



});
</script>

</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章