Javascript 滚动时获取IE8中的当前页面位置
参考资料如下: 有关文件: 该页面在Firefox和Chrome中的工作方式与预期相同,当用户滚动时,窗口的位置将根据我的子菜单的位置进行检查,因此在它被滚动出视图之前,其位置将设置为固定 然而,在IE8中,窗口位置永远不会随着用户滚动而更新。我的测试表明IE可以完成所有功能,但只在页面加载时更新windowPos变量Javascript 滚动时获取IE8中的当前页面位置,javascript,jquery,internet-explorer,scroll,scrollbar,Javascript,Jquery,Internet Explorer,Scroll,Scrollbar,参考资料如下: 有关文件: 该页面在Firefox和Chrome中的工作方式与预期相同,当用户滚动时,窗口的位置将根据我的子菜单的位置进行检查,因此在它被滚动出视图之前,其位置将设置为固定 然而,在IE8中,窗口位置永远不会随着用户滚动而更新。我的测试表明IE可以完成所有功能,但只在页面加载时更新windowPos变量 如何使该页面在IE中的行为与在FF和Chrome中的行为相同?这来自jquery文档: “.offset()方法允许我们检索元素相对于文档的当前位置。” 我不明白为什么FF或C
如何使该页面在IE中的行为与在FF和Chrome中的行为相同?这来自jquery文档: “.offset()方法允许我们检索元素相对于文档的当前位置。” 我不明白为什么FF或Chrome返回$('html').offset().top相对于客户端屏幕/IE的方法似乎更可预测 试试看(使用DOM元素的.scrollTop属性,而不是.offset().top):
$(文档).ready(函数(e){
//警报(“子命令:+子命令”);
//首先找到要粘东西的位置
子菜单=$(“#子”);
//子菜单removeClass(“无js”);
subPos=$(“#sub”).position();
subPos=subPos.top;
var preScrollHtml=document.getElementsByTagName('html')。项(0)。scrollTop;
var preScrollBody=document.getElementsByTagName('body')。项(0)。scrollTop;
var checkPos=函数(){
var scrolledHtml=document.getElementsByTagName('html')。项(0)。scrollTop;
var scrolledBody=document.getElementsByTagName('body')。项(0)。scrollTop;
如果(预滚动HTML!==滚动HTML){
windowPos=滚动HTML;
}
否则{
windowPos=滚动体;
}
preScrollHtml=滚动HTML;
预滚动体=滚动体;
计算();
}
var calculate=函数(){
次级方案=64;
如果(windowPos>=子系统){
$(“#子”).addClass(“固定”);
$(#minestre”).css(“marginTop”、“50px”);
}
else if(窗口位置<子项){
$(“#子”).removeClass(“固定”);
$(#minestre”).css(“marginTop”、“0px”);
}
//设置文本字段以显示所有内容的值有助于调试
$(#windowpos”).val(windowpos);
美元(“#子项”).val(子项);
}
//每次窗口滚动时,此功能都会运行
如果($(窗口)。滚动){
$(窗口)。滚动(checkPos);
}
else if(window.onscroll){
window.onscroll=checkPos;
}
});
我知道这是个老问题,但对于新来的人来说,你可能想看看安迪对一个类似问题的回答(这似乎也解决了这个问题):所以这对IE和FF有效,但对chrome无效。我用if/else让chrome使用我以前做过的东西,但它计算窗口位置的方式不同,所以这是一个全新的蠕虫。不过,这很有帮助:)我现在看到的唯一解决方法是在scroll事件处理程序中检查“body”或“html”的.scrollTop属性是否已更改,并为windowPos分配相应的值。我将编辑我的答案以演示
$(document).ready(function(e){
//alert("subPos: " + subPos);
//first find the position of the things to sticky
submenu = $("#sub");
//submenu.removeClass("no-js");
subPos = $("#sub").position();
subPos = subPos.top;
var preScrollHtml = document.getElementsByTagName('html').item(0).scrollTop;
var preScrollBody = document.getElementsByTagName('body').item(0).scrollTop;
var checkPos = function(){
var scrolledHtml = document.getElementsByTagName('html').item(0).scrollTop;
var scrolledBody = document.getElementsByTagName('body').item(0).scrollTop;
if (preScrollHtml !== scrolledHtml) {
windowPos = scrolledHtml;
}
else {
windowPos = scrolledBody;
}
preScrollHtml = scrolledHtml;
preScrollBody = scrolledBody;
calculate();
}
var calculate = function() {
subPos = 64;
if (windowPos >= subPos){
$("#sub").addClass("fixed");
$("#minestre").css("marginTop", "50px");
}
else if (windowPos < subPos){
$("#sub").removeClass("fixed");
$("#minestre").css("marginTop", "0px");
}
//Setting text fields to show the values of everything can help in debugging
$("#windowpos").val(windowPos);
$("#subp").val(subPos);
}
//every time the window scrolls, this function is run
if ($(window).scroll){
$(window).scroll(checkPos);
}
else if(window.onscroll){
window.onscroll = checkPos;
}
});