自编jQuery插件实现模拟alert和confirm


Posted in Javascript onSeptember 01, 2014

啥也不说,先上图,有图有真相 :)

自编jQuery插件实现模拟alert和confirm

自编jQuery插件实现模拟alert和confirm

现在绝大多数网站都不用自带的alert和confirm了,因为界面太生硬了。因此这个插件就这样产生了...

来看插件的实现代码吧:

(function () {
  $.MsgBox = {
    Alert: function (title, msg) {
      GenerateHtml("alert", title, msg);
      btnOk(); //alert只是弹出消息,因此没必要用到回调函数callback
      btnNo();
    },
    Confirm: function (title, msg, callback) {
      GenerateHtml("confirm", title, msg);
      btnOk(callback);
      btnNo();
    }
  }

  //生成Html
  var GenerateHtml = function (type, title, msg) {

    var _html = "";

    _html += '<div id="mb_box"></div><div id="mb_con"><span id="mb_tit">' + title + '</span>';
    _html += '<a id="mb_ico">x</a><div id="mb_msg">' + msg + '</div><div id="mb_btnbox">';

    if (type == "alert") {
      _html += '<input id="mb_btn_ok" type="button" value="确定" />';
    }
    if (type == "confirm") {
      _html += '<input id="mb_btn_ok" type="button" value="确定" />';
      _html += '<input id="mb_btn_no" type="button" value="取消" />';
    }
    _html += '</div></div>';

    //必须先将_html添加到body,再设置Css样式
    $("body").append(_html); GenerateCss();
  }

  //生成Css
  var GenerateCss = function () {

    $("#mb_box").css({ width: '100%', height: '100%', zIndex: '99999', position: 'fixed',
      filter: 'Alpha(opacity=60)', backgroundColor: 'black', top: '0', left: '0', opacity: '0.6'
    });

    $("#mb_con").css({ zIndex: '999999', width: '400px', position: 'fixed',
      backgroundColor: 'White', borderRadius: '15px'
    });

    $("#mb_tit").css({ display: 'block', fontSize: '14px', color: '#444', padding: '10px 15px',
      backgroundColor: '#DDD', borderRadius: '15px 15px 0 0',
      borderBottom: '3px solid #009BFE', fontWeight: 'bold'
    });

    $("#mb_msg").css({ padding: '20px', lineHeight: '20px',
      borderBottom: '1px dashed #DDD', fontSize: '13px'
    });

    $("#mb_ico").css({ display: 'block', position: 'absolute', right: '10px', top: '9px',
      border: '1px solid Gray', width: '18px', height: '18px', textAlign: 'center',
      lineHeight: '16px', cursor: 'pointer', borderRadius: '12px', fontFamily: '微软雅黑'
    });

    $("#mb_btnbox").css({ margin: '15px 0 10px 0', textAlign: 'center' });
    $("#mb_btn_ok,#mb_btn_no").css({ width: '85px', height: '30px', color: 'white', border: 'none' });
    $("#mb_btn_ok").css({ backgroundColor: '#168bbb' });
    $("#mb_btn_no").css({ backgroundColor: 'gray', marginLeft: '20px' });


    //右上角关闭按钮hover样式
    $("#mb_ico").hover(function () {
      $(this).css({ backgroundColor: 'Red', color: 'White' });
    }, function () {
      $(this).css({ backgroundColor: '#DDD', color: 'black' });
    });

    var _widht = document.documentElement.clientWidth; //屏幕宽
    var _height = document.documentElement.clientHeight; //屏幕高

    var boxWidth = $("#mb_con").width();
    var boxHeight = $("#mb_con").height();

    //让提示框居中
    $("#mb_con").css({ top: (_height - boxHeight) / 2 + "px", left: (_widht - boxWidth) / 2 + "px" });
  }


  //确定按钮事件
  var btnOk = function (callback) {
    $("#mb_btn_ok").click(function () {
      $("#mb_box,#mb_con").remove();
      if (typeof (callback) == 'function') {
        callback();
      }
    });
  }

  //取消按钮事件
  var btnNo = function () {
    $("#mb_btn_no,#mb_ico").click(function () {
      $("#mb_box,#mb_con").remove();
    });
  }
})();

Html代码结构如下,js里面拼接的不直观,给出如下:

<div id="mb_box"></div>
<div id="mb_con">
    <span id="mb_tit">title</span><a id="mb_ico">x</a>
    <div id="mb_msg">msg</div>
    <div id="mb_btnbox">
      <input id="mb_btn_ok" type="button" value="确定" />
      <input id="mb_btn_no" type="button" value="取消" />
    </div>
</div>

mb_box为半透明遮罩层,将整个页面遮住,禁止操作;mb_con为提示框。之所以没把mb_con放在mb_box里面,是因为如果放里面的话,对mb_box设置的透明度会影响到mb_con,使mb_con也会变成透明的。之前也试过background-color:rgba(),可惜ie8及以下版本不支持。所以还是把mb_con拿到外面来了,通过设置z-index使其mb_box的上面。

为了使插件使用方便,特意的没有用到图片,全是通过css来控制界面效果,使用时,引用一个js文件就可以了。css样式在js中写死了,这点可能不太灵活,但使用却很方便如果你对界面样式不满意或者与你网站的色彩风格不一致,那只能自行修改了。

由于弹出层(div)无法做到像原始的alert和confirm那样做到页面阻塞效果,因此只能通过 回调函数 来进行模拟。也因为这个原因,后台数据操作只能通过回调函数配合ajax来完成的。

Demo如下:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title>模拟alert和confirm提示框</title>
</head>
<body>
  <input id="add" type="button" value="添加" />
  <input id="delete" type="button" value="删除" />
  <input id="update" type="button" value="修改" />

  <script src="../js/jquery-1.4.1.min.js" type="text/javascript"></script>
  <script src="../js/jquery.similar.msgbox.js" type="text/javascript"></script>
  <script type="text/javascript">

    $("#add").bind("click", function () {
      $.MsgBox.Alert("消息", "哈哈,添加成功!");
    });

    //回调函数可以直接写方法function(){}
    $("#delete").bind("click", function () {
      $.MsgBox.Confirm("温馨提示", "执行删除后将无法恢复,确定继续吗?温馨提示", function () { alert("你居然真的删除了..."); });
    });


    function test() {
      alert("你点击了确定,进行了修改");
    }
    //也可以传方法名 test
    $("#update").bind("click", function () {
      $.MsgBox.Confirm("温馨提示", "确定要进行修改吗?", test);
    });

    //当然你也可以不给回调函数,点击确定后什么也不做,只是关闭弹出层

 //$("#update").bind("click", function () { $.MsgBox.Confirm("温馨提示", "确定要进行修改吗?"); });

  </script>
</body>
</html>

代码量并不多,如有什么疑问可以留言 :)

Javascript 相关文章推荐
学习ExtJS table布局
Oct 08 Javascript
jQuery EasyUI中对表格进行编辑的实现代码
Jun 10 Javascript
php读取sqlite数据库入门实例代码
Jun 25 Javascript
使用jquery动态加载js文件的方法
Dec 24 Javascript
Javascript基础教程之for循环
Jan 18 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
May 31 Javascript
微信小程序五星评分效果实现代码
Apr 06 Javascript
jquery 键盘事件的使用方法详解
Sep 13 jQuery
JavaScript函数apply()和call()用法与异同分析
Aug 10 Javascript
Vue.js实现备忘录功能
Jun 26 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
Jul 19 Javascript
一文搞懂redux在react中的初步用法
Jun 09 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
Sep 01 #Javascript
JQuery $.each遍历JavaScript数组对象实例
Sep 01 #Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
Sep 01 #Javascript
用js通过url传参把数据从一个页面传到另一个页面
Sep 01 #Javascript
用jquery实现动画跳到顶部和底部(这个比较简单)
Sep 01 #Javascript
Javascript让DEDECMS告别手写Tag
Sep 01 #Javascript
通过JS来动态的修改url,实现对url的增删查改
Sep 01 #Javascript
You might like
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
PHP面向对象程序设计类的定义与用法简单示例
2016/12/27 PHP
js或css文件后面跟参数的原因说明
2010/01/09 Javascript
jQuery数据显示插件整合实现代码
2011/10/24 Javascript
JS判断变量是否为空判断是否null
2014/07/25 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
Bootstrap每天必学之媒体对象
2015/11/30 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
angular.js实现购物车功能
2017/10/23 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
jquery ajax 请求小技巧实例分析
2019/11/11 jQuery
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
python实现下载指定网址所有图片的方法
2015/08/08 Python
Flask之flask-session的具体使用
2018/07/26 Python
django富文本编辑器的实现示例
2019/04/10 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
python deque模块简单使用代码实例
2020/03/12 Python
Python2 与Python3的版本区别实例分析
2020/03/30 Python
python-地图可视化组件folium的操作
2020/12/14 Python
法国珠宝店:CLEOR
2017/01/29 全球购物
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
员工入职担保书范文
2014/04/01 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
详解Python常用的魔法方法
2021/06/03 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python