基于bootstrap风格的弹框插件

作者:有点懒惰的小青年 时间:2024-05-02 17:32:29 

自己写的一款基于bootstrap风格的弹框插件,暂时只有确认框、提示框。后续功能扩展、bug修改再更新。


;(function($){
//默认参数
var PARAMS;
var DEFAULTPARAMS =
    {
     width: 500,
     title: '提示消息',
     content: '',
     okbtn: '确定',
     cancelbtn: '取消',
     headerBackground: 'info',
     vbackdrop: 'static',  //默认点击遮罩不会关闭modal
     vkeyboard: true,   //按esc关闭modal
     confirmFn: new Object,
     cancelFn: new Object
    };
$.dialog = {
 confirm: function(params){
  $.dialog.initParmas(params);
  $.dialog.Show('confirm', function(e){
   if($.isFunction(PARAMS.confirmFn)){
    PARAMS.confirmFn(e);
   }
  },
  function(f){
   if($.isFunction(PARAMS.cancelFn)){
    PARAMS.cancelFn(f);
   }
  });
 },
 alert: function(params){
  $.dialog.initParmas(params);
  $.dialog.Show('alert', function(e){
   if($.isFunction(PARAMS.confirmFn)){
    PARAMS.confirmFn(e);
   }
  }, null);
 },
 Show: function(type, confirmCaller, cancelCaller){
  var html = '<div class="modal fade" id="tipModal">'
     + '<div class="modal-dialog" style="width:'+PARAMS.width+'px"><div class="modal-content">'
     + '<div class="modal-header header_'+PARAMS.headerBackground+'">'
     + '<a class="close" data-dismiss="modal">&times;</a>'
     + '<h4 class="modal-title text-center">'+PARAMS.title+'</h4></div>'
     + '<div class="modal-body text-center body_content">'+PARAMS.content+'</div>'
     + '<div class="modal-footer">';
  if(type=='confirm'){
   html += '<button class="btn btn-default" id="btnCancel">'+PARAMS.cancelbtn+'</button>';
  }
  html += '<button class="btn btn-primary" id="btnOk">'+PARAMS.okbtn+'</button>';
  html += '</div></div></div></div>';
  $('body').append(html);
  $('#tipModal').modal({backdrop:PARAMS.vbackdrop,keyboard:PARAMS.vkeyboard});
  $.dialog.setDialogEvent(type, confirmCaller, cancelCaller);
 },
 initParmas: function(params){
  if(params!= undefined && params!= null){
   PARAMS = $.extend({}, DEFAULTPARAMS, params);
  }
 },
 setDialogEvent: function(type, confirmCaller, cancelCaller){
  switch(type){
   case 'confirm':
    $("#btnOk").click(function(){
     $('#tipModal').modal('hide');
     $('#tipModal').on('hidden.bs.modal', function(){
      $('#tipModal').remove();    //要先remove modal
      if($.isFunction(confirmCaller)){
       confirmCaller(true);
      }

});
    });
    $("#btnCancel").click(function(){
     $('#tipModal').modal('hide');
     $('#tipModal').on('hidden.bs.modal', function(){
      $('#tipModal').remove();
      if($.isFunction(cancelCaller)){
       cancelCaller(false);
      }

});
    });
    break;
   case 'alert':
    $("#btnOk").click(function(){
     $('#tipModal').modal('hide');
     $('#tipModal').on('hidden.bs.modal', function(){
      $('#tipModal').remove();
      if($.isFunction(confirmCaller)){
       confirmCaller(true);
      }
     });
    });
    break;
  };
  $('#tipModal').on('hidden.bs.modal', function(){
   $('#tipModal').remove();
  });
  $("#tipModal .close").click(function(){
   $('#tipModal').on('hidden.bs.modal', function(){
    $('#tipModal').remove();
   });
  });
  //设置窗口可拖动
  $('#tipModal .modal-header').Draggable($('#tipModal .modal-dialog'));
 }
};

dialogConfirm = function(params){
 $.dialog.confirm(params);
};

dialogAlert = function(params){
 $.dialog.alert(params);
};
})(jQuery);

//拖动层
;(function($){
$.fn.extend({
 Draggable: function(objMoved){
  return this.each(function(){
   //鼠标按下时的位置
   var mouseDownPosiX, mouseDownPosiY;
   //obj的初始位置
   var objPosiX, objPosiY;
   //鼠标移动的距离
   var tempX, tempY;
   //移动的对象
   var obj = $(objMoved)==undefined ? $(this): $(objMoved);

//是否处于移动状态
   var status = false;

$(this).mousedown(function(e){
    status = true;
    mouseDownPosiX = e.pageX;
    mouseDownPosiY = e.pageY;
    objPosiX = obj.css("left").replace("px", "");
    objPosiY = obj.css("top").replace("px", "");
   }).mouseup(function(){
    status = false;
   });
   $(document).mousemove(function(e){
    if(status){
     tempX = parseInt(e.pageX) - parseInt(mouseDownPosiX) + parseInt(objPosiX);
     tempY = parseInt(e.pageY) - parseInt(mouseDownPosiY) + parseInt(objPosiY);
     obj.css({ "left": tempX + "px", "top": tempY + "px" });
    }
    //判断是否超出窗体
    //计算出弹出层距离右边的位置
    var dialogRight = parseInt($(window).width())-(parseInt(obj.css("left"))+parseInt(obj.width()));
    var dialogBottom = parseInt($(window).height())-(parseInt(obj.css("top"))+parseInt(obj.height()));
    var maxLeft = $(window).width()-obj.width();
    var maxTop = $(window).height()-obj.height();
    if(parseInt(obj.css("left"))<=0){
      obj.css("left","0px");
    }
    if(parseInt(obj.css("top"))<=0){
     obj.css("top","0px");
    }
    if(dialogRight<=0){
     obj.css("left",maxLeft+'px');
    }
    if(dialogBottom<=0){
     obj.css("top", maxTop+'px');
    }
   }).mouseup(function(){
    status = false;
   }).mouseleave(function(){
    status = false;
   });
  });
 }
});
})(jQuery)

html页面中调用:


<body>
<div class="box">
<button class="btn btn-default" id="btn_confirm">确认框</button>
<button class="btn btn-default" id="btn_cancel">提示框</button>
</div>
</body>
<script src="jquery/jquery.min.js"></script>
<script src="bootstrap/bootstrap.min.js"></script>
<script src="js/dialog.js"></script>
<script type="text/javascript">
$(function(){
$("#btn_confirm").click(function(){
 dialogConfirm({
  width: 500,
  content: '确定要删除吗?',
  headerBackground: 'info',
  vbackdrop: true,  //默认点击遮罩不会关闭modal
  vkeyboard: true,   //按esc关闭modal
  confirmFn: function(e){
   dialogAlert({
    width: 300,
    content: 'true',
    headerBackground: 'success',
    vbackdrop: 'static',  //默认点击遮罩不会关闭modal
    vkeyboard: true   //按esc关闭modal
   });
  },
  cancelFn: function(f){
   alert(f);
  }
 })
});

$('#btn_cancel').click(function(){
 dialogAlert({
  width: 300,
  content: '删除成功!',
  headerBackground: 'error',
  vbackdrop: 'static',  //默认点击遮罩不会关闭modal
  vkeyboard: true,   //按esc关闭modal
 });
});
});
</script>

感觉写的不是很好,后面修改了或者扩展了功能再更新。源码会上传到文件。

标签:bootstrap,弹框插件
0
投稿

猜你喜欢

  • Django框架基础模板标签与filter使用方法详解

    2022-10-25 18:14:43
  • MySQL数据库中对前端和后台进行系统优化

    2009-01-04 13:39:00
  • Mysql my.ini 配置文件详解

    2024-01-28 06:16:57
  • Python使用PyCrypto实现AES加密功能示例

    2022-09-18 13:23:57
  • .Net行为型设计模式之中介者模式(Mediator)

    2024-05-13 09:17:58
  • ES6中let 和 const 的新特性

    2024-05-28 15:41:41
  • asp 关键词高亮显示(不区分大小写)

    2011-04-07 10:55:00
  • Pandas查询数据df.query的使用

    2021-06-09 03:48:47
  • 用python实现一幅春联实例代码

    2021-07-23 09:25:41
  • 将Django项目迁移到linux系统的详细步骤

    2021-02-11 02:13:09
  • .NET中书写XML的一种简单方法

    2007-08-23 12:55:00
  • PHP中的Trait 特性及作用

    2023-11-21 08:04:15
  • python中可以发生异常自动重试库retrying

    2022-03-26 02:23:06
  • explain命令为什么可能会修改MySQL数据

    2024-01-19 14:53:49
  • 基于Jquery+Ajax+Json实现分页显示附效果图

    2024-05-21 10:12:27
  • 一文轻松掌握python语言命名规范规则

    2023-03-23 02:11:43
  • 一文搞懂Pandas数据透视的4个函数的使用

    2022-03-26 02:01:53
  • Python实现螺旋矩阵的填充算法示例

    2022-06-30 00:18:47
  • SQL Server自定义异常raiserror使用示例

    2024-01-22 10:41:08
  • MYSQL 字符串操作

    2008-11-13 12:34:00
  • asp之家 网络编程 m.aspxhome.com