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 相关文章推荐
firefox firebug中文入门教程 脚本之家新年特别版
Jan 02 Javascript
javascript制作的滑动图片菜单
May 15 Javascript
原生js实现图片层叠轮播切换效果
Feb 02 Javascript
获取JS中网页各种高宽与位置的方法总结
Jul 27 Javascript
jQuery层级选择器实例代码
Feb 06 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
Mar 29 Javascript
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
Apr 01 Javascript
js获取浏览器的各种属性
Apr 27 Javascript
使用vue-cli编写vue插件的方法
Feb 26 Javascript
解决angularjs WdatePicker ng-model的问题
Sep 13 Javascript
JavaScript实现飞舞的泡泡效果
Feb 07 Javascript
js实现碰撞检测
Jan 29 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
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
PHP 实现代码复用的一个方法 traits新特性
2015/02/22 PHP
PHP SPL标准库之接口(Interface)详解
2015/05/11 PHP
php获得文件夹下所有文件的递归算法的简单实例
2016/11/01 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
PHP进阶学习之反射基本概念与用法分析
2019/06/18 PHP
表格 隔行换色升级版
2009/11/07 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
在vue.js中使用JSZip实现在前端解压文件的方法
2018/09/05 Javascript
微信小程序实现张图片合成为一张并下载
2019/07/16 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
python共享引用(多个变量引用)示例代码
2013/12/04 Python
python抓取文件夹的所有文件
2018/02/27 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
2018/03/13 Python
pandas的qcut()方法详解
2019/07/06 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
UGG英国官方网站:UGG UK
2018/02/08 全球购物
介绍一下EJB的体系结构
2012/08/01 面试题
公务员中国梦演讲稿
2014/08/19 职场文书
学习礼仪心得体会
2014/09/01 职场文书
树转促学习心得体会
2014/09/10 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
2015年春训学习心得体会范文
2015/03/09 职场文书
银行客户经理岗位职责
2015/04/09 职场文书
民事申诉状范本
2015/05/20 职场文书
烈士陵园观后感
2015/06/08 职场文书
幼儿园科学课教学反思
2016/03/03 职场文书
centos7安装mysql5.7经验记录
2022/05/02 Servers