DOM 이벤트 우선 순위
-
08-07-2019 - |
문제
JavaScript에서 이벤트가 어떤 우선 순서를 처리합니까?
알파벳 순서로 이벤트는 다음과 같습니다.
- ONABORT- 이미지의로드가 중단됩니다
- Onblur- 요소는 초점을 잃습니다
- ONCHANGE- 사용자는 필드의 내용을 변경합니다.
- ONCLICK- 마우스가 객체를 클릭합니다
- ondblClick- 마우스는 객체를 두 번 클릭합니다
- onerror- 문서 나 이미지를로드 할 때 오류가 발생합니다.
- ONFOCUS- 요소가 집중됩니다
- ONKEYDOWN- 키보드 키를 누릅니다
- Onkeypress- 키보드 키가 누르거나 고정됩니다.
- ONKEYUP- 키보드 키가 릴리스됩니다
- onload- 페이지 또는 이미지가 완료되었습니다.
- OnMousEdown- 마우스 버튼을 누릅니다
- OnmouseMove- 마우스가 움직입니다
- ONMOUSEOUT- 마우스가 요소에서 옮겨졌습니다
- OnMouseOver- 마우스가 요소 위로 이동합니다
- ONMOUSEUP- 마우스 버튼이 해제됩니다
- OnReset- 재설정 버튼이 클릭됩니다
- onresize- 창 또는 프레임이 크기가 커집니다
- OnSelect- 텍스트가 선택되었습니다
- OnSubmit- 제출 버튼이 클릭됩니다
- ONONLOAD- 사용자가 페이지를 종료합니다
이벤트 대기열에서 어떤 순서를 처리합니까?
우선 순위는 첫 번째 우선 (FIFO)이 아닙니다.
해결책
이것은 내가 아는 한 과거에 명시 적으로 정의되지 않았습니다. 다른 브라우저는 이벤트 순서를 자유롭게 구현할 수 있지만 적합합니다. 대부분은 모든 실제 목적을 위해 충분히 가깝지만 브라우저가 다소 다른 이상한 에지 케이스가 있었으며 계속해서 특정 브라우저가 특정 이벤트를 보내지 못하는 더 많은 경우가 있습니다. 조금도).
즉, HTML 5 초안 추천 이벤트가 대기 및 파견되는 방법을 지정하려고 시도합니다. 이벤트 루프:
이벤트, 사용자 상호 작용, 스크립트, 렌더링, 네트워킹 등을 조정하려면 사용자 에이전트 가이 섹션에 설명 된대로 이벤트 루프를 사용해야합니다.
사용자 에이전트 당 하나 이상의 이벤트 루프가 있어야하며 관련 유사한 유사한 브라우징 컨텍스트의 단위당 최대 하나의 이벤트 루프가 있어야합니다.
이벤트 루프에는 하나 이상의 작업 대기열이 있습니다. 작업 대기열은 주문 된 작업 목록 [...] 사용자 에이전트가 작업을 대기열 할 때 관련 이벤트 루프의 작업 큐 중 하나에 주어진 작업을 추가해야합니다. 하나의 특정 작업 소스의 모든 작업은 항상 동일한 작업 대기열에 추가되어야하지만 다른 작업 소스의 작업은 다른 작업 대기열에 배치 될 수 있습니다. [...
...] 사용자 에이전트는 마우스 및 주요 이벤트 (사용자 상호 작용 작업 소스)에 대해 하나의 작업 대기열을 가질 수 있고 다른 모든 것은 다른 모든 것을 가질 수 있습니다. 그런 다음 사용자 에이전트는 다른 작업보다 키보드 및 마우스 이벤트 선호도를 3/4 분기에 제공하여 인터페이스를 응답하지만 다른 작업 대기열을 굶주 리지 않으며 한 작업 소스에서 이벤트를 주문하지 않습니다. [...
마지막 비트 : 특정 유형의 이벤트에 제공된 우선 순위뿐만 아니라 어떤 이벤트를 함께 그룹화하고 순서대로 처리 할 것인지 결정하는 것은 브라우저 구현에 달려 있습니다. 따라서 모든 브라우저가 파견 할 것으로 예상 할 이유가 거의 없습니다. 모두 고정 된 순서, 현재 또는 미래의 이벤트.
다른 팁
시퀀스 상대 이벤트가 호출되는 것을 알고 싶은 사람은 아래를 참조하십시오. 지금까지 나는 크롬에서만 테스트했습니다.
- 마우스 오버
- Mousemove
- 마우스 아웃
- 마우스 own
- 변경 (집중 입력)
- 블러 (집중 요소)
- 집중하다
- 마우스 업
- 딸깍 하는 소리
- dblclick
- 키 다운
- 키 누름
- 키 업
마우스/터치 이벤트를보고 있다면 Patrick H. Lauke가 출판했습니다. 주제에 대한 이야기. 확실히 흥미로운 독서 - 다른 브라우저, 다른 장치 및 다른 표준의 모든 단점을 다룹니다.
그는 또한 번들 포괄적 인 테스트 세트.