【问题标题】:JQuery - Sticky sidebar not working in FirefoxJQuery - 粘性侧边栏在 Firefox 中不起作用
【发布时间】:2012-06-26 20:19:31
【问题描述】:

我正在使用带有粘性侧边栏(在某些条件下固定位置等)的站点,该站点在 Chrome 和 Safari 中运行良好,但在 Firefox 中中断。我不确定是什么问题,因为我没有编写脚本:

        $(document).ready(function() {          

      if (!!$('.sticky').offset()) { // make sure ".sticky" element exists

        var stickyTop = $('.sticky').offset().top; // returns number 
        var newsTop = $('#news_single').offset().top; // returns number 


        $(window).scroll(function(){ // scroll event

          var windowTop = $(window).scrollTop(); // returns number 
          var width = $(window).width();
          var height = $(window).height();

          if (stickyTop < windowTop && width > 960 && height > 450){
            $('.sticky').css({ position: 'fixed', top: 40 });
            $('#news_single').css({ left: 230 });               
          }
          else {
            $('.sticky').css('position','static');
            $('#news_single').css({ left: 0 });             
          }

        });

      }         

    });

这里是网站(有问题的侧边栏是左侧带有红色标题的侧边栏):http://www.parisgaa.org/parisgaels/this-is-a-heading-too-a-longer-one

如果能提供任何帮助,我将不胜感激。

编辑:似乎使它一致的一件事是 barlas 建议的 - 将 left 属性添加到固定元素。但是,这完全破坏了事物,因为它随后固定在 x 轴上并且即使在调整浏览器大小等时也保持不变。这对我不起作用,我只需要通过添加它来坚持 y 轴一个顶级属性。出于某种原因,这样做会导致与 Chrome(它应该出现的位置)和 Firefox(它出现在它应该出现的位置的右​​侧很远的位置)不同的行为。

困惑。

已解决:好的,我已经想通了。

出于某种原因,Firefox 和 Chrome 似乎对固定元素的处理方式不同。我使结果保持一致的方法是为固定元素添加一个绝对定位的容器元素(我使用媒体查询来确保该元素仅绝对定位在 960 像素以上,因为该网站是响应式的)。

这使得粘性固定位置元素在两种浏览器中的行为方式相同。所以更多的是 CSS 问题而不是 jQuery 问题。

【问题讨论】:

    标签: jquery position fixed sidebar sticky


    【解决方案1】:

    我编辑了我的答案,尝试定位左侧的粘性元素

      $(window).scroll(function(){ // scroll event
    
          var windowTop = $(this).scrollTop(); // change to this here
          var width = $(window).width();
          var height = $(window).height();
    
          var positionEle = (width - 960 ) / 2 + 220;  // 220 is ur stick part's width
    
          if (stickyTop < windowTop && width > 960 && height > 450){
            $('.sticky').css({ 'position': 'fixed', 'top': '40px', 'left':positionEle + 'px' }); //try this
            $('#news_single').css({ left: 230 });      
          }
          else {
            $('.sticky').css('position','static','left':'0');
            $('#news_single').css({ left: 0 });             
          }
      });
    

    【讨论】:

    • 感谢您的回复。我不想让元素居中。当你向下滚动时,我只是使用脚本使侧边栏保持粘性 - 它已经在 Chrome 中完美运行,我只想知道如何让它在 Firefox 中运行。
    • 我发现问题,firefox,是用默认值定位左边的粘性元素,你也需要改变它。请再次检查我的答案
    • 抱歉,我在上面实现了你的脚本,它破坏了 Chrome 和 Firefox 中的侧边栏。我需要在你的脚本中编辑什么吗?
    • 我现在注意到,你忘了用这些 }); 关闭你的 $(window).scroll 函数;
    • 好的,我已经让它在 Chrome 中再次运行,但在 Firefox 中仍然无法正常运行 - 这两种浏览器的定位完全不同。出于某种原因,Firefox 仍在将侧边栏推向右侧。
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多