bootstrap添加多个模态对话框支持

摘要:
由于项目的需要,页面交互中将弹出多个对话框窗口,引导模式支持弹出对话框窗口。然而,在此基础上,将弹出越来越多的第一个遮罩层,并且背景越来越暗。代码如下:();openDialog函数传入id,该id是要生成的对话框的div的id。url是对话框中iframe的src。id也将写入模态函数的参数选项中。这个。$此$Backdrop=$(“”)。appendTo添加遮罩层。在模态类代码中添加一个类对象,模态。ids=[];添加遮罩层时,即vardoAnimate=$。支持transition&&animate,按下id,然后判断对话框的数量dialogId=option.id;Modal.ids.push;如果{this.$background=$('').appendTo;$.attr(“style”,“z-Index:100000!

 

因为项目需要,在页面交互上要弹出多个dialog窗口,而bootstrap的modal支持弹出dialog窗口,但是在此基础上,会出先遮罩层越来越多,背景越来越黑的情况代码具体如下:
(function(){ modal = {}; modal.openDialog = function(url, title, width, height, id){}; modal.closeDialog = function(id){}; window.modal = modal; })();

openDialog函数中传入了id,即为即将生成的dialog的div的id,url为dialog中iframe的src,id也将写在modal函数的参数option中

调用多个dialog时,需要传入不同的id;

源代码中

 

backdrop: function (callback) {

        var that = this

          , animate = this.$element.hasClass('fade') ? 'fade' : ''

        if (this.isShown && this.options.backdrop) {

          var doAnimate = $.support.transition && animate

          this.$backdrop = $('')

            .appendTo(document.body)

          this.$backdrop.click(

            this.options.backdrop == 'static' ?

              $.proxy(this.$element[0].focus, this.$element[0])

            : $.proxy(this.hide, this)

          )

          if (doAnimate) this.$backdrop[0].offsetWidth // force reflow

          this.$backdrop.addClass('in')

          if (!callback) return

          doAnimate ?

            this.$backdrop.one($.support.transition.end, callback) :

            callback()

        } else if (!this.isShown && this.$backdrop) {

          this.$backdrop.removeClass('in')

          $.support.transition && this.$element.hasClass('fade')?

            this.$backdrop.one($.support.transition.end, callback) :

            callback()

        } else if (callback) {

          callback()

        }

      }

函数中 this.$backdrop = $('').appendTo(document.body)即为添加遮罩层。

遮罩层实现为在body后添加,并设置该div的z-Index为99999;

我们接下来的实现也是用z-Index,考虑到一层一层网上叠加z-Index,遮罩层只一个即可,而不同的dialog只需比遮罩层的z-Index高即可。

那就仅第一个dialog打开的时候添加遮罩层,其余时候对遮罩层的style中z-Index进行增大即可。

在Modal类代码中添加类对象,Modal.ids = [];

在进行添加遮罩层时,即var doAnimate = $.support.transition && animate 这行代码后对id进行push,再进行判断dialog个数

 

dialogId = option.id;

Modal.ids.push(id);

if(Modal.ids.length==1){

this.$backdrop = $('').appendTo(document.body);

$("#"+id).attr("style","z-Index:100000!important");

}else{

var perviouszIndex = $(".modal-backdrop").css("z-Index");

this.$backdrop = $(".modal-backdrop").attr("style","z-Index:"+(perviouszIndex+2)+"!important");

$("#"+id).attr("style","z-Index:"+(perviouszIndex+3)+"!important");

}
 

而当关闭时,需要对遮罩层的z-Index重新计算,dialog被隐藏了就不需要了,因为再次打开时会再次计算几次

关闭时,对遮罩层的操作在

removeBackdrop: function () {

        this.$backdrop && this.$backdrop.remove()

        this.$backdrop = null

}函数中,改写该函数即可

 

removeBackdrop: function () {

if(Modal.ids==1)

        this.$backdrop && this.$backdrop.remove();

        this.$backdrop = null;

Modal.ids.shift();

}else{

this.$backdrop.attr("style","z-Index:"+(perviouszIndex-2)+"!important");

Modal.ids.shift();

}

以上


免责声明:文章转载自《bootstrap添加多个模态对话框支持》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇nginx 限制ip访问频率和限速 (摘录)内存, 硬盘, CPU是拿什么材料制作的? 电子管, 晶体管与计算机硬件的发展史.下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

微信小程序中遮罩层滚动穿透问题(view增加一个属性解决)

直奔正题: 遮罩层(蒙层)弹出的时候,不应该让遮罩层底下的内容能滚动,小程序中的最佳解决方案亲测如下: <view class="container"catchtouchmove="ture"></view> .container { background-color: #000000; position: fix...

封装两个简单的Jquery组件

Jquery给我们提供了很大的方便,我们把他看成是一个公共库,以致在这个公共库上延伸出了很多Jquery插件;在项目过程中,有些插件总是不那么令人满意; 主要说两个项目用途: 1、 遮罩层,跟一般的遮罩层不一样,我需要实现的是对某一个元素进行局部遮罩; 2、 冒泡提示,网上有很多,我需要的只是一种在页面指定位置弹出来的一个静止定位的div而已;两个就自己了...

html实现弹框,并伴随遮罩层,且弹框居中

本文介绍的内容主要实现的功能有,出现弹框,并且伴随遮罩层,且弹框一直居中。 html和js代码: <div id="hidebg"></div> <div onClick="hidebox();"> <div> <p class="box-head"...

JS 点击按钮后弹出遮罩层,有关闭按钮

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>jQuery弹出层效果</title> <meta content="网页特效,特效代码,jQuery,css特效,Js代码,广告幻灯,图片切换...

解决select2在bootstrap的modal中默认不显示的问题

转https://www.cnblogs.com/skybreak/p/6137035.html 在Bootstrap中的Modal,select2插件会有不显示,因为其z-index小于modal,还有另外一个问题是,修正z-index之后,select2不会自动失去焦点的问题。代码解决如下: <style> /*select2在Bo...

QDialog 模态对话框与事件循环(exec其实就是调用了show和eventLoop.exec)

起源 qtcn中文论坛中有网友问到: 假设程序正常运行时,只有一个简单的窗体A,此时只有一个GUI主线程,在这个主线程中有一个事件循环处理窗体上的事件。当此程序运行到某阶段时,弹出一个模态窗体B(书上说模态窗体是有其自己的事件循环的),此时模态窗体B是否会有一个对应的子线程处理其事件循环? 这儿其实有两个问题: 模态对话框 和 事件循环 没有必然联系 事...