首頁 >web前端 >js教程 >JS滑鼠3次點擊事件的實作程式碼

JS滑鼠3次點擊事件的實作程式碼

小云云
小云云原創
2018-02-12 09:35:062378瀏覽

這幾天看了一下JavaScript高階程式設計中的Dom事件相關內容,同時看到網路上有關滑鼠多次點擊事件,滑鼠事件是簡單、常用的事件之一,於是便針對點擊事件進行一些小的擴展與實現,增強對Dom事件的進一步理解。其中的實現和思路是自己總結的,有什麼不對的地方還請大神們交流指正。本文主要和大家介紹了JS滑鼠3次點擊事件實現及擴展思路,需要的朋友可以參考下,希望能幫助到大家。

1、製作一個通用的事件處理模組(原生實作)

以下實作基於AMD定義模組方式:


/**
 * 浏览器兼容事件处理组件
 */
define(function () {
  var EventUtil = {
    // 添加事件监听
    addHandler: function (element, type, handler) {
      if (element.addEventListener) {
        element.addEventListener(type, handler, false);// DOM2级事件
      } else if (element.attachEvent) {
        element.attachEvent('on' + type, handler);// DOM2级IE事件
      } else {
        element['on' + type] = handler;// DOM0级事件
      }
    },
    // 移除事件监听
    removeHandler: function (element, type, handler) {
      if (element.removeEventListener) {
        element.removeEventListener(type, handler, false);
      } else if (element.detachEvent) {
        element.detachEvent('on' + type, handler);
      } else {
        element['on' + type] = null;
      }
    },
    // 获取事件对象
    getEvent: function (event) {
      return event ? event : window.event;
    },
    // 获取事件的目标元素
    getTarget: function (event) {
      return event.target || event.srcElement;
    },
    // 禁止事件默认行为
    preventDefault: function (event) {
      if (event.preventDefault) {
        event.preventDefault();
      } else {
        event.returnValue = false;
      }
    },
    // 禁止事件冒泡
    stopPropagation: function (event) {
      if (event.stopPropagation) {
        event.stopPropagation();
      } else {
        event.cancelBubble = true;
      }
    }
  };

  return EventUtil;
});

2、滑鼠3擊事件實作

滑鼠點擊事件涉及的事件及執行觸發順序:

mousedown:滑鼠任意鍵按下時觸發

mouseup:釋放滑鼠按鈕時觸發

click:點選

mousedown

mouseup

dblclick:雙擊

#顯然,click是依賴dblclick的,可以考慮根據這兩個事件實現滑鼠3次連續點擊觸發執行,設計觸發dblclick後監聽click事件,如果在短時間內觸發了click事件,則構成滑鼠連續點擊3次的效果,實作如下原始碼: 


<p> 
  <button id="button">鼠标3击</button> 
</p>

js 程式碼


require([&#39;eventUtil&#39;], function (EventUtil) {
  var button = document.getElementById(&#39;button&#39;);

  click3Event(button, function (event) {
    console.log(&#39;3 click&#39;);
  });

  // 鼠标3击事件
  function click3Event(dom, fn) {
    var handler = function (event) {
      var event = EventUtil.getEvent(event),
        target = EventUtil.getTarget(event);

      var handler = function (event) {
        var event = EventUtil.getEvent(event),
          target = EventUtil.getTarget(event);

        EventUtil.removeHandler(target, &#39;click&#39;, handler);

        // 执行内容
        fn();
      };

      EventUtil.addHandler(target, &#39;click&#39;, handler);

      // 为防止双击后较长时间再次单击执行事件
      setTimeout(function () {
        EventUtil.removeHandler(target, &#39;click&#39;, handler);
      }, 300);
    };

    EventUtil.addHandler(dom, &#39;dblclick&#39;, handler);
  }

3、滑鼠n擊事件實作

由滑鼠3擊事件聯想到,如果實作n次滑鼠連擊事件觸發如何實作。想到的想法是:停用目標物件的dblclick事件,只用click事件進行連續點擊的邏輯判斷和操作,在連續的短時間內滿足點擊n次即可觸發執行,否則重新計算累加次數。具體的實作程式碼如下:


require([&#39;eventUtil&#39;], function (EventUtil) {
  var button = document.getElementById(&#39;button&#39;);

  nclickEvent(4, button, function (event, n) {
    console.log(n + &#39; click&#39;);
  });


  function nclickEvent (n, dom, fn) {
    // 禁止双击事件
    EventUtil.removeHandler(dom, &#39;dblclick&#39;, null);

    var n = parseInt(n) < 1 ? 1 : parseInt(n),
      count = 0,
      lastTime = 0;

    var handler = function (event) {
      var currentTime = new Date().getTime();

      count = (currentTime - lastTime < 300) ? count + 1 : 0;

      lastTime = new Date().getTime();

      if (count >= n - 1) {
        fn(event, n);
        count = 0;
      }
    };

    EventUtil.addHandler(dom, &#39;click&#39;, handler);
  }
});

最後給大家分享一個jquery版的程式碼


##

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
<p id="box">234234234234234</p>
	<script src="js/jquery.min.js"></script>
	<script>
	(function(){
		var num=0,d=null;
		$(&#39;#box&#39;).click(function(){
			if(d){clearTimeout(d)}
			d=setTimeout(function(){
				num=0
			},200);
			num++;
			if(num>=3){
				alert(num+"\n ok")
			}
		})
	})();
	</script>
</body>
</html>

相關推薦:


jQuery自訂元素右鍵點選事件

#關於js 索引下標之li集合綁定點選事件實例分享

jQuery第一次執行頁面預設觸發點擊事件#

以上是JS滑鼠3次點擊事件的實作程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn