Javascript Facebook找到了一种修复手机滚动的方法

Javascript Facebook找到了一种修复手机滚动的方法,javascript,jquery,html,css,facebook,Javascript,Jquery,Html,Css,Facebook,在窗口滚动到一定距离后,我一直试图将div从relative更改为fixed。它可以在台式机上正常工作,但移动浏览器在滚动完成之前不会触发事件。Facebook找到了解决这个问题的方法。在堆栈交换上有很多答案说他们所做的是不可能的 所以我想看看他们的javascript,看看他们是如何做到的。唯一的问题是有大量的代码。我怎样才能知道他们在某导航条上使用的代码?有没有办法使用Chrome的开发工具来检查应用于div的javascript 编辑:我不完全相信Facebook已经解决了这个问题。我正在

在窗口滚动到一定距离后,我一直试图将div从relative更改为fixed。它可以在台式机上正常工作,但移动浏览器在滚动完成之前不会触发事件。Facebook找到了解决这个问题的方法。在堆栈交换上有很多答案说他们所做的是不可能的

所以我想看看他们的javascript,看看他们是如何做到的。唯一的问题是有大量的代码。我怎样才能知道他们在某导航条上使用的代码?有没有办法使用Chrome的开发工具来检查应用于div的javascript

编辑:我不完全相信Facebook已经解决了这个问题。我正在慢慢地滚动,它工作了。但是如果你轻弹页面,它仍然会消失,然后在滚动停止时重新出现。不确定Facebook是否在这里做了什么不同的事情。很抱歉给大家带来了希望。

如果您访问:

并搜索代码:j.getScrollTop()

然后你会得到这个:

k.listen('scroll', null, q.bind(this));

function q() {
    var s = i.getPos(n),
        t = j.getScrollTop();
    if (t > s.y) {
        h.addClass(m, "_5d4y");
    } else h.removeClass(m, "_5d4y");
}
转换为非facebook代码的代码为:

var nav = document.getElementById('nav'),
    offset = nav.getBoundingClientRect().top;

window.addEventListener('scroll', function(e) {
    if (document.body.scrollTop > offset) {
        nav.className = 'nav fixed';
    } else {
        nav.className = 'nav';
    }
});
我创建了一个JSFIDLE,它显示了它的工作原理:

如果你想知道我在说什么,请用手机访问facebook.com。去参加一个活动。导航栏上写着“加入”、“也许”、“拒绝”和“…”。试着向下滚动,你会看到它会随着页面自动滚动。魔术“javascript应用于div”对我来说毫无意义。对,我不清楚。有一些javascript将div从相对更改为固定。由于某些特殊原因,它在移动设备上正常工作。但它只在Facebook.com上有效,不适用于我的网站或其他有相同bug的人。所以我想知道他们的代码的哪一部分作用于div。这是我想在我自己的网站上使用的代码的一部分。他们可能使用一个虚拟滚动条来处理本地滚动条之外的滚动。基本上可以将其视为一个触摸事件,在触摸移动时更改transform-y位置,但阻止每个触摸事件的默认设置。Chrome的开发工具允许您设置DOM断点(例如属性修改)在移动设备上不起作用。如果您锁定视区缩放(例如,多做一点工作),它可以在Android上使用Chrome(还有一些jQuery)我也可以在Firefox上使用:不适用于iOS,也不适用于手机。