当前位置:  开发笔记 > 编程语言 > 正文

在加载不同的页面时,Facebook如何保持页眉和页脚的固定?

如何解决《在加载不同的页面时,Facebook如何保持页眉和页脚的固定?》经验,为你挑选了1个好方法。

浏览Facebook页面时,页面加载和标题栏中的URL在页面加载之间保持可见,并且相应地更改了URL.至少,这是我得到的错觉.

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



1> Josh Stodola..:

请参阅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完成的.他们拦截这些链接上的点击事件,并用自己的东西覆盖默认功能.

要使用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使用的痛苦副作用.我不是百分之百确定这个技巧是什么,但我敢打赌它能够以某种方式检测浏览器何时修改片段标识符(可能每隔约500毫秒检查一次).

作为旁注,将哈希值更改为在DOM中无法找到的值(通过元素ID)将页面一直滚动到顶部.要看看我在说什么:你从Facebook顶部向下滚动约10个像素,露出顶部菜单的一半.单击其中一个项目,一旦片段标识符更新,它就会将其跳回到页面顶部(没有任何窗口重绘/重绘延迟).

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有