代码之家  ›  专栏  ›  技术社区  ›  Peter

使用jquery onclick和mouseup事件检测长按时如何修复多次执行

  •  1
  • Peter  · 技术社区  · 7 年前

    我有一个功能,打开引导模式时,点击 div 它将在元素周围显示css焦点,而无需在中执行函数 onclick 方法,直到我第二次单击它。因此,我尝试使用下面的代码来检测对元素的任何单击,但长按除外,我认为这会有所帮助。当我单击函数执行一次时,一切都很好,但总是执行多次,它内部有ajax请求,也发送多次。

    var longpress = 3000;
    var start;
    	
    $(document).on( 'mousedown focusIn',  '.openIt', function( event ) {
    	start = new Date().getTime();
    });
    
    $(document).on( 'mouseleave focusOut', '.openIt', function( event ) {
    	start = 0;
    });
    	
     $(document).on("click mouseup", '.openIt', function(event){
    	if ( new Date().getTime() >= ( start + longpress )  ) {
    		console.log(event.type, " is long press!");
    	} else {
    	    //$.myfynctionHere({.......});
    		console.log(event.type, " is short press!");
    	}
    	event.preventDefault();
    });
    .openIt{
      color: #fff;
      background-color: #000;
      height: 30px;
      width: 50%;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class="openIt">Open Item</div>
    1 回复  |  直到 7 年前
        1
  •  3
  •   semanser    7 年前

    mouseup 事件处理程序中的事件

    var longpress = 3000;
    var start;
    	
    $(document).on( 'mousedown focusIn',  '.openIt', function( event ) {
    	start = new Date().getTime();
    });
    
    $(document).on( 'mouseleave focusOut', '.openIt', function( event ) {
    	start = 0;
    });
    	
     $(document).on("click", '.openIt', function(event){
    	if ( new Date().getTime() >= ( start + longpress )  ) {
    		console.log(event.type, " is long press!");
    	} else {
    	    //$.myfynctionHere({.......});
    		console.log(event.type, " is short press!");
    	}
    	event.preventDefault();
    });
    .openIt{
      color: #fff;
      background-color: #000;
      height: 30px;
      width: 50%;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div class="openIt">Open Item</div>