【问题标题】:How to offset top bar height dynamically when scrolling down向下滚动时如何动态偏移顶栏高度
【发布时间】:2019-03-31 11:51:22
【问题描述】:

我试图在向下滚动时偏移公告栏,考虑到公告栏的高度在较小的设备上更为重要。

这是我想要实现的示例:https://8kflexwarm.com/

所以我最终得到了这段代码,它正在工作,但我觉得它没有优化,不是干净的代码。我认为必须有一种方法可以抵消$('.announcement-bar'),而不是手动使用窗口大小。

另外,当我刷新屏幕并且我不在页面顶部时,为什么这段代码不起作用?

有没有办法在不使用库的情况下改进此代码?

if($(window).width() >= 686){
    var a = $(".site-header").offset().top;   
    function scrollListener(){
        if($(document).scrollTop() > a)
        {   
          $('.site-header').css({"margin-top":"-40px"});
          $('.site-header').css({"transition":"0.4s"});
        } else {
          $('.site-header').css({"margin-top":"0px"});
          $('.site-header').css({"transition":"0.4s"});      
        }
    };
    $(document).scroll(scrollListener);
    scrollListener();
} else if($(window).width() >= 370) {  
	var a = $(".site-header").offset().top;     
    function scrollListener(){
        if($(document).scrollTop() > a)
        {   
          $('.site-header').css({"margin-top":"-65px"});
          $('.site-header').css({"transition":"0.4s"});
        } else {
          $('.site-header').css({"margin-top":"0px"});
          $('.site-header').css({"transition":"0.4s"});      
        }
    };
    $(document).scroll(scrollListener);
    scrollListener();  
} else {
	var a = $(".site-header").offset().top;     
    function scrollListener(){
        if($(document).scrollTop() > a)
        {   
          $('.site-header').css({"margin-top":"-90px"});
          $('.site-header').css({"transition":"0.4s"});
        } else {
          $('.site-header').css({"margin-top":"0px"});
          $('.site-header').css({"transition":"0.4s"});      
        }
    };
    $(document).scroll(scrollListener);
    scrollListener();   
};

【问题讨论】:

    标签: javascript css navbar offset


    【解决方案1】:

    请提供codePen,它可以更轻松地帮助您解决问题。

    我想出了这段未经测试的 javascript:

    var myApp = (function(app) {
    
      const $elements = {
        siteHeader = null,
      }
    
      function setPosition() {
        const scrollTop = $(document).scrollTop()
        const offsetTop = $elements.siteHeader.offset().top
    
        if(scrollTop > offsetTop){
          $elements.siteHeader.css({'margin-top':`${$elements.siteHeader.height() * -1}px`})
        } else {
          $elements.siteHeader.css({'margin-top':'0px'})
        }
      }
    
      function initialize() {
        // Wait for all elements to be created
        $(function() {
          $elements.siteHeader = $('.site-header')
          setPosition()
          $(document).scroll(setPosition)
          $(document).resize(setPosition)
        })
      }
    
      initialize()
    
      return app;
    })(myApp || {})
    

    【讨论】:

    • 很遗憾,我无法为这个项目提供代码笔。另外,我希望动态使用“公告栏”的高度。这意味着我不应该寻找断点,因为它们可能会因某种原因而改变。
    • 顺便说一句,你可以简单地将transition: 04.s 放在你的css文件中,不需要一直设置
    猜你喜欢
    • 2017-10-27
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多