>  기사  >  웹 프론트엔드  >  자바스크립트의 이벤트란 무엇인가요?

자바스크립트의 이벤트란 무엇인가요?

醉折花枝作酒筹
醉折花枝作酒筹원래의
2021-06-11 11:16:434529검색

Javascript에는 1. UI 이벤트, 3. 마우스 및 휠 이벤트, 5. 복합 이벤트, 7. 장치 이벤트, , 터치 및 제스처 이벤트.

자바스크립트의 이벤트란 무엇인가요?

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

JavaScript 이벤트 유형

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

  • UI 이벤트

  • 포커스 이벤트

  • 마우스 및 휠 이벤트

  • 키보드 및 텍스트 이벤트

  • 복합 이벤트

  • 변경 이벤트

  • HTML5 이벤트

  • 기기 이벤트

  • 터치 및 제스처 이벤트

1부: UI 이벤트

 UI 이벤트에서 UI는(User Interface, 사용자 인터페이스)입니다. 사용자는 페이지 사우나의 요소와 상호작용할 때 발생합니다.

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

1.load 이벤트

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

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

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

<img src="smile.png" onload="alert(&#39;loaded&#39;)">  

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

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

2.unload event

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

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

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

<body onload="alert(&#39;changed&#39;)">

3.resize 이벤트

  브라우저 창의 너비나 높이가 변경되면 크기 조정 이벤트가 발생합니다. 이 이벤트는 창에서 트리거됩니다. 따라서 JS 또는 body 요소의 onresize 속성을 통해 핸들러를 지정할 수도 있습니다. ​

<body onresize="alert(&#39;changed&#39;)">

​ 이 코드를 작성하면 브라우저의 크기가 변경될 때 창이 뜹니다.

4.scroll 이벤트

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

2부: 포커스 이벤트

포커스 이벤트는 페이지 요소가 포커스를 얻거나 잃을 때 트리거됩니다. 주로 다음과 같은 유형이 있습니다.

  • blur는 요소가 초점을 잃을 때 트리거됩니다. 이 이벤트는 버블링되지 않으며 모든 브라우저에서 지원됩니다.

  • focus는 요소가 포커스를 받으면 트리거됩니다. 이 이벤트는 버블링되지 않으며 모든 브라우저에서 지원됩니다.

  • focusin은 요소에 포커스가 있을 때 트리거됩니다. 이 이벤트는 버블링되며 일부 브라우저에서는 지원되지 않습니다.

  • focusout은 요소가 포커스를 잃을 때 트리거됩니다. 이 이벤트는 버블링되며 일부 브라우저에서는 지원되지 않습니다.

참고: 흐림 및 초점이 버블링되지 않더라도 캡처 단계에서 계속 들릴 수 있습니다.

3부: 마우스 및 휠 이벤트

마우스 이벤트는 웹 개발에서 가장 일반적으로 사용되는 이벤트입니다. 마우스가 주요 위치 지정 장치이기 때문입니다.

  • click---사용자가 마우스 왼쪽 버튼을 클릭하거나 Enter 키를 누르면 트리거됩니다.

  • dbclick---사용자가 마우스 왼쪽 버튼을 두 번 클릭하면 트리거됩니다.

  • mousedown---사용자가 마우스 버튼을 누를 때 트리거됩니다.

  • mouseenter---마우스 커서가 처음으로 요소 외부에서 요소 범위로 이동할 때 트리거됩니다. 이 이벤트는 버블링되지 않습니다.

  • mouseleave---요소 위의 커서가 요소 범위 밖으로 이동할 때 트리거됩니다. 거품이 나지 않습니다.

  • mousemove---커서가 요소 내에서 계속 움직일 때 트리거됩니다.

  • mouseover---마우스 포인터가 한 요소 외부에 있고 사용자가 처음으로 다른 요소 경계 내에서 움직일 때 실행됩니다.

  • mouseout---사용자가 한 요소에서 다른 요소로 커서를 이동할 때 실행됩니다.

  • mouseup---사용자가 마우스 버튼을 놓을 때 트리거됩니다.

주의 사항: 위의 모든 이벤트는 mouseenter 및 mouseleave를 제외하고 버블링됩니다.

중요: click 이벤트는 mousedown 및 mouseup 이벤트가 동일한 요소에서 연속적으로 트리거되는 경우에만 트리거됩니다. 마찬가지로, dbclick 이벤트는 동일한 요소에서 click 이벤트가 두 번 트리거되는 경우에만 트리거됩니다.

  dbclick事件的产生过程如下:

  • mousedown

  • mouseup

  • click

  • mousedown

  • mouseup

  • click

  • dbclick

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

一、客户区坐标位置

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

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

<button id="clickMe">点我</button>
    <script>
        var button=document.getElementById("clickMe");
        button.onclick=function(event){
            alert(event.clientY+""+event.clientX);
        };
    </script>

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

二.页面坐标位置

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

  页面坐标

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>页面坐标位置</title>
    <style>
        *{
            margin:0;
            padding:0;
        }
        div{
            width: 800px;
            height: 1200px;
            /*我的电脑的视口高度为960px;*/
            background: #ccc;
        }
    </style>
</head>
<body>
    <div></div>
    <button id="button"> 点击我</button>
    <script>
        var button=document.getElementById("button");
        button.onclick=function(){
            alert("pageX为"+event.pageX+"pageY为"+event.pageY);
        };
    </script>
</body>
</html>

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

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

<button id="button"> 点击我</button>
    <script>
        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);
        };
    </script>

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

三.屏幕坐标位置

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

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>页面坐标位置</title>
    <style>
        *{
            margin:0;
            padding:0;
        }

    </style>
</head>
<body>
    <button id="button"> 点击我</button>
    <script>
        var button=document.getElementById("button");
        button.onclick=function(){
            alert("X为:"+event.screenX+"Y为:"+event.screenY);
        };
    </script>
</body>
</html>

最终的结果如下:

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

四.修改键

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

<button id="button"> 点击我</button>
    <script>
        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(","));
        };
    </script>

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

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

五、相关元素

<button id="button"> 点击我</button>
    <script>
        var button=document.getElementById("button");
        button.onmouseup=function(){
            alert(event.button);
        };
    </script>

  当我是用左键产生mousedown事件时,弹出窗口为0,中间键为1,右键为2。

七、鼠标滚轮事件

    <script>
        document.onmousewheel=function(){
            alert(event.wheelDelta);
        }; 
     </script>

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

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

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

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

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

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

  4. 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高级教程

위 내용은 자바스크립트의 이벤트란 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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