javascript - JQuery position() 和 offset() 方法不起作用

标签 javascript html jquery css

我是一名初学者程序员,我正在尝试创建这种效果,当我滚动浏览 HTML 中的特定元素时,导航栏中按钮的颜色会改变颜色。我认为这样做的正确方法是 jQuery。我在获取页面中元素的位置时遇到问题。我尝试过使用 position() 和 offset() 方法。但似乎两者都不起作用。
我想获得 ID 为“info”和“security”的元素的垂直位置。我有这些方法在某些情况下不是很可靠,但我找不到替代方法。
这是我到目前为止的代码:

   $(window).on('load', function(){ 
      window.loaded = true;
      console.log("LOADED");
    });
    $( window ).scroll(function() {
      if (window.loaded == true){  
        var scrollTop = $(window).scrollTop();
        var infopos = $( "#info" );
        var secpos = $("#security");

        if (scrollTop >= 0 && scrollTop < infopos-25) {
            $( "#navgeneral" ).addClass("active");
            $( "#navinfo" ).removeClass("active");
            $( "#navsecurity" ).removeClass("active");
        }
        else if (scrollTop >= infopos && scrollTop < secpos){
            $( "#navgeneral" ).removeClass("active");
            $( "#navinfo" ).addClass("active");
            $( "#navsecurity" ).removeClass("active");
        }
      }    
    });`
提前谢谢你的建议!!

最佳答案

干得好。

    //Declare these first
    const infopos = $( "#info" ).scrollTop();
    const secpos = $("#security").scrollTop();

    $(window).on('load', function(){ 
      window.loaded = true;
      console.log("LOADED");
    });
    $( window ).scroll(function() {
      if (window.loaded === true){ 
 
        let scrollTop = $(window).scrollTop();

        if (scrollTop < infopos-25) {     //scrollTop >= 0 will always be true so skip it
            $( "#navgeneral" ).addClass("active");
            $( "#navinfo" ).removeClass("active");
            $( "#navsecurity" ).removeClass("active");
        }
        else if (scrollTop >= infopos && scrollTop < secpos){
            $( "#navgeneral" ).removeClass("active");
            $( "#navinfo" ).addClass("active");
            $( "#navsecurity" ).removeClass("active");
        }
      }    
    });`
首先要充分了解变量的工作原理,请尝试使用let而不是 var大多数时候在声明变量时。这将防止意外覆盖全局变量。

关于javascript - JQuery position() 和 offset() 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69624891/

相关文章:

使用 isNaN 和 !==0 的 Javascript 验证

javascript - 对象不支持 ajax POST 到 Web Api 上的属性或方法 'val'

javascript - FullCalendar JS - TimeGrid 上的样式问题

JQuery ReplaceWith() 函数混淆

javascript - JS/HTML : Adding class to parent of search input not working

javascript - 从拼接图像悬停时图像变化

asp.net - 每次按钮都会导致完整的回发,即使是在更新面板中

javascript - 在 JavaScript 中创建 get/set 函数(如 jQuery)

javascript - 将新属性附加到现有 JSON 对象

html - Bootstrap 菜单格式化问题 Meteor Js