【问题标题】:onscroll only fires onceonscroll 只触发一次
【发布时间】:2014-10-21 04:36:41
【问题描述】:

我有一个 javascript 文件,用于将单个绝对 div 对齐以始终与水平滚动位置对齐。

我无法弄清楚我的代码有什么问题 - onscroll 似乎会触发一次,然后在 Internet Explorer 和 firefox 中都不会再次触发。

有人有什么想法吗?我一直在寻找这个,但我无法弄清楚错误。 (我已经尝试过 onscroll += 和 onscroll =,都不起作用)。那个 39 偏移只是为了确保脚本在我让它工作之前被触发。

window.onload=scrollSet;

function scrollSet(){
	window.onscroll += KeepLeftAtScroll();
}


function KeepLeftAtScroll(){
	var ele=document.getElementById("topAboveMenuMargin");
	if (ele != null){
		ele.style.left = 39+ document.documentElement.scrollLeft;
	}
		
}

【问题讨论】:

  • 为什么你要覆盖原生 window.onscrollKeepLeftAtScroll 甚至不返回任何东西。
  • 我用它来触发每次滚动窗口时重新定位 div 的代码。
  • 不,你用NaN 覆盖window.onscroll,它不会触发任何东西; )。 onscroll 应该是一个函数。可能window.onscroll = KeepLeftAtScroll; 做你想做的事。
  • 按照说明,我试过+=和=,但我不知道+=覆盖了。谢谢,我会记住的。使用 = KeepLeftAtScroll,它仍然只触发一次。
  • 你确定你只有KeepLeftAtScroll不是 KeepLeftAtScroll()吗?

标签: javascript internet-explorer firefox onscroll


【解决方案1】:

解决了这个问题。显然 javascript 不喜欢将赋值和声明分开,因为

window.onscroll = function KeepLeftAtScroll(){
	var ele=document.getElementById("topAboveMenuMargin");
	if (ele != null)
	{
		ele.style.left = window.pageXOffset;
	}
}

工作并做我想做的事。它似乎不喜欢“window.onscroll = KLAS()”,但可以使用“window.onscroll = function KLAS(){}”。我最初做了 onload 部分,因为我最初并没有在我的元素上检查 null 并且这样做是为了解决这个问题。

不管怎样,它似乎已经解决了。感谢大家的帮助。

【讨论】:

  • 嗯...这解决了这个问题。虽然window.onscroll = KeepLeftAtScroll; 也会完成这项工作。你知道函数调用和函数引用的区别吗?
  • 是的。那天晚上我遇到了很多奇怪的问题,出于某种原因 window.onscroll = KLAT;在我结合声明和分配之前没有工作。我不知道发生了什么,但我尝试再次检查它并且“window.onscroll = KeepLeftAtSroll; function KeepLeftAtScroll(){ -code-}”失败。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 2021-03-22
  • 2015-09-07
  • 2016-11-10
  • 2016-01-19
  • 1970-01-01
相关资源
最近更新 更多