美文网首页前端开发让前端飞Web 前端开发
CSS-Bootstrap:关于bootstrap单页面中多Mo

CSS-Bootstrap:关于bootstrap单页面中多Mo

作者: i7eo | 来源:发表于2016-08-19 16:09 被阅读1051次

在web苦海中前行真的是一件十分煎熬但又开心的事,煎熬是因为时常被小bug和杂七杂八的兼容性影响,而开心是因为终于大学毕业可以拿转正工资了! 
  步入正轨,在做毕设时我在单页面中新建用户采用modal而判断添加成功后还采用modal提示成功后右边的滚动条会出来俩条,覆盖整个body的阴影瞬间变暗。真的是哔了dog,如今在公司又出现了阴影的问题所以我观察了源码后发现 ,bootstrap.js文件中modal的遮罩层函数如下:
Modal.prototype.backdrop = function (callback) { var that = this var 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),在特定的情况下说不定有出其不意的效果!

前面还说到有多余滚动条的问题,因为这个问题当时做毕设没有深究而到了新公司换了新设备已经没有这个问题了so我就偷了下懒。不过我相信没有攻读源码还解决不了的bug,如果有那就再度一遍源码吧。。。###


update by George 2016-12-6 9:43

多滚动条(即收缩感问题),当时没有解决现在又遇到了。自己了看源码发现在modal出现时对body进行了样式的修改,具体如下:
<pre><code>
  body{
    overflow:auto;overflow-y:scroll;
  }
</pre></code>
在网上查了下是因为让不同浏览器下的modal样式统一,╮(╯▽╰)╭还是自己太年轻没想到,下来的事就是阻止bootstrap调用modal的默认样式了,还是自己当时一头钻进了怎么改样式的死胡同而没有想到查看官方api找到对应的事件......
<code>
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' });
  } }
</code>
  调用的时候:
<code>
Modal.prototype.show = function (_relatedTarget) {
 this.adjustBody_beforeShow();
  //...other code
}
Modal.prototype.hide = function (e) {
 this.adjustBody_afterShow();
  //...other code
}
</code>
  其实这个代码还有能改进的地方,这里只是放出来提醒自己思考的时候不能钻进胡同应适当转换角度思考。
偷师资料:解决Bootstrap模态框切换时页面抖动 or页面滚动条

相关文章

  • CSS-Bootstrap:关于bootstrap单页面中多Mo

    在web苦海中前行真的是一件十分煎熬但又开心的事,煎熬是因为时常被小bug和杂七杂八的兼容性影响,而开心是因为终于...

  • boostrap简单使用记录

    关于bootstrap,只是在项目中,为了帮后台快速简单的写一个单页面,而使用了boostrap的一些组件。。简单...

  • Bootstrap实战 - 单页面网站

    一、介绍 单页面结构简单、布局清晰,常常用来做手机 App 或者某个产品的下载介绍页面。现在,展示型网页整体趋向于...

  • webpack4构建多页应用,了解一下

    用webpack构建多页应用可以有2种思路,多页面单配置 vs. 多页面多配置。本例子采用多页面单配置,即在单页应...

  • web系统方案探究

    当需要开发一个管理端系统,你会考虑什么技术选型了? 单页面or多页面 单页面应用,或者是多页面应用? 单页面渲染速...

  • Vue百度搜索框实例

    百度搜索框实例 思路:通过vue.js和bootstrap.js来构建搜索框和列表页面架构;文本输入框通过v-mo...

  • 单页面还是多页面

    已有后端服务action,每个action返回固定的一个页面,上面的内容为json值. 可以把后台看做是提供jso...

  • 单页面 VS 多页面

    单页面与多页面对比图 单页面应用缺点:1.首屏时间慢,SEO差:单页应用的首屏时间慢,首屏时需要请求一次html,...

  • 多页面和单页面

    多页面模式(MPA Multi-page Application): 多页面跳转需要刷新所有资源,每个公共资源(...

  • 单页面多页面区别

    多页面模式(MPA Multi-page Application): 单页面模式(SPA Single-pag...

网友评论

    本文标题:CSS-Bootstrap:关于bootstrap单页面中多Mo

    本文链接:https://www.haomeiwen.com/subject/fumbsttx.html