使用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>

 

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