22.JavaScript製作一個簡單的提示框插件

来源:https://www.cnblogs.com/lanshanxiao/archive/2020/05/02/12820288.html
-Advertisement-
Play Games

JavaScript製作一個簡單的提示框插件 下麵是製作的提示框插件文件 window.myPlugin = window.myPlugin || {}; window.myPlugin.showMsg = (function () { var mongolia, //蒙層 promptBox, / ...


JavaScript製作一個簡單的提示框插件

下麵是製作的提示框插件文件

window.myPlugin = window.myPlugin || {};

window.myPlugin.showMsg = (function () {
    var mongolia, //蒙層
        promptBox, //提示框
        closeSpan, //關閉按鈕
        titleSpan, //提示標題
        contextSpan, //提示信息
        okBtn, //確定按鈕
        cancelBtn, //取消按鈕
        isRegEvent, //是否註冊事件
        option; //傳入的參數



    /**
     * 初始化蒙層
     */
    function initMongolia() {
        if (!mongolia) { //沒有蒙層則初始化
            //蒙層:覆蓋整個視窗,半透明的黑色
            mongolia = document.createElement("div");
            mongolia.style.position = "fixed";
            mongolia.style.width = mongolia.style.height = "100%";
            mongolia.style.left = mongolia.style.top = 0;
            mongolia.style.background = "rgba(0,0,0,.5)";
            document.body.appendChild(mongolia);
        }
        mongolia.style.display = "block"; //展示蒙層
    }

    /**
     * 初始化提示框
     */
    function initPromptBox() {
        //提示框:寬高300,位置居中
        if (!promptBox) {
            promptBox = document.createElement("div");
            promptBox.style.width = promptBox.style.height = "300px";
            promptBox.style.background = "#fff";
            promptBox.style.fontSize = "14px";
            promptBox.style.position = "absolute";
            promptBox.style.top = promptBox.style.left = "50%";
            promptBox.style.marginLeft = promptBox.style.marginTop = "-150px";
            promptBox.style["data-myplugin-id"] = "promptBox";
            initPromptContext();
            mongolia.appendChild(promptBox);
            titleSpan = document.querySelector("[data-myplugin-id='title']"); //提示標題
            contextSpan = document.querySelector("[data-myplugin-id='message']"); //提示信息
            closeSpan = document.querySelector("[data-myplugin-id='close']"); //關閉按鈕
            okBtn = document.querySelector("[data-myplugin-id='ok']"); //確定按鈕
            cancelBtn = document.querySelector("[data-myplugin-id='cancel']"); //取消按鈕
        }

        okBtn.innerText = option.okText || "確定";
        cancelBtn.innerText = option.cancelText || "取消";
        titleSpan.innerText = option.title || "提示";
        contextSpan.innerText = option.context || "";
    }

    /**
     * 初始化提示框中的內容
     */
    function initPromptContext() {
        //內容包含:標題,關閉按鈕,提示信息,確定按鈕,取消按鈕

        //創建標題,關閉按鈕
        var div = document.createElement("div");
        div.innerHTML = `<span style="float:left;" data-myplugin-id="title"></span>
        <span  style="float:right;cursor:pointer;" data-myplugin-id="close">X</span>`;
        div.style.height = "50px";
        div.style.padding = "10px 20px";
        div.style.background = "#eee";
        div.style.boxSizing = "border-box";
        promptBox.appendChild(div);

        //創建提示信息
        div = document.createElement("div");
        div.innerHTML = `<span  data-myplugin-id="message"></span>`;
        div.style.height = "200px";
        div.style.padding = "10px 20px";
        div.style.boxSizing = "border-box";
        promptBox.appendChild(div);

        //創建確定按鈕,取消按鈕
        div = document.createElement("div");
        div.innerHTML = `<button style="float:right;margin:10px;cursor:pointer;" data-myplugin-id="cancel"></button><button style="float:right;margin:10px;cursor:pointer;" data-myplugin-id="ok"></button>`;
        div.style.height = "50px";
        div.style.padding = "10px 20px";
        div.style.boxSizing = "border-box";
        promptBox.appendChild(div);
    }

    //註冊事件
    function regEvent() {
        if (!isRegEvent) { //未註冊事件
            //1.點擊關閉,點擊蒙層,點擊取消按鈕
            closeSpan.onclick = mongolia.onclick = function () {
                mongolia.style.display = "none"; //隱藏蒙層
            };

            okBtn.onclick = function () {
                option && option.okFunction && option.okFunction();
                mongolia.style.display = "none"; //隱藏蒙層
            }

            cancelBtn.onclick = function () {
                option && option.cancelFunction && option.cancelFunction();
                mongolia.style.display = "none"; //隱藏蒙層
            }

            //2.拖動提示框事件
            window.onmousedown = function (e) {
                var target = getTarget(e.target); //是否包含目標元素

                if (target) {
                    var style = window.getComputedStyle(target);
                    var left = parseInt(style.left);
                    var top = parseInt(style.top);
                    var disX = parseInt(e.pageX) - left;
                    var disY = parseInt(e.pageY) - top;

                    window.onmousemove = function (e) {
                        var newLeft = parseInt(e.pageX) - disX;
                        var newTop = parseInt(e.pageY) - disY;

                        promptBox.style.left = newLeft + "px";
                        promptBox.style.top = newTop + "px";

                    };
                    window.onmouseup = window.onmouseleave = function () {
                        window.onmousemove = null;
                    }
                }
            };

            function getTarget(target) {
                while (target) {
                    if (target.tagName === "DIV" && target.style["data-myplugin-id"] === "promptBox") {
                        return target;
                    } else {
                        target = target.parentElement;
                    }
                }
                return false;
            }
        }
    }




    /**
     * @param {object} opts 
     * opts.title : 提示標題
     * opts.context : 提示信息
     * opts.cancelText:取消按鈕內容
     * opts.okText:確定按鈕內容
     * opts.cancelText:取消按鈕內容
     * opts.okFunction:確定按鈕的回調函數
     * opts.cancelFunction:取消按鈕的回調函數
     */
    function showMsg(opts) {
        if (typeof opts === "string") {
            option = {
                context: opts
            }
        } else {
            option = opts || {};
        }
        initMongolia();
        initPromptBox();
        regEvent();
    }

    return showMsg;
}());
myPlugin.js

 

引入並使用myPlugin.js文件

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script src="./js/myPlugin.js"></script>
    <script>
        window.myPlugin.showMsg({
            title: "信息",
            context: "確定刪除嗎",
            okText: "OK",
            cancelText: "Cancel",
            okFunction: function(){
                console.log("點擊OK按鈕");
            },
            cancelFunction:function(){
                console.log("點擊Cancel按鈕");
            }
        });
    </script>
</body>

</html>
index.html

 

效果展示:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 精通Oracle Database 12c SQL & PL/SQL編程(第3版) 內容簡介 學習通過編寫SQL語句並構建PL/SQL程式來訪問Oracle資料庫。《精通OracleDatabase12cSQL&PL/SQL編程(第3版)》完全涵蓋了*新版本Oracle資料庫的功能和技術,指導讀者編 ...
  • 今天安裝MySQL,結果安裝一半提示3306埠已被占用,於是網上搜索解決辦法,成功解決了占用問題,於是將方法記錄一下,以備後續再用。 1、Windows+R鍵,打開【運行】視窗,輸入cmd打開“命令行視窗”。 2、查找埠對應的PID,輸入如下命令: netstat -ano|findstr "3 ...
  • 上一篇:Oracle入門學習三 學習視頻:https://www.bilibili.com/video/BV1tJ411r7EC?p=35 Oracle表連接:內連接、外連接。外連接分左連接、右連接。 多表查詢時,如果表之間沒有條件關聯,則會把所有匹配的結果查找出來,例如A表6條數據,B表7條數據, ...
  • 一、內連接(INNER JOIN) 獲取兩個表中欄位匹配關係的記錄,需要兩個表都滿足條件的數據才會返回。如下圖陰影部分所示區域。 實例:有一張表table_a,數據如下: 表table_b,數據如下: 內連接SQL(也可以省略INNER,直接用JOIN): SELECT a.aid, a.aname ...
  • 上一篇:Oracle入門學習二 學習視頻:https://www.bilibili.com/video/BV1tJ411r7EC?p=26 字元串函數:length、upper、lower、initcap、 concat、instr、replace。 -- dual 常量表,沒什麼意義,就語法規則 ...
  • 表結構 student(StuId,StuName,StuAge,StuSex) 學生表 teacher(TId,Tname) 教師表 course(CId,Cname,C_TId) 課程表 sc(SId,S_CId,Score) 成績表 問題二:查詢平均成績大於60分的同學的學號和平均成績 SEL ...
  • 【問題描述】 CtsVerifier Bluetooth LE SEcure ClientServer Test測試pass但是無法選擇Pass Button 工具版本:9.0 r11 其他信息: 上個版本正常,verifier版本相同 分析過程中結合代碼咨詢測試,印證只有Client無法選中,Se ...
  • 最近在學習JavaScript,寫下人生第一篇隨筆總結一下DOM的相關操作。 一、查找節點 :根據ID查找元素 :根據類名查找元素 :根據標簽查找元素 :根據元素的name屬性查找 :使用選擇器查找單個元素 :使用選擇器查找一組元素 二、創建節點 :向文檔流寫入 document.write需要向文 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...