javascript的事件類型都有:UI事件、焦點事件、滑鼠與滾輪事件、鍵盤與文字事件、複合事件、變動事件、HTML5事件、裝置事件、觸控與手勢事件等。
本教學操作環境: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="/static/imghwm/default1.png" data-src="smile.png" class="lazy" onload="alert('loaded')" alt="javascript的事件類型都有啥" >
即當圖片完全加載出來之後會有彈跳窗。當然也可以使用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('changed')">
#3.resize事件
#當調整瀏覽器的視窗到新的寬度或高度時,就會觸發resize事件。這個事件在window(視窗)上面觸發。 因此同樣可以透過JS或body元素中的onresize特性來指定處理程序。
<body onresize="alert('changed')">
寫了這句程式碼,那麼瀏覽器的大小會改變時就會彈出視窗。
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>
在上面的例子中,我把div的高设置为了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> 点击我</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>
当我向下滚动滚轮时,效果如下:
第四部分:键盘和文本事件
该部分主要有下面几种事件:
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中文網其他相關文章!

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境