首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理同一元素的React onDoubleClick和single onClick

处理同一元素的React onDoubleClick和single onClick
EN

Stack Overflow用户
提问于 2018-03-09 13:52:17
回答 2查看 10.3K关注 0票数 10

当我向元素添加单个onClick事件以及向同一元素添加onDoubleClick事件时,双击时也会触发单击。我想将它分开,这样只有一个事件被触发,无论是单次还是双次。我在Jquery中找到了一些示例,但我想要一个干净的React函数。

代码语言:javascript
复制
 handleClick = () => {
   console.log('only fire click')
 }

 handleDoubleClick = () => {
   console.log('only fire double click')
 }

 render () {
  return <Element 
             onClick={evt => this.handleClick}
             onDoubleClick={evt => this.handleDoubleClick} 
         ></Element>
 }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-09 13:52:17

基于我为jquery找到的其他代码片段,我创建了这个简单的函数来根据点击产生正确的事件。希望这能帮助其他的反应者。

代码语言:javascript
复制
componentWillMount = props => {
  this.clickTimeout = null
}

handleClicks = () => {
  if (this.clickTimeout !== null) {
    console.log('double click executes')
    clearTimeout(this.clickTimeout)
    this.clickTimeout = null
  } else {
    console.log('single click')  
    this.clickTimeout = setTimeout(()=>{
    console.log('first click executes ')
    clearTimeout(this.clickTimeout)
      this.clickTimeout = null
    }, 2000)
  }
}

render () {
  return <Element 
             onClick={evt => this.handleClicks}
         ></Element>
}
票数 14
EN

Stack Overflow用户

发布于 2018-03-09 16:07:26

我希望下面的代码能帮助你单击和双击,

代码语言:javascript
复制
constructor(props){
  super(props);
  this.clickCount = 0;
  this.singleClickTimer = '';
}

singleClick = () => {
    console.log('only fire click')
}

handleDoubleClick = () => {
    console.log('only fire double click')
}
handleClicks(){
    this.clickCount++;
  if (this.clickCount === 1) {
    this.singleClickTimer = setTimeout(function() {
      this.clickCount = 0;
      this.singleClick();
    }.bind(this), 300);

  } else if (this.clickCount === 2) {
    clearTimeout(this.singleClickTimer);
    this.clickCount = 0;
    this.handleDoubleClick();
  }
}
render () {
  return <Element 
             onClick={() => this.handleClicks()} 
         ></Element>
 }

供您参考,https://jsfiddle.net/69z2wepo/130223/

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49187412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档