>  기사  >  웹 프론트엔드  >  JavaScript 이벤트 유형이란 무엇입니까?

JavaScript 이벤트 유형이란 무엇입니까?

青灯夜游
青灯夜游원래의
2021-12-08 15:43:361491검색

JavaScript에서 이벤트 유형은 이벤트가 트리거되는 방식을 나타냅니다. 이벤트 유형에는 UI 이벤트, 포커스 이벤트, 마우스 및 휠 이벤트, 복합 이벤트, 변경 이벤트가 포함됩니다. , HTML5 이벤트, 기기 이벤트, 터치 및 제스처 이벤트 등

JavaScript 이벤트 유형이란 무엇입니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.

이벤트는 JavaScript로 감지할 수 있는 동작을 나타내며 "트리거-응답" 메커니즘입니다. 이러한 동작은 페이지 로딩, 마우스 클릭/더블클릭, 특정 영역 위로 마우스 포인터 슬라이딩 등과 같은 특정 동작을 의미합니다. 이는 페이지의 인터랙티브 효과를 달성하는 데 매우 중요한 역할을 합니다.

이벤트는 "이벤트의 세 가지 요소"라고도 알려진 이벤트 소스, 이벤트 유형 및 이벤트 핸들러의 세 부분으로 구성됩니다.

  • 이벤트 소스: 이벤트를 트리거하는 요소

  • 이벤트 유형: 이벤트가 트리거되는 방식(예: 마우스 클릭 또는 키보드 클릭)

  • 이벤트 핸들러: 이벤트를 실행하는 코드(함수) Form)

위의 세 가지 요소는 간단히 "이벤트를 트리거한 사람", "어떤 이벤트가 트리거되었는지", "이벤트가 트리거된 후 수행할 작업"으로 이해하면 됩니다.

웹 브라우저에서 발생할 수 있는 이벤트 유형은 다양합니다. 여기에서는 주로 다음과 같은 일반적으로 사용되는 이벤트 유형에 중점을 둘 것입니다.

  • UI 이벤트
  • 포커스 이벤트
  • 마우스 및 휠 이벤트
  • 키보드 및 텍스트 이벤트
  • 복합 이벤트
  • Change 이벤트
  • HTML5 이벤트
  • 장치 이벤트
  • 터치 및 제스처 이벤트

1부: UI 이벤트

 UI 이벤트의 UI는 (사용자 인터페이스, 사용자 인터페이스)이며, 사용자가 페이지 사우나의 요소와 상호 작용할 때 트리거됩니다.

 UI 이벤트에는 주로 로드, 언로드, 중단, 오류, 선택, 크기 조정, 스크롤 이벤트가 포함됩니다.

1.load 이벤트

  이 이벤트는 페이지가 완전히 로드되면(모든 이미지, js 파일, CSS 파일 및 기타 외부 리소스 포함) 창의 로드 이벤트가 트리거됩니다.

  이 이벤트는 JavaScript에서 가장 일반적으로 사용되는 이벤트입니다. 예를 들어 페이지가 완전히 로드된 후 함수를 실행하는 window.onload=function(){};을 자주 사용합니다.

  게다가 이 이벤트가 아래와 같이 이미지 요소 등 다른 요소에도 사용될 수 있다는 사실을 이전에는 전혀 몰랐습니다.

24b0157c9e81669eddbc0e7346f6da55  

  이미지가 완전히 로드되면 팝업 창이 나타납니다. 물론 아래와 같이 JS를 사용하여 구현할 수도 있습니다.

var img=document.getElementById("img");
EventUtil.addHandler(img,"load",function(){
      event=EventUtil.getEvent(event);
      alert(EventUtil.getTarget(event).src);
});

2.unload 이벤트

 분명히 이 이벤트는 로드 이벤트와 반대입니다. 문서가 완전히 언로드된 후 트리거됩니다. 사용자가 한 페이지에서 다른 페이지로 전환할 때 언로드 시간이 트리거됩니다. 이 이벤트의 가장 일반적인 사용 사례는 메모리 누수를 방지하기 위한 명확한 참조입니다.

  이 이벤트도 지정하는 방법이 두 가지가 있습니다. 하나는 EventUtil.addHandler()를 사용하는 JavaScript 방법이고, 다른 하나는 body 요소에 기능을 추가하는 것입니다.

onload 이벤트에 코드를 작성할 때 주의해야 할 점은 페이지가 언로드된 후에 트리거되기 때문에 페이지가 로드된 후 존재하는 객체가 반드시 이후에 존재하는 것은 아니기 때문입니다. onload가 실행되었습니다!

edd5d29a43d3fdae6e9c483e7ccef712

3. 크기 조정 이벤트

   브라우저 창이 새로운 너비나 높이로 조정되면 크기 조정 이벤트가 실행됩니다. 이 이벤트는 창에서 트리거됩니다. 따라서 JS의 onresize 속성이나 body 요소를 통해 핸들러를 지정할 수도 있습니다.  

79c1a952cdd0073d2f829668d9eae853

  이 코드를 작성하면 브라우저의 크기가 바뀔 때 창이 뜹니다.

4.scroll event

이 이벤트는 문서가 스크롤되는 동안 반복적으로 발생하므로 이벤트 핸들러의 코드는 최대한 단순하게 유지되어야 합니다.

第二部分:焦点事件

  焦点事件会在页面元素获得或失去焦点时触发。主要有下面几种:

  • blur   在元素失去焦点时触发。这个事件不冒泡,所有浏览器都支持。
  • focus   在元素获得焦点时触发。这个事件不冒泡,所有浏览器都支持。
  • focusin  在元素获得焦点时触发。这个事件冒泡,某些浏览器不支持。
  • focusout 在元素失去焦点时触发。这个事件冒泡,某些浏览器不支持。

  注意:即使blur和focus不冒泡,也可以在捕获阶段侦听到他们。

第三部分:鼠标与滚轮事件

  鼠标事件是Web开发中最常用的一类事件,因为鼠标是最主要的定位设备。

  • click---用户单击鼠标左键或按下回车键触发
  • dbclick---用户双击鼠标左键触发。
  • mousedown---在用户按下了任意鼠标按钮时触发。
  • mouseenter---在鼠标光标从元素外部首次移动到元素范围内时触发。此事件不冒泡
  • mouseleave---元素上方的光标移动到元素范围之外时触发。不冒泡
  • mousemove---光标在元素的内部不断的移动时触发。
  • mouseover---鼠标指针位于一个元素外部,然后用户将首次移动到另一个元素边界之内时触发。
  • mouseout---用户将光标从一个元素上方移动到另一个元素时触发。   
  • mouseup---在用户释放鼠标按钮时触发。

  注意到:上述所有事件除了mouseenter和mouseleave外都冒泡。

  重要:只有在同一个元素上相继触发mousedown和mouseup事件,才会触发click事件。同样,只有在同一个元素上触发两次click事件,才会触发dbclick事件。

  dbclick事件的产生过程如下:

  • mousedown

  • mouseup

  • click

  • mousedown

  • mouseup

  • click

  • dbclick

  上面介绍了有关鼠标的事件,下面介绍一些对于鼠标光标的位置:客户区坐标位置、页面坐标位置、屏幕坐标位置

一、客户区坐标位置

  通过客户区坐标可以知道鼠标是在视口中什么位置发生的。

  clientX和clientY分别表示鼠标点击的位置。以body的左上角为原点,向右为X的正方向,向下为Y的正方向。这两个都是event的属性。举例如下:

    8515479eab28241a7b375919bc70f9bf点我65281c5ac262bf6d81768915a4a77ac0
    3f1c4e4b6b16bbbd69b2ee476dc4f83a
        var button=document.getElementById("clickMe");
        button.onclick=function(event){
            alert(event.clientY+""+event.clientX);
        };    
     2cacc6d41bbb37262a98f745aa00fbf0

  当我点击按钮的左上角时,显示为00。效果如下:

二.页面坐标位置

  和客户区坐标位置不同,页面坐标位置表示鼠标光标在页面而非视口中的位置。因此坐标是从页面本身而非视口的左边和顶边计算的。如果前面的话不能很好的理解,接着看这里:在页面没有滚动的情况下,页面坐标位置和客户区坐标位置是相同的。

  页面坐标

76c82f278ac045591c9159d381de2c57
9fd01892b579bba0c343404bcccd70fb
93f0f5c25f18dab9d176bd4f6de5d30e
    a80eb7cbb6fff8b0ff70bae37074b813
    b2386ffb911b14667cb8f0f91ea547a7页面坐标位置6e916e0f7d1e588d4f442bf645aedb2f
    c9ccee2e6ea535a969eb3f532ad9fe89
        *{
            margin:0;
            padding:0;
        }
        p{
            width: 800px;
            height: 1200px;            /*我的电脑的视口高度为960px;*/
            background: #ccc;
        }    531ac245ce3e4fe3d50054a55f265927
9c3bca370b5104690d9ef395f2c5f8d1
6c04bd5ca3fcae76e30b72ad730ca86d
    e388a4556c0f65e1904146cc1a846bee94b3e26ee717c64999d7867364b1b4a3
    be83eb51f340b921e483a6b46a36fe5f 点击我65281c5ac262bf6d81768915a4a77ac0
    3f1c4e4b6b16bbbd69b2ee476dc4f83a        
    var button=document.getElementById("button");
        button.onclick=function(){
            alert("pageX为"+event.pageX+"pageY为"+event.pageY);
        };    2cacc6d41bbb37262a98f745aa00fbf0
36cc49f0c466276486e50c850b7e4956
73a6ac4ed44ffec12cee46588e518a5e

在上面的例子中,我把p的高设置为了1200px;而我的浏览器视口高度为960px;所以一定需要滚动我们才能点击按钮,最终得到的结果是:pageX为13pageY为1210。

然而IE8及更早的浏览器是不支持事件对象上的页面坐标的,即不能通过pageX和pageY来获得页面坐标,这时需要使用客户区坐标和滚动信息来计算了。而滚动信息需要使用document.body(混杂模式)、document.documentElement(标准模式)中的scrollLeft和scrollTop属性。举例如下:

    be83eb51f340b921e483a6b46a36fe5f 点击我65281c5ac262bf6d81768915a4a77ac0
    3f1c4e4b6b16bbbd69b2ee476dc4f83a        var button=document.getElementById("button");
        button.onclick=function(){            
        var pageX=event.clientX+(document.body.scrollLeft||document.documentElement.scrollLeft);           
         var pageY=event.clientY+(document.body.scrollRight||document.documentElement.scrollRight);
            alert("pageX为"+pageX+"pageY为"+pageY);
        };    
      2cacc6d41bbb37262a98f745aa00fbf0

此例子在IE浏览器下可得到同样结果。

三.屏幕坐标位置

  与前两者又有所不同,鼠标事件发生时,还有一个光标相对于整个电脑屏幕的位置。通过screenX和screenY属性就可以确定鼠标事件发生时鼠标指针相对于整个屏幕的位置。举例如下:

76c82f278ac045591c9159d381de2c57
9fd01892b579bba0c343404bcccd70fb
93f0f5c25f18dab9d176bd4f6de5d30e
    a80eb7cbb6fff8b0ff70bae37074b813
    b2386ffb911b14667cb8f0f91ea547a7页面坐标位置6e916e0f7d1e588d4f442bf645aedb2f
    c9ccee2e6ea535a969eb3f532ad9fe89
        *{
            margin:0;
            padding:0;
        }    531ac245ce3e4fe3d50054a55f265927
9c3bca370b5104690d9ef395f2c5f8d1
6c04bd5ca3fcae76e30b72ad730ca86d
    be83eb51f340b921e483a6b46a36fe5f 点击我65281c5ac262bf6d81768915a4a77ac0
    3f1c4e4b6b16bbbd69b2ee476dc4f83a        
    var button=document.getElementById("button");
        button.onclick=function(){
            alert("X为:"+event.screenX+"Y为:"+event.screenY);
        };    
      2cacc6d41bbb37262a98f745aa00fbf0
36cc49f0c466276486e50c850b7e4956
73a6ac4ed44ffec12cee46588e518a5e

最终的结果如下:

显然screenX和screenY是相对于屏幕的左方和上方的。

四.修改键

  当点击某个元素时,如果我们同时按下了ctrl键,那么事件对象的ctrlKey属性值将为true,否则为false,对于alt、shift、meta(windows键盘的windows键、苹果机的Cmd键)的事件属性altKey、shiftKey、metaKey同样如此。下面举例如下:

    be83eb51f340b921e483a6b46a36fe5f 点击我65281c5ac262bf6d81768915a4a77ac0
    3f1c4e4b6b16bbbd69b2ee476dc4f83a        
    var button=document.getElementById("button");
        button.onclick=function(){            
        var array=new Array();            
        if(event.shiftKey){
                array.push("shift");
            }            if(event.ctrlKey){
                array.push("ctrl");
            }            if(event.altKey){
                array.push("alt");
            }            if(event.metaKey){
                array.push("meta");
            }
            alert(array.join(","));
        };    
      2cacc6d41bbb37262a98f745aa00fbf0

这个例子中,我首先创建了一个array数组,接着如果我按下了那几个键,就会存入相应的名称。这里我同时按下了四个键,结果如下:

即最终将数组中的四个值拼接成了字符串显示出来。

七、鼠标滚轮事件

    3f1c4e4b6b16bbbd69b2ee476dc4f83a
        document.onmousewheel=function(){
            alert(event.wheelDelta);
        };    
     2cacc6d41bbb37262a98f745aa00fbf0

当我向下滚动滚轮时,效果如下:

 

 

 

第四部分:键盘和文本事件

  该部分主要有下面几种事件:

  • keydown:当用户按下键盘上的任意键时触发。按住不放,会重复触发。

  • keypress:当用户按下键盘上的字符键时触发。按住不放,会重复触发。

  • keyup:当用户释放键盘上的键时触发。

  • textInput:这是唯一的文本事件,用意是将文本显示给用户之前更容易拦截文本。

  这几个事件在用户通过文本框输入文本时才最常用到。

  键盘事件:

    document.addEventListener("keydown",handleKeyDownClick,false);

        function handleKeyDownClick(event) {            
        var e = event||window.event||arguments.callee.caller.arguments[0];            
        if (e&&e.keyCode == 13) {
                alert("keydown");
            }
        }

【相关推荐:javascript学习教程

위 내용은 JavaScript 이벤트 유형이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.