>웹 프론트엔드 >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: 더블 클릭

물론 클릭은 dblclick에 따라 달라집니다. 예, 이 두 이벤트를 기반으로 실행을 트리거하기 위해 3번의 연속 마우스 클릭을 고려할 수 있습니다. 디자인은 dblclick을 트리거하고 짧은 시간 내에 클릭 이벤트를 수신합니다. 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 이벤트를 비활성화하고 논리적 판단 및 연속 클릭 작업에만 클릭 이벤트를 사용하는 것입니다. 짧은 시간 내에 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으로 문의하세요.