Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CSS修改器触发得太早,但仅在本地运行时触发_Javascript_Jquery - Fatal编程技术网

Javascript CSS修改器触发得太早,但仅在本地运行时触发

Javascript CSS修改器触发得太早,但仅在本地运行时触发,javascript,jquery,Javascript,Jquery,这是我的代码: 它在JSfiddle上非常有效。当我在本地运行这段代码时,它的工作方式不同,当我向下移动页面滑块时,它会立即将黄色导航栏更改为“位置固定”,而不是在它即将从页面上滚动时执行 var init = $('#select').offset().top; $(window).scroll(function () { if ($(window).scrollTop() > init) { $('#select').css({ top:

这是我的代码:

它在JSfiddle上非常有效。当我在本地运行这段代码时,它的工作方式不同,当我向下移动页面滑块时,它会立即将黄色导航栏更改为“位置固定”,而不是在它即将从页面上滚动时执行

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')将是一个良好的开端。“试着减轻这件事的影响。”吉米希望我能帮上忙。如果这解决了您的问题,请将其标记为已回答。