js制作提示框插件


Posted in Javascript onDecember 24, 2020

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

效果展示:

js制作提示框插件

以上就是js制作提示框插件的详细内容,更多关于js 制作提示框的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
jquery 1.4.2发布!主要是性能与API
Feb 25 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
Nov 30 Javascript
Javascript实现多彩雪花从天降散落效果的方法
Feb 02 Javascript
JS使用parseInt解析数字实现求和的方法
Aug 05 Javascript
原生JavaScript实现Ajax的方法
Apr 07 Javascript
JavaScript数据存储 Cookie篇
Jul 02 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
Sep 05 Javascript
npm国内镜像 安装失败的几种解决方案
Jun 04 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
Jan 18 Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
May 15 Javascript
基于Electron实现桌面应用开发代码实例
Jul 07 Javascript
在vue中给后台接口传的值为数组的格式代码
Nov 12 Javascript
vue+openlayers绘制省市边界线
Dec 24 #Vue.js
在HTML中使用JavaScript的两种方法
Dec 24 #Javascript
vue项目中openlayers绘制行政区划
Dec 24 #Vue.js
Vue+penlayers实现多边形绘制及展示
Dec 24 #Vue.js
Vue使用鼠标在Canvas上绘制矩形
Dec 24 #Vue.js
vue绑定class的三种方法
Dec 24 #Vue.js
全面解析Vue中的$nextTick
Dec 24 #Vue.js
You might like
PHP 多维数组的排序问题 根据二维数组中某个项排序
2011/11/09 PHP
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
CI框架常用方法小结
2016/05/17 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
2016/12/29 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
JQuery 选择和过滤方法代码总结
2010/11/19 Javascript
javascript使用定时函数实现跳转到某个页面
2013/12/25 Javascript
from表单多个按钮提交用onclick跳转不同action
2014/04/24 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
jQuery多级手风琴菜单实例讲解
2015/10/22 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
2019/10/26 Javascript
原生js中运算符及流程控制示例详解
2021/01/05 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python中列表、字典、元组、集合数据结构整理
2014/11/20 Python
python查找目录下指定扩展名的文件实例
2015/04/01 Python
在Python的Flask框架下使用sqlalchemy库的简单教程
2015/04/09 Python
解决python报错MemoryError的问题
2018/06/26 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
2020/09/16 Python
Python 实现键盘鼠标按键模拟
2020/11/18 Python
css3 矩阵的使用详解
2018/03/20 HTML / CSS
海外淘书首选:AbeBooks
2017/07/31 全球购物
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
护理专业推荐信
2013/11/07 职场文书
食品营养与检测应届生求职信
2013/11/08 职场文书
个人安全生产承诺书
2014/05/22 职场文书
物业保洁员岗位职责
2015/02/13 职场文书
新学期开学寄语2016
2015/12/04 职场文书
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python