javascript菜单栏固定定位:巧妙设置top值,避免显示异常
本文分析一段JavaScript代码,该代码旨在实现网页滚动时,侧边栏菜单固定在页面上方特定位置的效果。代码通过动态调整菜单栏的top值和position属性来实现这一功能,但currentTop变量的赋值时机和值却导致了异常行为。
代码如下:
var sideBarRight = document.querySelector('.sideBar_right ul'); var sideBarRightTop = sideBarRight.offsetTop; var currentTop = ''; // 这里的问题 document.body.onscroll = function() { var docScrollH = document.documentElement.scrollTop; if (docScrollH > sideBarRightTop ) { sideBarRight.style.position = 'fixed'; sideBarRight.style.top = '75px'; } else { sideBarRight.style.position = 'absolute'; sideBarRight.style.top = currentTop; // 这里的问题 } }
这段代码试图在页面滚动超过侧边栏初始位置(sideBarRightTop)时,将侧边栏固定在距离顶部75px的位置;否则,恢复侧边栏到其初始位置。currentTop变量的处理是问题的关键。
如果currentTop初始化为空字符串(""),当else代码块执行时(页面滚动距离未超过sideBarRightTop),sideBarRight.style.top将保持其初始值(例如260px)。这是因为空字符串并非undefined,浏览器将其解释为保留元素的原始样式。
立即学习“Java免费学习笔记(深入)”;
如果将currentTop声明为var currentTop;,不进行初始化,则其值为undefined。如果先执行if代码块(页面滚动超过sideBarRightTop),再执行else代码块,sideBarRight.style.top将保持为'75px'。这是因为undefined值会被浏览器忽略,保留之前设置的值。
因此,currentTop的值至关重要。空字符串和undefined在JavaScript中行为不同。空字符串导致浏览器保留元素原始样式,而undefined则被忽略。 这并非null和undefined类型区别,而是变量值的不同导致浏览器对style.top属性处理方式的差异。
为了解决这个问题,应该在初始化时将currentTop设置为侧边栏的初始top值:
var sideBarRight = document.querySelector('.sideBar_right ul'); var sideBarRightTop = sideBarRight.offsetTop; var currentTop = sideBarRight.style.top; // 正确的初始化方式 document.body.onscroll = function() { var docScrollH = document.documentElement.scrollTop; if (docScrollH > sideBarRightTop ) { sideBarRight.style.position = 'fixed'; sideBarRight.style.top = '75px'; } else { sideBarRight.style.position = 'absolute'; sideBarRight.style.top = currentTop; } }
这样,currentTop就准确地保存了侧边栏的初始垂直位置,避免了显示异常。 通过这种修正,代码能够正确地实现菜单栏的固定定位效果。
以上就是JavaScript菜单栏固定定位:top值如何正确设置才能避免显示异常?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号