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 相关文章推荐
js设置文本框中焦点位置在最后的示例代码(简单实用)
Mar 04 Javascript
javascript轻量级模板引擎juicer使用指南
Jun 22 Javascript
node.js使用require()函数加载模块
Nov 26 Javascript
jquery实现鼠标滑过小图时显示大图的方法
Jan 14 Javascript
jquery+json实现动态商品内容展示的方法
Jan 14 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
Feb 20 Javascript
JS简单获取当前日期和农历日期的方法
Apr 17 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
Oct 11 Javascript
Bootstarp在pycharm中的安装及简单的使用方法
Apr 19 Javascript
Vue项目中Api的组织和返回数据处理的操作
Nov 04 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
Nov 03 Javascript
Vue中Object.assign清空数据报错的解决方案
Mar 03 Vue.js
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
用header 发送cookie的php代码
2007/03/16 PHP
php magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
php实现网页端验证码功能
2017/07/11 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
使用Apache的rewrite
2021/03/09 Servers
实现复选框全选/全不选切换
2006/12/23 Javascript
JavaScript 中的replace方法说明
2007/04/13 Javascript
js 回车提交表单两种实现方法
2012/12/31 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
浅析location.href跨窗口调用函数
2016/11/22 Javascript
jQuery的事件预绑定
2016/12/05 Javascript
详解springmvc 接收json对象的两种方式
2016/12/06 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
vue2.0 循环遍历加载不同图片的方法
2018/03/06 Javascript
Vue中的无限加载vue-infinite-loading的方法
2018/04/08 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
2018/07/13 Javascript
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
jQuery轮播图功能制作方法详解
2019/12/03 jQuery
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
简单的Python2.7编程初学经验总结
2015/04/01 Python
python内存管理分析
2015/04/08 Python
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
Python爬取YY评级分数并保存数据实现过程解析
2020/06/01 Python
清洁工岗位职责
2014/01/29 职场文书
女子职高个人自荐书
2014/02/01 职场文书
计算机应届毕业生自荐信范文
2014/02/23 职场文书
2014国庆黄金周超市促销活动方案
2014/09/21 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
公司合并协议书范本
2014/09/30 职场文书
小学英语教学随笔
2015/08/14 职场文书
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫
MyBatis XPathParser解析器使用范例详解
2022/07/15 Java/Android