You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅当指定DOM元素存在对应类时执行$(window).on('load')实现粘性侧边栏

实现代码

jQuery(document).ready(function($) {
    // 不需要判断类存在的通用业务代码可放在此处,直接正常执行
    
    if (window.innerWidth > 767) {
        // 判断是否存在带classexists类的div元素
        if ($('div.classexists').length) {
            // 类存在时绑定window.load事件执行粘性侧边栏逻辑
            $(window).on('load', function() {
                var $sticky = $('#sticky');
                var $stickyrStopper = $('.footer');
                if (!!$sticky.offset()) { // 确认sticky元素存在
                    var generalSidebarHeight = $sticky.innerHeight();
                    var stickyTop = $sticky.offset().top;
                    var stickOffset = 0;
                    var stickyStopperPosition = $stickyrStopper.offset().top;
                    var stopPoint = stickyStopperPosition - generalSidebarHeight - stickOffset;
                    var diff = stopPoint + stickOffset;
                    
                    $(window).scroll(function(){ // 滚动事件监听
                        var windowTop = $(window).scrollTop();
                        if (stopPoint < windowTop) {
                            $sticky.css({ position: 'absolute', top: diff });
                        } else if (stickyTop < windowTop+stickOffset) {
                            $sticky.css({ position: 'fixed', top: stickOffset });
                        } else {
                            $sticky.css({position: 'absolute', top: 'initial'});
                        }
                    });
                }
            });
            
            // 兼容window已加载完成的场景,避免load事件漏触发
            if (document.readyState === 'complete') {
                $(window).trigger('load');
            }
        }
        // 类不存在时自动跳过load绑定逻辑,直接执行后续代码
    }
    
    // 其余不需要走load的业务代码放在此处,无论类是否存在都会正常执行
});

关键逻辑说明

  • 类存在判断用$('div.classexists').length即可,返回值大于0就说明存在对应元素,修复了你原写法的语法错误
  • 只有同时满足「屏幕宽度大于767px + 存在指定类的div」两个条件时,才会绑定window.load的粘性侧边栏逻辑,否则直接跳过这部分
  • 新增document.readyState判断,避免代码执行时window已经加载完成,导致绑定的load事件不触发的问题

优化建议

可以新增window.resize事件监听,在窗口尺寸变化时重新计算侧边栏高度、吸附阈值等参数,避免窗口调整后粘性逻辑失效。

内容的提问来源于stack exchange,提问作者Brave Warrior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 13:57:02