当前位置: 首页 > 面试题库 >

在加载其他页面时,Facebook如何保持页眉和页脚固定?

鲜于阳
2023-03-14
问题内容

在Facebook页面中浏览时,页面加载之间的页眉和页脚固定部分仍然可见,并且地址栏中的URL也会相应更改。至少,这就是我的错觉。

从技术上来讲,Facebook如何实现这一目标?


问题答案:

有关样式的设置,请参考Mark Brittingham的答案,尽管我认为这不是您要的。我将为您提供有关其工作原理的技术细节(以及为何如此出色)。

将鼠标悬停在标题中的“个人资料”链接上时,请查看状态栏…

http://www.facebook.com/profile.php?id=514287820&ref=profile

那就是标签所指向的地方。现在,当您单击它时查看地址栏…

http://www.facebook.com/home.php#/profile.php?id=514287820&ref=profile

注意“#”
片段标识符/哈希吗?这基本上证明您尚未离开页面,并且先前的请求是使用AJAX进行的。他们正在拦截这些链接上的click事件,并使用自己的东西覆盖默认功能。

要使用Javascript做到这一点,您所需要做的就是为这些链接分配一个click事件处理程序,如下所示:

var header = document.getElementById('header');
var headerLinks = header.getElementsByTagName('a');

for(var i = 0, l = headerLinks.length; i < l; i++) {
  headerLinks[i].onclick = function() {
    var href = this.href;

    //Load the AJAX page (this is a whole other topic)
    loadPage(href);

    //Update the address bar to make it look like you were redirected
    location.hash = '#' + href;

    //Unfocus the link to make it look like you were redirected
    this.blur();

    //Prevent the natural HTTP redirect
    return false;
  }
}

这种方法的一个很棒的好处是,它允许后退按钮正常工作(增加了一些诡计),这在传统上一直是长期使用AJAX的痛苦副作用。我不是100%知道这是什么骗术,但我敢打赌,它可以某种方式检测到浏览器何时修改了片段标识符(可能每500毫秒检查一次)。

附带说明一下,将哈希值更改为在DOM中找不到的值(通过元素ID)将使页面一直滚动到顶部。看看我在说什么:从Facebook顶部向下滚动大约10个像素,露出顶部菜单的一半。单击其中一项,一旦片段标识符更新(没有
任何 窗口重绘/重画延迟),它将立即跳回到页面顶部。



 类似资料:
  • 问题内容: 如何使用itext从html源向pdf添加标头? 当前,我们扩展了PdfPageEventHelper并覆盖了这些方法。工作正常,但是当我进入2个以上页面时,它将引发RuntimeWorkerException。 问题答案: 通常, 禁止 在事件中添加内容。这是 禁止 添加内容到的对象。您应该使用而 不是 文档在方法中添加页眉和页脚。此外:通过一遍又一遍地解析HTML,您正在浪费大量C

  • 也许以前有人问过这个问题,但我似乎找不到一个准确的答案或解决办法。我开始使用RecycerView,并使用LinearLayoutManager实现了它。现在,我想添加自定义的页眉和页脚项,这些项不同于RecycerView中的其他项。页眉和页脚不应该粘,我希望他们滚动与其余的项目。有人能指出一些例子如何做到这一点或只是分享想法。我会非常感激的。THX

  • 我将页眉和页脚设置为Position:Fixed。但如果是可滚动的内容,则文本将转到页眉/页脚区域:下面是我的完整代码:http://jsfidle.net/kaqz1km2/6/ 在这种情况下,我不想使用background-image或background-color。 下面是CSS: null null

  • 问题内容: 我已经通过Ajax调用通过隐藏的iframe读取了Facebook加载页面的地方…这是真的吗? 问题答案: Facebook使用他们称为BigPipe的东西,它将页面分成一堆小小的“小页面”,这些小页面分别通过AJAX加载。 在下图中,浅蓝色突出显示的区域是单个的小页面。

  • 我正在开发一个Spring MVC应用程序,它将FreeMarker用于我的视图。 我对FreeMarker非常陌生,我有以下问题:在我的projct中,有3个文件必须被组装到一个页面中。 所以我有: 1) 标题。ftl表示我所有页面的标题,类似于: 2)footer.ftl代表我所有页面的页脚: 3) 然后我有了我的特定页面(名为myPage.ftl),它只表示内容,如下所示: 标题。ftl和页

  • 问题内容: 如何在我的PDF页面中添加 页眉 和 页脚 ?我想要一个表,表头中有3列,其他表中,页脚中有3列。我的页面可能是A3或A4,并且是横向或纵向。 谁能帮我?我在互联网上找不到很好的例子。 谢谢! mas正 问题答案: 创建一个MyPageEventListener类,该类扩展了 PdfPageEventHelper 将页面事件侦听器添加到PdfWriter对象 在MyPageEventL