js中可不可以设置 当键盘事件触发时,鼠标事件失效?

下拉链接图片

详情:
有这么一个网页, 可以键盘up和down来切换 选中行,也可以使用鼠标来选择。
但是当我鼠标在页面上时,如果再使用键盘,down到最后一行,我默认事件是当最后一行时,选中调回第一条,
但是由于鼠标在页面上,跳到第一条的过程在,会触发 onmouseenter事件,导致直接跳到了我鼠标在的那一行,有没有什么办法 解决一下?

问题: 鼠标在页面时,页面下拉框(ul-li)改变触发 onmouseover,如何禁止,或修改?

自问自答一下, 免得有兄弟遇到同样的问题

我增加了一个判断和定时器,由于是使用react,所以直接用state来实现,大致

disableMouseOverAWhile = () => {
    this.setState({
      mouseover: false
    });

    this.timer && clearTimeout(this.timer);
    this.timer = setTimeout(() => {
      this.setState({mouseover: true});
    }, 123)
  }

键盘事件时,顺便触发这个。
然后 鼠标移动事件先判断this.state.mouseover值,再选择是否触发。

阅读 3.7k
3 个回答

$.off 就取消事件了。

如果只是针对你说的情况,跳第一条前取消,跳完之后再绑定。当然,你说的这个效果的实现,要想“完美”,确实是有很多细节要处理的。

提供一个思路

键盘操作时设定一个 boolean 变量表示 keyboard mode,这时要么解绑鼠标事件、要么在鼠标事件里判断 keyboard mode 则不干事。

然后同时设一个 timeout 在一定时间里取消 keyboard mode,比如一秒

触发事件的时候移除另外一个事件就ok

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题