2019独角兽企业重金招聘Python工程师标准>>>

在单页面中新建用户采用modal而判断添加成功后还采用modal提示成功后右边的滚动条会出来俩条,覆盖整个body的阴影瞬间变暗。真的是哔了dog,如今在公司又出现了阴影的问题所以我观察了源码后发现 ,bootstrap.js文件中modal的遮罩层函数如下:

Modal.prototype.backdrop = function (callback) {var that = thisvar animate = this.$element.hasClass('fade') ? 'fade' : ''
if (this.isShown && this.options.backdrop) {var doAnimate = $.support.transition && animate
this.$backdrop = $(document.createElement('div')).addClass('modal-backdrop ' + animate).appendTo(this.$body)......}

后面还有balabala一大串,但这些就足够分析了。在单击modal后会有一个叫modal-backdrop的div层apped到body之后,那言下之意是不管开几个modal都会不断的向body后append!  ╮(╯_╰)╭  !怎么能这样。。。然后我简单对modal-backdrop进行处理,如下:

document.getElementById('ta').addEventListener('click' , function(){$('#myModal').modal('show');
});
document.getElementById('tt').addEventListener('click' , function(){$('#myModal1').modal('show');
/*$('#myModal').modal('hide');
*/
console.log($('.modal-backdrop').length)console.log($('.modal-backdrop'))var iLen = $('.modal-backdrop').length;for(var i = 0; i<iLen;i++){$('.modal-backdrop')[i].id = 'modal'+i;}if(iLen>1){for(var i =1;i<2;i++){$('#modal'+i).removeClass();}}
});

为每个modal-backdrop对应的div添加个id,然后找到这个div将.modal-backdrop这个removeClass()掉就行。在这里肯定会有小伙伴说不论是几个那只需要在显示当前modal的时候把剩下的hide不就可以了么?这个办法我也试了试如上代码前6行,这样做确实能达到阴影不加深的效果但是用户体验会差很多,因为hide的时候页面会刷新。其实有的时候我们也可以根据项目需要自行编写遮罩层(也就是模拟modal的效果,网上资料叫mask-div),在特定的情况下说不定有出其不意的效果!

网上有个解决思路是改变z-index,这个方法测试过,弹出modal框没问题,只是在弹出多次modal框之后,后面背景会加深,都看不到被遮盖的页面了:

$(document).ready(function() {// 通过该方法来为每次弹出的模态框设置最新的zIndex值,从而使最新的modal显示在最前面$(document).on('show.bs.modal', '.modal', function() {//貌似这里始终为0,获取不到$('.modal:visible')的jquery对象,因为这个时候modal遮盖层还没有显示出来var zIndex = 1040 + (10 * $('.modal:visible').length);$(this).css('z-index', zIndex);setTimeout(function() {//在遮盖层被赋予样式显示出来之后再执行该方法(这里$('.modal-backdrop').not('.modal-stack')可能有多个,弹出多次modal框之后,页面被多个遮盖层覆盖)$('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack');//改进的方法,只保留一个,其余移除样式应该可以,没测试过.../*var iLen = $('.modal-backdrop').length;for(var i = 0; i<iLen;i++){$('.modal-backdrop')[i].id = 'modal'+i;}if(iLen>1){for(var i =1;i<2;i++){$('#modal'+i).removeClass();}}*/}, 0);});
});

多滚动条(即收缩感问题)

看源码发现在modal出现时对body进行了样式的修改,具体如下:

  body{    overflow:auto;overflow-y:scroll;  }

在网上查了下是因为让不同浏览器下的modal样式统一,╮(╯▽╰)╭还是自己太年轻没想到,下来的事就是阻止bootstrap调用modal的默认样式了,还是自己当时一头钻进了怎么改样式的死胡同而没有想到查看官方api找到对应的事件......

Modal.prototype.adjustBody_beforeShow = function(){var body_scrollHeight = $('body'[0].scrollHeight;var docHeight = document.documentElement.clientHeight;if(body_scrollHeight > docHeight){$('body').css({ 'overflow' : 'hidden', 'margin-right' : '15px' });$('.modal').css({'overflow-y':'scroll'})}else{$('body').css({ 'overflow' : 'auto', 'margin-right' : '0' });$('.modal').css({'overflow-y':'auto'})}
}
Modal.prototype.adjustBody_afterShow = function(){var body_scrollHeight = $('body')[0].scrollHeight;var docHeight = document.documentElement.clientHeight;if(body_scrollHeight > docHeight){$('body').css({ 'overflow' : 'auto', 'margin-right' : '0' });}else{$('body').css({ 'overflow' : 'auto', 'margin-right' : '0' });}
}

调用的时候:

Modal.prototype.show = function (_relatedTarget) {this.adjustBody_beforeShow();//...other code
}
Modal.prototype.hide = function (e) {this.adjustBody_afterShow();//...other code
}

实例:

删除框,在点击的时候,弹出"是否删除"对话框:

<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="infoModalLabel" aria-hidden="true"><div class="modal-dialog"><div class="modal-content"><div class="modal-content" ng-transclude=""><div bindonce="" class="ng-scope"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" data-ng-click="close(false)" aria-hidden="true">×</button><h5 class="modal-title ng-binding">提示</h5></div><div class="modal-body"><div><span class="text-size-32 icon-warning-1 text-info" style="color: #09c !important"></span> <span style="display:inline;margin-bottom: 10px;margin-left: 10px;vertical-align:6px;font-size: 18px" bo-bind="'invoice.directive.addressListAction.sureCancelAddress'|translate">确定要删除这条发票信息吗?</span></div></div><div class="modal-footer"><button type="button" class="btn btn-primary" data-dismiss="modal" onclick="deleteFun();">确定</button><button type="button" class="btn btn-default" data-dismiss="modal">取消</button></div></div></div></div></div></div>

删除按钮:

<a class="btn-sm btn-primary" onclick="modifyBtnClickToInfo(this);return false;" uid="${ssoInvoice.id}">修改</a>
<a class="btn-sm btn-primary" onclick="deleteBtnClickToInfo(this);return false;" uid="${ssoInvoice.id}" >删除</a>

javascript:

/*设定被删除的元素的ID值*/
function deleteBtnClickToInfo(dom){deleteSsoInvoiceId = $(dom).attr('uid');$("#deleteModal").modal('show');removeModalBackdrop();
}/*保留一层遮盖层,移除其他遮盖层*/
function removeModalBackdrop(){var iLen = $('.modal-backdrop').length;for(var i = 0; i<iLen;i++){$('.modal-backdrop')[i].id = 'modal'+i;}if(iLen>1){for(var i =1;i<2;i++){$('#modal'+i).removeClass();}}
}

效果图:

一个页面两个modal:

转载于:https://my.oschina.net/u/2331760/blog/1523291

Bootstrap:关于bootstrap单页面中多Modal的问题相关推荐

  1. 怎样在vue单页面中引入其他组件

    场景 在一个vue的单页面,假如是home.vue中要引入其他组件的内容. 页面结构如下: 实现 首先在components下新建组件Today_recommend.vue组件 <templat ...

  2. principle导出html5,让Principle成为生产力工具(二)单页面中的联动

    Sketch49更新了link功能,但是中间帧补齐才是 Principle 相比于 Sketch新版功能的优势所在. 写在前面的话: Sketch49 正式发布了,在新的版本中加入了期待已久的  Li ...

  3. Vue单页面中进行业务数据的上报

    为什么要在标题里加上一个业务数据的上报呢,因为在咱们前端项目中,可上报的数据维度太多,比如还有性能数据.页面错误数据.console捕获等.这里我们只讲解业务数据的埋点. 业务数据的上报主要分为: 各 ...

  4. 单页面应用微信分享跳坑指南

    前言 最近在开发的时候遇到了一个微信分享的bug,就是无论你在哪个路径下的页面,发送给朋友后点开都只会跳到项目的首页.本来微信分享这个只算是一个小功能,也很好解决,但由于项目的特殊性,使得在这个bug ...

  5. html加上百度统计,vue单页面应用加入百度统计

    版权声明:本文为CSDN博主「钟文辉」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/qq_39753974/ ...

  6. 单页面网站seo优化的基本要点

    一个专业的网站建设者从来都不是与生俱来的,在苦练怎样建成一个好网站的过程中必定走过弯路,吃过苦头,对网站的架构.页面展示以及优化等各方面都需要精雕细琢,今天,我们就从seo的角度谈谈单页面网站建设的好 ...

  7. 单页面vue使用webwork

    webwork的定义 webwork为单页面使用多线程,不影响页面的渲染,充分补全的js单线程阻塞页面渲染的缺点,项目中使用还是很受欢迎的 webwork的封装 webwork在单页面中使用会遇到打包 ...

  8. php登陆页面修改密码的功能,使用bootstrap创建登录注册页面并实现表单验证功能...

    本篇文章给大家介绍一下使用bootstrap创建登录注册页面并实现单验证功能的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 用bootstrap做登入注册页面,使用valid ...

  9. bootstrap实现单页面跳转_SpringBoot拦截器,国际化,登录实现

    首先将模板文件导入resources/templates,配置MyMvcConfig @Configurationpublic class MyMvcConfig implements WebMvcC ...

最新文章

  1. [转] React风格的企业前端技术
  2. 解决启动WebLogic输入用户名密码问题以及密码重置
  3. #浪潮之巅#苹果公司和乔布斯神话----有感
  4. 加密狗厂商及工作原理介绍
  5. 网站上点击自定义按钮发起QQ聊天的解决方案
  6. 通信原理几种调制方式
  7. 交警罚没系统数据一致性问题
  8. Windows窗口命令大全
  9. 凯联医疗完成逾亿元C轮融资 加速布局微量药物输注领域
  10. 远程主机强迫关闭了一个现有的连接
  11. 【毕业设计】基于大数据的销量数据预测 -python销量预测 大数据 可视化
  12. 好玩的免费GM游戏整理汇总
  13. 如何用数学课件制作工具绘制函数图像
  14. Python解决数学难题:囚徒存活的概率 ‘‘‘
  15. 配置网络拓扑图测试软件,某网络拓扑图如下所示,三台路由器上均运行RIPv1协议,路由协议配置完成后,测试 - 信管网...
  16. 中国化妆品用脂质体市场现状研究分析与发展前景预测报告
  17. 测试开发之Python核心笔记(19): 深入理解类的属性
  18. 程序员到高级架构师,必须经历的三个阶段
  19. 关于在ubuntu中修改Android源码的一些细节
  20. 保罗·格雷厄姆:如何获得创业点子?

热门文章

  1. 搞懂限流算法这一篇就够了 No.154
  2. 剑指offer_第7题_斐波那契数列
  3. 人工智能,能治工人!
  4. AI杀入斗地主领域,快手开发DouZero对标AlphaZero,干掉344个AI获第一
  5. 用AI还原李焕英老照片动态影像
  6. NeurIPS 2020 接收率创史低,千篇论文被摘要拒稿,官方:错误率只有 6%
  7. 1小时生成无限玩法,GPT-3加持的密室逃脱,让游戏策划师感受到了职场危机
  8. 4岁的儿子还不会写红黑树,我该怎么办?
  9. 爬了下知乎上的高颜值小姐姐!美翻了!
  10. 原来被原子弹炸到是这种感觉!也太刺激了吧!