首頁  >  文章  >  web前端  >  javascript有哪幾種事件

javascript有哪幾種事件

醉折花枝作酒筹
醉折花枝作酒筹原創
2021-06-11 11:16:434568瀏覽

javascript有:1、UI事件;2、焦點事件;3、滑鼠與滾輪事件;4、鍵盤與文字事件;5、複合事件;6、變動事件;7、HTML5事件;8、設備事件;9、觸摸與手勢事件。

javascript有哪幾種事件

本教學操作環境:windows7系統、javascript1.8.5版、Dell G3電腦。

JavaScript事件類型

網頁瀏覽器中可能發生的事件有很多類型。這裡我將主要將下面幾種常用的事件類型:

  • UI事件

  • 焦點事件

  • 滑鼠與滾輪事件

  • 鍵盤與文字事件

  • #複合事件

  • 變動事件

  • HTML5事件

  • 「裝置事件

  • 觸控與手勢事件

第一部分:UI事件

  UI事件中UI即(User Interface,使用者介面),當使用者與頁面三溫暖的元素互動時觸發。

  UI事件中主要包括load,unload,abort,error,select,resize,scroll事件。

1.load事件

   此事件為當頁面完全載入完之後(包括所有的映像、js檔案、css檔案等外部資源),就會觸發window上面的load事件。

   這個事件是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事件

#   顯然,這個事件是與load事件相對的。在文件被完全卸載後觸發。使用者從一個頁面切換到另一個頁面就會觸發unload時間。利用這個事件最多的情況是清楚引用,避免記憶體洩漏。

   這個事件同樣有兩種方式來指定。一種是JavaScript方式,使用EventUtil.addHandler();另一種就是在body元素中加入一個特性。

     值得注意的是,一定要小心編寫onload事件中的程式碼,因為它是在頁面卸載後才觸發,所以說頁面加載後存在的那些對象,在onload觸發之後就不一定存在了!

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

3.resize事件

    當調整瀏覽器的視窗到一個新的寬度或高度時,就會觸發resize事件。這個事件在window(視窗)上面觸發。因此同樣可以透過JS或是body元素中的onresize特性來指定處理程序。  

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

    寫了這句程式碼,那麼瀏覽器的大小改變時就會彈出視窗。

4.scroll事件

  這個事件會在文件被滾動期間重複被觸發,所以應當盡量保持事件處理程序的程式碼簡單。

第二部分:焦點事件

  焦點事件會在頁面元素獲得或失去焦點時觸發。主要有以下幾種:

  • 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的属性。举例如下:

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

以上是javascript有哪幾種事件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn