【问题标题】:Making header act like google chrome mobile app address bar使标题像谷歌浏览器移动应用地址栏一样
【发布时间】:2023-03-31 13:45:02
【问题描述】:

我有一个已固定在窗口顶部的标题。我让它在用户向上滚动时出现并在用户向下滚动时消失。现在它只使用.show().hide()。我试图让它像谷歌浏览器移动应用程序上的地址栏一样,即当用户向上滚动导航栏时,导航栏是静止的,直到窗口顶部到达导航 div 的顶部。

如果有什么不懂的请追问

这是我目前拥有的 jquery

    $(window).scroll(
{
    previousTop: 0
}, 
function () {
var currentTop = $(window).scrollTop();

if (currentTop < 80) {
    $('#top').css ({position: 'absolute'});
} else {
    $('#top').css ({position: 'fixed'});
    if (currentTop < this.previousTop) {
        $("#top").show();
    } else {
        $("#top").hide();
    }
    this.previousTop = currentTop;
}
});

【问题讨论】:

  • 致投反对票的人:它有助于解释您投反对票的原因,以便 OP 现在和将来解决问题。这看起来是一个写得很好的问题,所以我把它投回 0
  • @leigero 谢谢!你知道我该如何解决这个问题或让它发生吗?问题的答案是

标签: jquery html css


【解决方案1】:

使用 jQuery 制作原型 - 第 2 版

我再次解决了这个问题,使操作更加顺畅。

jQuery 代码如下所示:

init = {
    previousTop: 0,
    headerHeight: 52
}

$(window).scroll(init,function () {
    var currentTop = $(window).scrollTop();
    var scrollMax =  $(document).height() - $(window).outerHeight(true);
    var bodyHeight = $(window).outerHeight(true);
    var scrollType = "";

    if (currentTop < init.previousTop) {
        $(".offset b").text(currentTop);
        $(".offset em").text("Up");
       scrollUp = true;        
    } else {
        $(".offset b").text(currentTop);
        $(".offset em").text("Down");
       scrollUp = false;        
    }

    if (scrollUp == true) {
        $(".header").css({"color": "blue"});
        $(".header").css({"top": currentTop});
    } else {
        $(".header").css({"color": "yellow"});
        if (scrollMax - currentTop < init.headerHeight) {
            $(".header").css({"top": 0});
        }
    }

    /* Optional - to display values of various attributes */    
    $(".previousTop b").text(init.previousTop);
    $(".headerHeight b").text(init.headerHeight);
    $(".bodyHeight b").text(bodyHeight);
    $(".scrollMax b").text(scrollMax);

    init.previousTop = currentTop;
});

演示小提琴位于:http://jsfiddle.net/audetwebdesign/gmkum/

这是如何工作的

这里有四个关键的想法可以使这项工作发挥作用。

(1) currentTop &lt; init.previousTop 周围的代码旨在确定是否 您正在向上或向下滚动。这是通过比较当前的.scrollTop 来完成的 与上一个滚动事件的位置。

(2) 如果您向上滚动,则将标题放置在窗口的顶部以便可见。

(3) 向下滚动时,顶部偏移保持不变,因为标题是 绝对定位,它只是随着内容滚动离开屏幕顶部。

(4) 在最大滚动位置附近有一个有趣的案例。万一没有 向左移动足够的滚动位置以将标题移出屏幕,将顶部偏移设置为 0 把它移开。

【讨论】:

  • 请记住给这个答案和我之前的答案投票。这是相当先进的东西,值得承认。谢谢!
  • 感谢您的代码。我有几个问题。它可以工作,但是当我向上滚动时,它会晃动,有什么方法可以在到达标题顶部后将位置设置为固定,这样会更平滑吗?第二个是当你向下滚动时,标题会一直停留直到你通过它的高度,有没有什么办法可以在向上滚动时产生相同的效果,所以它是静止的,直到你通过高度然后它变得固定?非常感谢
  • 您正在处理的设计可能在行为上有很多变化。您是否可以实际创建带有箭头和标签的图像来解释(理想情况下)您想要的行为,然后相应地更新您的问题。否则,这不再是一个简单的问题,而更像是一个设计项目。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 2017-11-19
相关资源
最近更新 更多