继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

从swiper轮播图插件失灵的问题来解析浏览器渲染机制

LEATH
关注TA
已关注
手记 315
粉丝 93
获赞 466

最近做了个有关swiper插件的项目,出现了如下问题:


webp


如图,需求是点击a页面的banner图,然后在a页面展现出一个轮播图,想的是挺简单的,但做出来就是不行,一开始的思路是:先把a页面切好,然后将点击banner图展现出来的页面先用display:none隐藏掉,当点击时,即display:block。
怎么调试,也找不到原因,然后就把轮播图这个页面分离了出来,完美运行,屡试不爽。
经过查阅资料后,发现应该与display:none有关,这涉及到浏览器的渲染机制

  • 解析HTML —> 构建DOM树

  • 加载样式 —> 解析样式 —> 构建样式规则树

  • 加载javascript —> 执行javascript代码

  • 把DOM树和样式规则树匹配构建渲染树

  • 计算元素位置进行布局

  • 绘制


    webp


    解析:把DOM树和样式规则树匹配构建渲染树时,只会把可见元素和它对应的样式规则结合一起产出到渲染树,这就意味有不可见元素,当匹配DOM树和样式规则树时,若发现一个元素的对应的样式规则上有display:none,浏览器会认为该元素是不可见的,因此不会把该元素产出到渲染树上。
    经上所述,可以意识到是在swiper实例化的时候,此元素没有渲染,所以出了问题。
    解决方案(奇淫巧技):
    加了一个类名,类名css 样式如下

.hidden{  visibility: hidden;  position: fixed;  z-index: -99999999999999;
}

当点击banner图的时候,再加上.display类名

.display{  visibility: visible;  position: fixed;  z-index: 99999999999999;
}

这样能同样能达到隐藏显示的效果
最后效果为:


webp

             



作者:李佳明同学
链接:https://www.jianshu.com/p/c726d610ea73


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP