元素闪烁很丑,难解决。

修改 Class 而不是 Style

我在不久前做过一个导航栏,要求其滚动到屏幕顶端后固定。很常见。开始的时候没问题,很快就可以搞定。

nav {position: absolute;top: 60px;
}
var scroll=0;
var nav=$("nav");
var navST=60; //该元素距离网页顶端60px$(window).scroll(function(){if($(document).scrollTop()>navST && scroll==0){nav.css({position: "fixed",top: "0"});scroll=1;}else if($(document).scrollTop()<=navST && scroll==1){nav.removeAttr("style");scroll=0;}
});

运行很流畅。

做好,我自然就忙着网页内容去了。没曾想,随着页面 JS 的不断增加,导航栏在固定时出现了可怕的闪动。

唔,就是 一下看得见 一下看不见 的东西!

应该有不少人和我一样。百度,无果。谷歌,看不懂,翻译也不行。
不知道真相的我,眼泪 流下来。

哦!一道莫名的亮光从我的眼前闪过!这道亮光里,有希望,,有兴奋,,组成了四个大字:

元素重绘

就在这千万分之一秒,亿万分之一秒 里,我理解了:

nav.css({position: "fixed",top: "0"});

这一句 JS 产生了两次 DOM 写入,影响浏览器渲染页面两次。

使用 $.addClass 语句可以解决。

nav {position: absolute;top: 60px;
}
.fixed {position: fixed;top: 0;
}
var scroll=0;
var nav=$("nav");
var navST=60; //该元素距离网页顶端60px$(window).scroll(function(){if($(document).scrollTop()>navST && scroll==0){nav.addClass("fixed");scroll=1;}else if($(document).scrollTop()<=navST && scroll==1){nav.removeClass("fixed");scroll=0;}
});

闪烁问题得到了临时解决。

采用不可见元素减少 DOM 变更产生的运算

“临时” 说法的原因是当 JS 数量再次增加,达到又一新高度后,闪烁问题再现。
原因大概是 $.addClass 时浏览器需要重新计算该元素位置, JS 数量过多使计算过程明显。
不多说,在 HTML 里多放一个包含 .fixed 的宽高为 0 的元素即可解决。

<div class="fixed"></div>
<nav>something...</nav>

别让这个 div.fixed 显示出来。

至此,全面解决 “动态添加样式导致的元素闪烁” 。

原生 JS 进一步加快速度避免闪烁

jQuery 是个好东西。原生 JS 更是个好东西。

有些 jQuery 代码,被转化为好多条原生 JS 才实现效果。
然而其实只需要一条。
将 jQuery 代码转化为原生 JS 是个加快速度,避免闪烁的不二选择。

var scroll=0;
var navST=60; //该元素距离网页顶端60pxwindow.onscroll = function(){if(document.documentElement.scrollTop || document.body.scrollTop>navST && scroll==0){document.getElementsByTagName("nav")[0].classList.add("fixed");scroll=1;}else if(document.documentElement.scrollTop || document.body.scrollTop<=navST && scroll==1){document.getElementsByTagName("nav")[0].classList.remove("fixed");scroll=0;}
};

导航栏加载时可能出现闪的原因以及解决办法相关推荐

  1. Android应用启动时白色闪屏原因及解决办法

    白色闪屏现象: 如果OnCreate().onStart().onResume()中操作太多,耗时较久.那么就会在主界面显示出来之前出现白色闪屏.为了更清晰的看出白色闪屏,这里在代码中执行50000次 ...

  2. Matlab在win10运行不出图片,win10系统网页图片加载不出来的六种原因及解决方法...

    大家经常会使用浏览器来浏览一些站点查看图片,最近有的用户说win10系统打开网页时发现页面图片加载不出来,只显示一个×标志,让人百思不得其解,其实出现此问题可能是网速过低,或者浏览器设置里面没有开启相 ...

  3. 未来教育c语言加载不出来图片,win10系统网页图片加载不出来的六种原因及解决方法[多图]...

    大家经常会使用浏览器来浏览一些站点查看图片,最近有的用户说win10系统打开网页时发现页面图片加载不出来,只显示一个×标志,让人百思不得其解,其实出现此问题可能是网速过低,或者浏览器设置里面没有开启相 ...

  4. VS2010未能加载 'VSTS for Database Professionals'包的解决办法

    VS2010未能加载 'VSTS for Database Professionals'包的解决办法: 开始菜单->Microsoft Visual Studio 2010->Visual ...

  5. 御龙在天手游怎么不显示服务器了,御龙在天手游进不去怎么办 闪退原因及解决办法...

    御龙在天手游进不去怎么办?闪退原因及解决办法.御龙在天手游今天迎来了安卓平台的不删档不限号测试(游戏出现打不开的问题,下面就让小编为大家介绍一下出现这类问题的原因及解决办法吧! 1.服务器问题 游戏早 ...

  6. 闪烁之光为什么闪退_《光遇》闪退原因及解决办法介绍

    <光遇>游戏闪退怎么解决?很多小伙伴表示最近打开游戏经常会出现闪退的情况,而且还很频繁,基本上经常出现闪退,那么闪退的原因是什么?怎么解决游戏的闪退呢?接下来小编为大家带来<光遇&g ...

  7. XILINX偶然加载不成功的问题原因及解决方法

    本文为明德扬原创文章,转载请注明出处! 一.项目背景        明德扬(MDY)在2021年承担了多个基于XILINX芯片的研发项目,包括VPX网络透明传输项目(芯片为XC7K325T-2FBG9 ...

  8. EasyCVR平台H.265视频播放加载致服务异常的偶发现象解决办法

    EasyCVR视频融合云平台视频能力丰富.兼容性强.开放度高,它能对多种终端(PC电脑.手机.平板.电子大屏等)分发出RTSP.RTMP.FLV.HLS.WebRTC等格式的视频流,在视频接入上也能支 ...

  9. 解决bootstrap table刷新加载时白色闪屏问题

    根据项目需要,把bootstrap table都改成了蓝色的风格,但是今天测试的时候发现了一个小的问题.每次刷新加载的数据的时候,总是会有一闪而过的白屏.很影响交互效果,这个时候,需要找到bootst ...

最新文章

  1. 获取远程文章内容时,显示图片的两种方式
  2. CentOS 6.4 安装RBTools 报错 ImportError: Entry point ('console_scripts', 'easy_install') not found...
  3. 【原创】C# Sealed、new、virtual、abstract、override的理解
  4. 使用Asp.net Core3Blazor 的全栈式网站开发体验
  5. 有什么办法让Beyond Compare以网页形式显示文件
  6. en55032最新标准下载_关于欧盟新版EMC标准EN55032的解析
  7. 剖析虚幻渲染体系(16)- 图形驱动的秘密
  8. 树莓派运用阿里云API实现语音识别
  9. b站上的计算机课程有哪些,B站课程排行榜,这届大学生最爱学什么?
  10. L1-044 稳赢 (15 分)(JAVA)
  11. 题目1026 c语言,1026 程序运行时间——C/C++实现
  12. java计算某一天是这一年的第几天
  13. mpp region osd反色
  14. 线性代数:第四章 向量组的线性相关性(1)向量组的线性相关性 向量组的秩
  15. minu-ui 的 mt-datetime-picker 组件在部分安卓机型上不显示日期只有取消和确认按钮
  16. weinre 真机调试
  17. 基于openCV库的张正友标定法的一些实验结果
  18. 找电影神器:根据台词对白查询出自哪部影片/动漫
  19. Web服务器与Web容器的概念
  20. 【Unity】Unity开发进阶(七)双刃剑:扩展方法

热门文章

  1. 2018年——年终总结
  2. table2excel 页面导出excel 带边框,文字剧中
  3. 图 4 菌株 CGF9-1-2 中吲哚二酮哌嗪类生物碱在大米培养基各流分中的 GNPS 网络图
  4. 荣耀x10max鸿蒙系统,大屏党游戏与影音神器,荣耀x10Max值得入手吗?
  5. python画动态表情包_腾讯内容开放平台
  6. 计算机老师一句话,给老师的一句话
  7. 重装系统后没声音如何解决
  8. 苹果计算机的隐藏功能有哪些,iPhone隐藏功能有哪些
  9. CPU型号查询一览表
  10. 计算数据的重复和重复的个数(python)