如何使用侧推菜单防止正文滚动

Sar*_*ra_ 6 html javascript css wordpress jquery

我正在尝试将推送侧菜单插件(响应式菜单)正确实现到 wordpress 主题中。基于SO @Congrim 的回答,我设法实现了一种body在推送菜单打开时锁定滚动条的方法(所有元素包括header固定元素),除了class=edge-ils edge-ils-with-scroll edge-ils-light在推送菜单打开时仍会上升的交互式链接。

我已将此序列保存到congrim.js文件中,并将脚本放入functions.php文件中的主题中:

function lockScroll() {
    if ($('body').hasClass('lock-scroll')) {
        $('body').removeClass('lock-scroll');
    }
    else {
        $('body').addClass('lock-scroll');
    }
}


/* I've implemented `onclick="lockScroll();"` in button element, 
 * using this sequence in the same congrim.js file:
 */    

$(document).ready(function() {
    $('#responsive-menu-pro-button').click(function() {
       lockScroll();
    }); 
});
Run Code Online (Sandbox Code Playgroud)

卸下jQuery的包装不会放弃在浏览器控制台(在Chrome测试)的任何错误可能仍然是一个不错的办法,以wrapp这样的代码在WordPress(?)在这些情况下,不幸的是,overflow: hidden;不适用,在按压侧菜单打开,我不能在 CSS 文件/部分中使用这个类:

.lock-scroll {
    overflow: hidden;
}
Run Code Online (Sandbox Code Playgroud)

该代码将只允许我使用

.lock-scroll {
    position: fixed;
}
Run Code Online (Sandbox Code Playgroud)

问题:
是否有可能强制代码实现overflow: hidden;* 或任何其他解决方法,以使交互链接class=edge-ils edge-ils-with-scroll edge-ils-light不会在推送侧菜单打开,以保持固定在打开菜单之前单击查看器的位置?

请只关注交互链接问题,场景的其余部分都很好(header并且logo已经就位,背景图片也应该如此)。

LE: *在显示/隐藏滚动条期间,overflow: hidden;它看起来会body在菜单打开/关闭时产生不需要的移动效果,这在此阶段不会发生。

LE2:congrim.js文件已被body-lock.min.jsOutsource WordPress替换,请参阅下面的解决方案。

网站测试页面在这里

Out*_*ess 5

请检查下面给出的解决方案。

第 1 步:添加此 CSS .scroll-lock{position:fixed !important;}

第 2 步:添加此 JS。

$(document).ready(function() {
    var windowTop = 0;
    var menuOpen = 0;
    var offsetContainerList = 0;

    $('#responsive-menu-pro-button').click(function() {
        var offsetScrollList = $('.edge-ils-item-link:first').offset().top; 

        if ($('html').hasClass('scroll-lock')) {
            $('#responsive-menu-pro-container').one("webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend",
              function(event) {
                  if (menuOpen==0) {
                      menuOpen = 1;
                      $('html').removeClass('scroll-lock');  
                      $('.edge-ils-content-table').css('top', eval(offsetContainerList)-40+'px'); //change image container top position
                      $('html').scrollTop(windowTop); //scroll to original position
                  }
                  else {   
                      menuOpen = 0;             
                  }
            });
        }
        else {                
            windowTop = $(window).scrollTop();
            offsetContainerList = $('.edge-ils-content-table').offset().top;  
            $('html').addClass('scroll-lock');      
            $('.edge-ils-content-table').css('top', -offsetScrollList + 'px'); //change image container top position
        }      
    }); 
}); 
Run Code Online (Sandbox Code Playgroud)

就是这样!