Javascript CSS修改器触发得太早,但仅在本地运行时触发
这是我的代码: 它在JSfiddle上非常有效。当我在本地运行这段代码时,它的工作方式不同,当我向下移动页面滑块时,它会立即将黄色导航栏更改为“位置固定”,而不是在它即将从页面上滚动时执行Javascript CSS修改器触发得太早,但仅在本地运行时触发,javascript,jquery,Javascript,Jquery,这是我的代码: 它在JSfiddle上非常有效。当我在本地运行这段代码时,它的工作方式不同,当我向下移动页面滑块时,它会立即将黄色导航栏更改为“位置固定”,而不是在它即将从页面上滚动时执行 var init = $('#select').offset().top; $(window).scroll(function () { if ($(window).scrollTop() > init) { $('#select').css({ top:
var init = $('#select').offset().top;
$(window).scroll(function () {
if ($(window).scrollTop() > init) {
$('#select').css({
top: 0,
position: 'fixed'
});
} else {
$('#select').css('position', 'relative');
}
});
很明显为什么会发生这种情况吗?javascript控制台中没有错误。您需要等待DOM准备就绪。事实并非如此,使用
$('#select')
可能找不到正确的元素,并且您的init值被弄乱了,当发生滚动时,另一个值可能会被弄乱
用以下代码包装您的代码:
$(function () {
// Your code here... now taht the DOM is ready
});
不要忘记缓存jQuery对象。必须避免始终使用$()查找和包装
请注意,scroll
等输入事件的繁重处理程序被强烈禁用。
并在JS之前包含CSS
额外:取消抖动滚动事件
为了说明这个概念,在这里,您的回调不会在每次scroll
输入时被调用:
var scrollTimeout,
callback = function () {
/// Do your things here
};
$(window).scroll(function () {
if (scrollTimeout)
clearTimeout(scrollTimeout);
scrollTimeout = setTimeout(callback, 40);
});
jQuery1.3.1已经超过5年了,而且您使用JSFIDLE的方式也不正确。它为您提供了外部HTML样板文件。要包含库,请使用左侧面板中的工具。请特别注意控制JavaScript面板中的代码如何包含在最终页面中的工具。正如您现在看到的,该代码将被放置在“加载”事件处理程序中,因此它将在页面完全加载后运行。否则,“init”将被错误初始化。啊,现在它可以工作了!非常感谢。如果把处理程序放在卷轴上是个坏主意,你能建议另一种方法吗?我在上面写了更多的提示。所以:
var$window=$(window),$select=$('#select')代码>将是一个良好的开端。“试着减轻这件事的影响。”吉米希望我能帮上忙。如果这解决了您的问题,请将其标记为已回答。