Heim > Web-Frontend > js-Tutorial > Binden Sie das Mausklick-Ereignis dreimal

Binden Sie das Mausklick-Ereignis dreimal

php中世界最好的语言
Freigeben: 2018-04-17 11:47:37
Original
1769 Leute haben es durchsucht

Dieses Mal werde ich Ihnen die Vorsichtsmaßnahmen für die Bindung von 3 Mausklickereignissen vorstellen.

In den letzten Tagen habe ich über Dom-Ereignisse in JavaScript gelesen. Außerdem habe ich im Internet über mehrere Mausklick-Ereignisse gelesen Daher haben wir einige kleine Erweiterungen und Implementierungen für Klickereignisse vorgenommen, um unser Verständnis von Dom-Ereignissen zu verbessern. Die Umsetzung und Ideen werden von mir selbst zusammengefasst. Wenn etwas nicht stimmt, bitten Sie die Experten, es mir mitzuteilen und zu korrigieren.

1. Erstellen Sie ein allgemeines Ereignisverarbeitungsmodul (native Implementierung)

Die folgende Implementierung basiert auf der Art und Weise, wie AMD Module definiert:

/**
 * 浏览器兼容事件处理组件
 */
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;
});
Nach dem Login kopieren

2. Implementierung des Maus-3-Klick-Ereignisses

Ereignisse, die an Mausklickereignissen und Ausführungsauslösesequenz beteiligt sind:

Mousedown: Wird ausgelöst, wenn eine beliebige Maustaste gedrückt wird

Mouseup: wird ausgelöst, wenn die Maustaste losgelassen wird

Klicken: Klicken Sie auf

Mousedown

Mausup

dblclick: Doppelklick

Offensichtlich hängt der Klick von dblclick ab. Sie können diese beiden Ereignisse verwenden, um die Ausführung durch drei aufeinanderfolgende Mausklicks auszulösen. Das Design löst dblclick aus und lauscht auf das Klickereignis, das in einem kurzen Zeitraum ausgelöst wird Der Effekt ist im folgenden Quellcode konkret implementiert:

<p> 
  <button id="button">鼠标3击</button> 
</p>
Nach dem Login kopieren

js-Code

require(['eventUtil'], function (EventUtil) {
  var button = document.getElementById('button');
  click3Event(button, function (event) {
    console.log('3 click');
  });
  // 鼠标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, 'click', handler);
        // 执行内容
        fn();
      };
      EventUtil.addHandler(target, 'click', handler);
      // 为防止双击后较长时间再次单击执行事件
      setTimeout(function () {
        EventUtil.removeHandler(target, 'click', handler);
      }, 300);
    };
    EventUtil.addHandler(dom, 'dblclick', handler);
  }
Nach dem Login kopieren

3. Implementierung des Maus-N-Klick-Ereignisses

Ausgehend vom 3-Klick-Ereignis der Maus erfahren Sie, wie Sie das Ereignis implementieren, das n aufeinanderfolgende Mausklicks auslöst. Die Idee, die mir in den Sinn kommt, ist: Deaktivieren Sie das dblclick-Ereignis des Zielobjekts und verwenden Sie das Klickereignis nur zur logischen Beurteilung und Ausführung kontinuierlicher Klicks. Wenn innerhalb eines kurzen Zeitraums n Klicks erfolgen, wird die Ausführung ausgelöst die kumulierte Zahl wird neu berechnet. Der spezifische Implementierungscode lautet wie folgt:

require(['eventUtil'], function (EventUtil) {
  var button = document.getElementById('button');
  nclickEvent(4, button, function (event, n) {
    console.log(n + ' click');
  });
  function nclickEvent (n, dom, fn) {
    // 禁止双击事件
    EventUtil.removeHandler(dom, 'dblclick', 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, 'click', handler);
  }
});
Nach dem Login kopieren

Abschließend werde ich Ihnen eine JQuery-Version des Codes mitteilen

<!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;
		$('#box').click(function(){
			if(d){clearTimeout(d)}
			d=setTimeout(function(){
				num=0
			},200);
			num++;
			if(num>=3){
				alert(num+"\n ok")
			}
		})
	})();
	</script>
</body>
</html>
Nach dem Login kopieren

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln die chinesische PHP-Website!

Empfohlene Lektüre:



Das obige ist der detaillierte Inhalt vonBinden Sie das Mausklick-Ereignis dreimal. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage