【问题标题】:How to implement auto-hide navigation?如何实现自动隐藏导航?
【发布时间】:2013-08-03 18:22:02
【问题描述】:

我不知道在哪里发布这个问题,所以如果我违反了任何政策,请原谅。

为了澄清我的问题,我想实现与 Teehan + Lax 相同的导航栏。

这是他们的网站:http://www.teehanlax.com/tools/

如果您注意到,当您向下滚动时,导航自动会自动隐藏,但当您向上滚动时,它会再次显示。

所以我的问题是,他们是如何做到这一点的?是只通过 CSS 还是我需要 JavaScript 来做到这一点?不管是什么方式,有人也可以指出我如何找到实现这一点的信息的正确方向吗?

谢谢

【问题讨论】:

  • 好吧,我刚刚发现了他们的一些很棒的小 JavaScript,带有很酷的 ASCII 艺术。

标签: web responsive-design


【解决方案1】:

在纯 CSS 中不可能像你想要的那样将位置从固定更改为绝对,所以我使用了一些 javascript 来做到这一点。 Demo

function followTo(elem, pos) {
    var element = document.getElementById(elem);        
    window.onscroll = function(e){
        var disFromTop = document.all? iebody.scrollTop : pageYOffset;
        if (disFromTop > pos) {
            element.style.position = 'absolute';
            element.style.top = pos + 'px';
        } else {
            element.style.position = 'fixed';
            element.style.top = 0;
        }
    };
};    
followTo("nav", 100);

它甚至包括从this SO post 提取的 IE 修复程序,以获取正确的滚动位置

Here is the jQuery version,取自this SO post

编辑

正如 zanona 所指出的,如果您从页面中更下方的位置向上滚动,我没有包含出现导航的功能。因此,我创建了一种使用setInterval的新技术

var last = 0,    // The last read top value
    delay = 150, // The delay for the setInterval
    threshold = 30;    // The max scroll distance before showing/hiding the nav

//I always set a variable to my setIntervals in case I want to stop them later on
var navMovement = setInterval(function() {
    var nav = document.getElementById('nav'), // Gets nav object
        pageVertOffset = document.all? iebody.scrollTop : pageYOffset;
    // Happens if the difference in scroll is below the negative threshold
    if(pageVertOffset - last < -threshold) { 
        nav.style.top = "0px"; // Put the nav at the top of the window
    }
    // Happens if the difference in scroll is above the threshold
    else if(pageVertOffset - last > threshold){ 
        nav.style.top = - nav.offsetHeight + "px"; // Hides the navigation
    }
    last = pageVertOffset; // Updates the previous scroll value
}, delay); // Runs every `delay` amount

Javascript version,或者如果你愿意,jQuery version

我认为我很好地重新创建了网站(但更好,因为我有一只小猫,哈哈)

【讨论】:

  • 我可能是错的,但是当您假设页面滚动了 80% 时,如果您再次向上滚动,它不会像 Teehan+Lax 那样显示菜单?
  • @zanona 我之前没有注意到这个功能。我用考虑到这一点的更好的全方位解决方案更新了我的答案!
  • 这似乎很棒@Zeaklous,就像一个魅力和伟大的工作与阈值和延迟设置。 ;)
  • 什么是iebody?它从未定义过。
  • @JM-AGMS 这是一个旧变量定义here,其中包含一些浏览器信息。你是对的,这个答案缺少定义
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多