我可以修改 Jquery 以使用返回 URL 的条件语句吗?

Can I modify Jquery to use conditional statements based on which URL is returned?

我有一个网站,它使用不同的页面模板并调用 jquery 将网站 header 固定在滚动超过一定数量的像素时。这个粘性 class 在带有固定横幅的页面模板上完美运行,但在我没有包含横幅的页面模板上,我想更改调用滚动功能的位置。例如,以 250 而不是 500 像素出现。

该脚本在 Wordpress 网站上,使用 _ssass 构建,引用如下:

$(window).scroll(function() {
   var sticky = $('.site-header'),
       scroll = $(window).scrollTop();

   if (scroll >= 500) sticky.addClass('sticky-header');

   else sticky.removeClass('sticky-header');    
});

我能想到的两个解决方案是 a) 根据 URL 选择器创建一个条件语句来触发不同的滚动位置 b) 创建第二个 header div class (.site-header-2) 和一个额外的 jquery 文档,它只影响那个 class。

第二个我可以做,尽管如果我要创建多个页面模板,所有页面模板都具有不同的固定滚动高度,那么它会不那么优雅和耗时。

使用上面脚本中的语法,是否有一个简单的解决方案来使用条件参数,根据页面 URL 结构或其他我不知道的实现方式来改变固定滚动位置?

检查横幅元素是否存在并相应地设置滚动起点

// within document.ready
var isBannerPage = $('#bannerId').length;// adjust selector to fit actual
var scrollStart = isBannerPage ? 500 : 250;
//cache element outside event handler to avoid searching many times a second for same element
var sticky = $('.site-header');

$(window).scroll(function() {
  var  scroll = $(window).scrollTop();

   if (scroll >= scrollStart ) sticky.addClass('sticky-header');

   else sticky.removeClass('sticky-header');    
});

我认为解决这个问题的最简单方法是使用具有不同 类 的条件语句,例如

var threshold = 0;
if ( $(.site-header).length > 0 ) 
{
     threshold = 500;
}
else threshold = <something else>

但理想情况下,您不必关心硬编码值,例如“500”。当滚动条经过时,您可能想让 header 变粘,对吧? 在那种情况下,您可以将 threshold 动态设置为 $('site-header').offset().top 之类的东西。