Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 单击事件由滚动触发_Javascript_Ios_User Experience - Fatal编程技术网

Javascript 单击事件由滚动触发

Javascript 单击事件由滚动触发,javascript,ios,user-experience,Javascript,Ios,User Experience,在我的js代码中,我有一个非常简单的事件监听器来监听点击- element.addeventlistener('click', ()=>{ #do somthing }) 问题是,当我在IOS(iphone)上滚动时——触摸此元素以启动滚动,会触发事件侦听器 有没有办法防止iphone上出现事件监听器,除非不需要滚动 i、 e.如果单击但没有滚动,请执行某些操作 或者,可能是一个完全不同的解决方案(但我试图避免使用库) 谢谢 W 答复 在回顾了下面给出的答案(它确实有效)之后,这个问

在我的js代码中,我有一个非常简单的事件监听器来监听点击-

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