Javascript 在Firefox中,滚动步骤是不同的-使用鼠标滚轮

Javascript 在Firefox中,滚动步骤是不同的-使用鼠标滚轮,javascript,jquery,css,firefox,scroll,Javascript,Jquery,Css,Firefox,Scroll,我正在制作一个屏幕上有巨大文本的网站&我希望能够同时滚动两个div。所以这部分是有效的。 实际上,我可以滚动div,但在#backdiv上的跳跃实在太大了(它们似乎实际上与窗口高度相同(因此,也许你需要剪下全屏才能完全理解我的意思)) 更新:在与朋友进行了一点测试后,问题似乎出在windows上的firefox上。它在mac和linux上运行良好。 这里有两张gif,也许你能看到这种奇怪的效果。 每页移动=在我的鼠标上向下移动一个滚轮(由于它不是鼠标滚轮,所以它与触控板配合使用也很好)。 V

我正在制作一个屏幕上有巨大文本的网站&我希望能够同时滚动两个div。所以这部分是有效的。 实际上,我可以滚动div,但在
#back
div上的跳跃实在太大了(它们似乎实际上与窗口高度相同(因此,也许你需要剪下全屏才能完全理解我的意思))

更新:在与朋友进行了一点测试后,问题似乎出在windows上的firefox上。它在mac和linux上运行良好。

这里有两张gif,也许你能看到这种奇怪的效果。 每页移动=在我的鼠标上向下移动一个滚轮(由于它不是鼠标滚轮,所以它与触控板配合使用也很好)。

VS当我移除css中两个
溢出
中的一个时,下面的黑色方块停止工作,但滚动再次正常:


重要编辑:这在firefox中是一个问题,但在chrome&Brave中似乎工作正常。尽管如此,我仍在寻找一种方法让它发挥作用

因此,我注意到当我在css中设置两个
溢出时会发生这种情况,实际上,如果删除一个,脚本将不再工作,但滚动错误也会停止。
以下是该错误的示例:

let back_innerHeight=$(“#back”).height()
let back_scrollHeight=document.querySelector(“#back”).scrollHeight
设前内高=$(“#前”).innerHeight()
让前滚动高度=$(“#前”)[0]。滚动高度
$(“#返回”)。在(“滚动”上,函数(){
//获取向后滚动的像素数
ret back_scrolled=$(this).scrollTop()
//计算滚动百分比
让百分比返回=返回滚动/(返回滚动高度-返回内部高度)
//计算要在#前面滚动的像素数
让scrollIT=(百分比向后*(前滚动高度-前滚动高度))
//只是为了验证百分比是否正确应用。。。
让百分比前=滚动它/(前滚动高度-前滚动高度)
//应用滚动条
$(“#前”).scrollTop(scrollIT);
});
window.onresize=函数(){
背部内侧高度=$(“#背部”).height()
back#scrollHeight=document.querySelector(“#back”).scrollHeight
前内高=$(“#前”)。内高()
前滚动高度=$(“#前”)[0]。滚动高度
}
。滚动{
位置:绝对位置;
显示:块;
排名:0;
身高:100%;
}
#正面{
溢出:隐藏;
位置:绝对位置;
背景色:黑色;
颜色:白色;
右:0;
左:0;
底部:0;
排名:0;
保证金:自动;
宽度:25%;
身高:35%;
字体大小:3rem;
}
#背{
溢出:自动;
字号:8rem;
}
p{
保证金:0;
填充:0;
}

Lorem ipsum dolor坐在amet Concertetur,告别精英。当然,自由意志的自由意志是劳动意志的自由意志,除了意志意志之外,不能有任何不可恢复的能力!我是维尼安,我是奥特姆的智者。
Lorem ipsum dolor sit amet,奉献精英。对发明者的专利权、专利权和专利权进行了连续性审查。软毛小体

Lorem ipsum dolor坐在amet Concertetur,告别精英。当然,自由意志的自由意志是劳动意志的自由意志,除了意志意志之外,不能有任何不可恢复的能力!我是维尼安,我是奥特姆的智者。 Lorem ipsum dolor sit amet,奉献精英。对发明者的专利权、专利权和专利权进行了连续性审查。软毛小体

编辑 下面的内容并不是这个问题的答案,它现在更具体地描述了FF行为,而不是两个div之间的滚动同步。
用于滚动同步

那更多的是关于一些数学。。。以及使用哪些值

您必须计算已滚动内容与可滚动内容的百分比。这是钥匙!可滚动的是而不是元素的整个高度,因为始终存在可见的部分

关于“代码>后退<代码> >:

三个值
  • 答:div的可见部分,使用
    .innerHeight()
  • B:通过
    .scrollTop()
  • C:div的全高,包括已经滚动的部分(顶部上方)和要滚动的部分(底部下方)。这是
    scrollHeight
    属性
因此,要获得正确的百分比,公式是:
B/(C-A)

然后,在前面的“可滚动像素”上使用此百分比,这同样是完整高度减去可见高度

就这样

let back_innerHeight=$(“#back”).height()
let back_scrollHeight=document.querySelector(“#back”).scrollHeight
设前内高=$(“#前”).innerHeight()
让前滚动高度=$(“#前”)[0]。滚动高度
$(“#返回”)。在(“滚动”上,函数(){
//获取向后滚动的像素数
ret back_scrolled=$(this).scrollTop()
//计算滚动百分比
让百分比返回=返回滚动/(返回滚动高度-返回内部高度)
//计算要在#前面滚动的像素数
让scrollIT=(百分比向后*(前滚动高度-前滚动高度))
//只是为了验证百分比是否正确应用。。。
让百分比前=滚动它/(前滚动高度-前滚动高度)
log(“滚动的%BACK:,百分比BACK,,”FRONT:,百分比FRONT)
//应用滚动条
$(“#前”).scrollTop(scrollIT);
});
window.onresize=函数(){
背部内侧高度=$(“#背部”).height()
back_scrollHeight=document.querys