이벤트 (가) 이벤트 - WebStorm 레코드는 HTML 기반으로했다

1.1 이벤트

  이벤트 : 할 수 있습니다 JS는 동작을 감지, 그것은 본질적으로 대화 형 작업입니다.

  예를 들면 : 우리는에 버튼을 추가 할 수 있습니다 [ 온 클릭 클릭 이벤트 ] 버튼에 사용자가 클릭 기능을 트리거 할 때 발생합니다. 

  이벤트의 역할 :

  (1)의 다양한 요소 사이의 이벤트에 의해 상호 작용           

  (2) 사용자와 이벤트를 통해 할 수도 있습니다 상호 작용 페이지 사이

  (3) 수 또한 상호 작용 페이지와 (서버에서 느린 압력) 백엔드 간의 이벤트를 통해

PS : 참고 : 이벤트가 발생하면 이벤트는 일반적으로 함수와 함께 사용되어, 상기 기능이 실행된다.

1.2 일이 조각 확산 / 이벤트 전달 / 이벤트 스트림

이벤트가 발생하면, (자식 요소 및 부모 요소의 확산 전파 ). 이 전파는 3 단계로 나누어 져 있습니다

첫 번째 단계 : 타깃 노드로의 윈도우 오브젝트 (상층은 하층에 도달)로 이루어는 "캡처 단계"(라고도 캡처 단계 ).

단계 II : '타겟 위상 "(위상 대상이라고 대상 노드 트리거에 ).

세번째 단계 : 타겟 노드 다시 윈도우에서 도통 (바닥층에서 리턴) 오브젝트는, "버블 위상"(라고도 버블 단계 ).

W3C의 상태 : 이벤트가 버블 링 + 이벤트 캡처 + 이벤트 트리거에게 진짜 사람을 다른 지점은 구성 JS의 이벤트 메커니즘을.

추신 : 특별한 상황에있는 경우, 이벤트 버블 링을 채택한다.

PS : HTML의 이벤트를 처리하는 메커니즘을 버블 링 이벤트 사용합니다.

   클릭 D2 먼저 실행할 때 D2 바인딩 이벤트 (즉, 실행 TEST2의 기능).

   그런 다음에 전달하는 이벤트 버블 링에 이벤트를 사용하여 DOM의 노드 (D1) D1 자신의 바인딩 이벤트를 구현합니다.

PS는 순차 함수 행한다는 순서 바인딩 이벤트 함수 우선

HTML의 이벤트 결함 : 너무 강한 커플 링, 다른 한 곳을 수정은 수정되어야한다.

                 함수가 성공적으로로드되지 않은 경우, 사용자가 이벤트를 트리거하기 위해, 그것은 오류가 있습니다.

2.2 dom0에의 수준 이벤트

js脚本中,直接通过【on+事件名方式绑定的事件称为是DOM0级事件。

语法:元素.on+事件名  = function(){需要执行的语句;}

 例如:

  btn.onclick = function () {console.log(‘按钮被点击’);};

ps:以冒泡机制来处理事件,不存在兼容的问题

DOM0级事件的移除方式:元素. on+事件名=null;eg:btn.οnclick=null;

2.3 DOM2级事件

js脚本中,通过addEventListener函数绑定的事件称为是DOM2级事件。

语法:元素.addEventListener(type,listener,useCapture)

 type:事件类型。没有on!没有on!没有on
     listener:
监听函数,绑定的函数
    
useCapture:是否使用捕获机制。如果不写,默认值为false
       false:
冒泡机制
      
true:捕获机制
  注意
:DOM2级事件可以绑定多个函数,执行顺序按照函数书写的顺序。

DOM2级事件的移除方式: node.removeEventListener(type,外部函数名,useCapture)

  egbtn.removeEventListener('click',test,true);

psDOM2级事件中如果绑定函数为匿名函数则无法删除。能够删除的只能是外部函数。

pss:第三个参数默认可以不写,默认是false。但是如果删除的是捕获事件,则必须写为true才可以。

3.IE浏览器中的事件绑定

(1)HTML事件处理程序:等同于非IE
(2)DOM0
级事件:等同于非IE
(3)DOM2
级事件:

js脚本中,通过attachEvent函数绑定事件

 语法:元素.attachEvent(type,listener)

   type:事件类型。on!有on!有on】 listener:监听函数,绑定的函数  注意:如果绑定多个函数,按照函数书写的倒叙执行。

IEDOM2级事件的移除方式:

  元素.detachEvent(type,listener)  eg:  function test() {alert(111);}
  d1.attachEvent("onclick",test
);
  d1.detachEvent('
onclick',test);

ps:匿名函数无法被移除。

4.解决浏览器中关于事件绑定兼容性问题

由于【IE浏览器中的事件绑定IE浏览器中的事件绑定方式方法都有所不同。所以单一的某种函数都不能完美解决不同浏览器下的方法绑定问题。那么我们又应该如何面对在不同浏览器下【事件绑定这个问题的解决方案呢? 以下为解决方案的思路。绑定事件时:  如果能使用addEventListener方法绑定的,就采用本方法  否则采用attachEvent方法绑定

   解绑事件时:  如果能采用addEventListener方法绑定的,就采用removeEventListener方法解绑  否则采用detachEvent方法解绑

var Event = {
  addEvent: function (ele, type, handler) {

  if (ele.addEventListener)  {ele.addEventListener(type, handler);}

  else if (ele.attachEvent)   {ele.attachEvent('on' + type, handler);}

  else {ele['on' + type] = handler;}

  },

  removeEvent: function (ele, type, handler) {

  if (ele.addEventListener)   {ele.removeEventListener(type, handler);}

  else if (ele.attachEvent)   {ele.detachEvent('on' + type, handler);}

  else {ele['on' + type] = null;}
  }
};

function test() {alert('点击事件');}
Event.addEvent(document.querySelector('div'), 'click', test);

 

5.鼠标事件

js鼠标事件是指通过鼠标一系列操作(如进入,点击等)来触发的事件。

(1)鼠标事件类型

鼠标单击是触发:click
鼠标双击是触发:dblclick

鼠标按下时触发:mousedown
鼠标抬起时触发:mouseup

鼠标移动时触发:mousemove

鼠标移入时触发(不冒泡)mouseenter

鼠标移出时触发(不冒泡)mouseleave
鼠标移入时触发(冒泡)mouseover

鼠标移出时触发(冒泡)mouseout

语法:元素.on+鼠标事件名称 = 调用函数

例如:d1.ondblclick = function () { console.log('这是d1');};

(2)鼠标事件原则

 

a.鼠标的基本事件默认采用冒泡传递

b.可以给一个元素添加多个不同的鼠标事件,不同的鼠标事件之间互不影响

c.mouseentermouseleave两个事件不冒泡触发。

 

发布了29 篇原创文章 · 获赞 7 · 访问量 4277

추천

출처blog.csdn.net/zgz102928/article/details/104088899