问题描述
- jQuery/JS 的 window.scroll 在 FireFox 不正常
-
请问以下这段 jQuery 的 window onscroll 代码,
在 IE、Chrome 正常,滑鼠卷一次,才会 alert 一次。
但在 FireFox 疯狂,滑鼠卷一次,就会 alert 非常多次。请问此 window onscroll 和 FireFox 不和的问题,要怎么解决?
我是希望 FireFox 能和 IE、Chrome 一样,能够滑鼠卷一次,只要 alert 一次就好。
(若网友愿给有用的提示,我亦会给您点数)感谢各位。
<html> <head runat="server"> <title></title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script type="text/javascript"> $(window).scroll(function () { alert('hi, ' + $(window).scrollTop()); }); </script> </head> <body> 这里的内容很长(亦可用 C# 去 Response.Write 很长的内容) </body> </html>
解决方案
之前我做的下拉刷新也出现这个问题,当时我在网上找了很多资料。
直接贴代码了:
var tur = true;
function haha(){
alert("haha");
tur = true;
}
window.onscroll = function(){
if(tur){
setTimeout(haha,1000); tur = false;
}else{
}
}
这是折中的写法,希望你能够找到更好的解决办法。
解决方案二:
大部分浏览器都是支持鼠标滚轮事件的,所以你可以先订阅鼠标滚轮事件的方法,每当事件被触发时,你能获取一个名为 wheelDelta 的属性,它代表刚才鼠标滚轮改变的大小,其中正值表示滚轮往下滑动,负值表示滚轮往上滑动。数值的绝对值越大,滑动范围越大
但不幸的是依然有一款浏览器是不支持鼠标滚轮事件的。那就是FireFox。Mozilla 已经实现了一个名为"DOMMouseScroll"的事件的处理,它会传递一个名为 event 且附带了名为 detail 属性的事件参数过来,然而,这个 detail 属性不同于 wheelDelta,它只能返回正值,即只能坚持鼠标滚轮向下滚动的值。
你的问题我在网上查了,我觉得这句话也许对您有些帮助就复制过来了,你看看,希望能帮到你
解决方案三:
这个我给的一点点小意见就是写冗余代码来解决这个兼容错误了,你可以在网上搜一下针对firefox的冗余写法;
解决方案四:
当时做的下拉刷新功能,因为多次触发onscroll事件,导致数据库多次连接,影响系统性能。于是才使用了setTimeout做延时绑定业务。
解决方案五:
感谢「河北小黄人」、「wolf094014」的回覆。这两天这会再试试,并在这个周末结帖、给点数。
若有其他可参考意见,欢迎提供。这两天的研究结果,我也会继续贴在这。谢谢。
时间: 2025-01-20 11:12:13