Javascript 单击事件由滚动触发
在我的js代码中,我有一个非常简单的事件监听器来监听点击-Javascript 单击事件由滚动触发,javascript,ios,user-experience,Javascript,Ios,User Experience,在我的js代码中,我有一个非常简单的事件监听器来监听点击- element.addeventlistener('click', ()=>{ #do somthing }) 问题是,当我在IOS(iphone)上滚动时——触摸此元素以启动滚动,会触发事件侦听器 有没有办法防止iphone上出现事件监听器,除非不需要滚动 i、 e.如果单击但没有滚动,请执行某些操作 或者,可能是一个完全不同的解决方案(但我试图避免使用库) 谢谢 W 答复 在回顾了下面给出的答案(它确实有效)之后,这个问
element.addeventlistener('click', ()=>{
#do somthing
})
问题是,当我在IOS(iphone)上滚动时——触摸此元素以启动滚动,会触发事件侦听器
有没有办法防止iphone上出现事件监听器,除非不需要滚动
i、 e.如果单击但没有滚动,请执行某些操作
或者,可能是一个完全不同的解决方案(但我试图避免使用库) 谢谢 W
答复 在回顾了下面给出的答案(它确实有效)之后,这个问题仍然存在。这让我有理由回顾我的CSS,我发现在IOS mobile(iphone)上,CSS psudo选择器
:focus
在滚动项目时被激活
我添加了一个媒体查询,只允许在桌面大小或以上的设备上使用
:focus
,解决了这个问题。我不是专家,但我会尝试:
var prevScroll = pageYOffset;
window.addEventListener("scroll", () => prevScroll = pageYOffset);
window.addEventListener("click", (e) => {
if (pageYOffset !== prevScroll) return;
// your code
});
请注意,此代码未经测试,但我认为它应该可以工作。我不是专家,但我会尝试:
var prevScroll = pageYOffset;
window.addEventListener("scroll", () => prevScroll = pageYOffset);
window.addEventListener("click", (e) => {
if (pageYOffset !== prevScroll) return;
// your code
});
请注意,此代码未经测试,但我认为它应该可以工作。我找到了Stackoverflow中另一个问题的可能解决方案: 基本上,您可以在窗口中添加一个滚动侦听器。然后在滚动时,将名为
disable\u click\u flag
的全局布尔值设置为true。如果用户至少250毫秒没有滚动,它将被设置为false
当布尔值为true时,单击事件将无法结束
var disable_click_flag = false;
var timeout = null;
window.addEventListener('scroll', () => {
disable_click_flag = true;
if(timeout) clearTimeout(timeout);
timeout = setTimeout(function(){ disable_click_flag = false }, 250);
}
element.addeventlistener('click', () => {
if(disable_click_flag === false{
#do somthing
}
})
我在Stackoverflow中找到了另一个问题的可能解决方案: 基本上,您可以在窗口中添加一个滚动侦听器。然后在滚动时,将名为
disable\u click\u flag
的全局布尔值设置为true。如果用户至少250毫秒没有滚动,它将被设置为false
当布尔值为true时,单击事件将无法结束
var disable_click_flag = false;
var timeout = null;
window.addEventListener('scroll', () => {
disable_click_flag = true;
if(timeout) clearTimeout(timeout);
timeout = setTimeout(function(){ disable_click_flag = false }, 250);
}
element.addeventlistener('click', () => {
if(disable_click_flag === false{
#do somthing
}
})
注:
pageYOffset
与window相同。pageYOffset
注:pageYOffset
与window相同。pageYOffset