最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript 瀏覽器事件小結(jié)

 更新時間:2010年02月13日 10:06:52   作者:  
Javascript中的事件都是與對象相關(guān)聯(lián)的,而不是語言本身所有,當(dāng)Javascript在瀏覽器中運(yùn)行的時候,事件與每個瀏覽器實現(xiàn)的DOM模型有關(guān)。
事件本身相當(dāng)直觀,常用的有:
事件 描述
abort 圖片被阻止而不能加載
blur,focus 失去焦點,獲得焦點
change 適用于表單元素,當(dāng)元素使其焦點的時候判斷是否發(fā)生改變
click,dblclick 單擊,雙擊
keydown,keyup,keypress 按下鍵,鍵離開,按下鍵的時候觸發(fā),注意keypress只對數(shù)字字母鍵有效
load 加載圖片或者頁面的時候
mousedown,mouseup 按下鍵,放開鍵
mouseover,mouseout over是當(dāng)鼠標(biāo)進(jìn)入的時候出發(fā),out是離開的時候觸發(fā)
mousemove 鼠標(biāo)移動
reset,submit 重置和提交表單

以上僅僅是常用的事件的列表,完整具體的列表可以查找相關(guān)手冊。

1. 0級DOM上的事件處理
0級DOM上的事件處理方法是比較早的,目前也廣泛應(yīng)用,從IE4.0開始就支持這類方法。

1.1 事件注冊
下面主要介紹如何添加響應(yīng)事件,也就是為事件添加處理程序。

(1)內(nèi)聯(lián)注冊(inline registration)

這是最簡單的一種,將事件響應(yīng)程序作為html標(biāo)簽的一個屬性來設(shè)置,如下例,可以是代碼,當(dāng)然更多情況下是一個函數(shù)調(diào)用。事件的句柄一般就是事件的名稱加上前綴on。

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

這種方法很簡單,任何瀏覽器都支持,缺點是將Javascript代碼和HTML代碼混雜在一起,而且不能動態(tài)添加事件響應(yīng)程序,也不能添加多個響應(yīng)程序。

(2)傳統(tǒng)模式(traditional registration)

這種模式將事件作為對象的屬性進(jìn)行添加。例如:

1.2 事件的參數(shù)(Event對象)
有些事件處理程序需要一些關(guān)于事件更多的信息,比如click事件發(fā)生的位置等。這些信息是通過事件參數(shù)傳給事件處理程序的。IE事件模型和W3C事件模型對此的實現(xiàn)是不同的。

IE把event對象作為window對象的一個屬性,而W3C把event對象作為處理程序的一個參數(shù)。下面以click事件為例,分別寫一個程序用于IE和支持W3C標(biāo)準(zhǔn)的瀏覽器。

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

這一段頁面代碼可以把click事件對象的所有屬性都展示出來。上面的例子是W3C的瀏覽器所用的方法,要在IE下使用,只要改成onclick=”IEClick()”.注意,W3CClick中的參數(shù)名,只能是event。打印出來的屬性很多,我分別用FF3.5,Chrome3,IE8(標(biāo)準(zhǔn)模式和兼容模式)運(yùn)行,他們共有的屬性并不多,其實也就這些共有的屬性才有意義,他們是:

altKey,shiftKey,ctrlKey:是否按下alt,shift,ctrl鍵

clientX,clientY:客戶區(qū)坐標(biāo)(瀏覽器窗口),screenX,screenY:屏幕區(qū)坐標(biāo)

type:事件類型

雖然事件的參數(shù)的傳遞方式有點不同,但是對于寫跨瀏覽器的代碼也沒有造成太多的麻煩,只需要在函數(shù)一開始判斷下window.event有沒有定義即可。
復(fù)制代碼 代碼如下:

function BothClick(args) {
var evnt = window.event ? window.event : args;
alert(evnt.clientX);
}

注冊句柄為:<div id="adiv" onclick="BothClick(event)" >a</div>如果采用第二種方式注冊句柄,則不需要什么特別處理。

1.3 事件的浮升
頁面上的對象通常是重疊的,比如一個div中可以包括若干div或者其他元素。當(dāng)某一事件觸發(fā)的時候,同時有多個元素受影響,并且它們都有相應(yīng)的事件處理程序,那么這些事件處理程序執(zhí)行哪些?以何種順序執(zhí)行?這就是本節(jié)要討論的問題。通常情況下,一個事件被多個句柄捕獲的情形并不多見。先看一個例子(CSS省略):

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

在body,外層div和內(nèi)層div都響應(yīng)了click事件,結(jié)果如下:
image 
可見,事件是由內(nèi)向外層的元素依次觸發(fā)的。(一般教材上的說法是向上浮升,bubbling,我覺得這個向上是有歧義的,我一開始就誤認(rèn)為內(nèi)層的元素是上面的,因為它能覆蓋外層的元素)用0級DOM注冊的事件,它的浮升方法無論是IE還是W3C都是統(tǒng)一的。

1.4 浮升的取消
有時候我們需要在響應(yīng)了一個事件之后,就不需要外層的元素再響應(yīng)了,可以取消事件的浮升。取消的方法IE和W3C是不一致的。IE是通過設(shè)置事件對象的cancelBubble屬性來實現(xiàn),W3C則是調(diào)用事件對象的stopPropagation方法。

例如上面的例子改為:
復(fù)制代碼 代碼如下:

function inner_click(arg){
var evnt=window.event?window.event:arg;
var dis=document.getElementById("res");
dis.innerHTML+="Inner Click <br/>";
if(evnt.stopPropagation){
evnt.stopPropagation();
}else{
evnt.cancelBubble=true;
}
}<div id="innerdiv" onclick="inner_click(event)" >

其他不變,這樣就只能看到一行輸出。

1.5 事件處理函數(shù)中的this
這個this指向的是觸發(fā)事件的對象。

下面介紹2級DOM的事件句柄。這種方式是比較新的方式,它不依賴于任何特定的事件句柄屬性。W3C規(guī)定的方式是

object.addEventListener(‘event',function,boolean)

第一個參數(shù)是事件名,第二個是事件響應(yīng)函數(shù),第三個變量如果是true,則事件函數(shù)在事件冒泡階段被觸發(fā),否則是在事件的捕獲階段被觸發(fā)。W3C規(guī)定事件的發(fā)生有兩個階段,首先是捕獲,即事件以此從最外層層的元素向內(nèi)層傳遞,相應(yīng)的事件處理函數(shù)被依次觸發(fā),然后是冒泡階段,事件從最內(nèi)層的元素向外層傳遞。 看一個例子:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

點擊灰色框,會依次彈出body true,div true,div false,body false. 很遺憾,IE不支持這種方式,最新的IE8也不支持。不過IE也有類似的注冊事件的方法,名字是attachEvent.不過這個方法沒有第三個參數(shù),它支持冒泡階段的事件響應(yīng)。attachEvent函數(shù)傳遞事件參數(shù)的時候是和W3C一致的,也是通過event參數(shù)傳遞,但是,其函數(shù)內(nèi)部的this指向的不是觸發(fā)事件對象,而永遠(yuǎn)指向window。在event對象中有一個屬性指向觸發(fā)該事件的對象,W3C中是target,IE中是srcElement, 在符合W3C規(guī)范的瀏覽器中,事件處理函數(shù)中的this和event.target指向的是同一個對象。下面的程序展示了一個IE和W3C兼容的事件處理程序:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]

事件處理程序中W3C和IE還有諸多不一致之處,十分麻煩。好在大多都有較好的解決方案。更多信息請參考http://www.quirksmode.org/js/events_events.html

相關(guān)文章

  • JavaScript對象解構(gòu)的用法實例解析

    JavaScript對象解構(gòu)的用法實例解析

    解構(gòu)賦值允許你使用類似數(shù)組或?qū)ο笞置媪康恼Z法將數(shù)組和對象的屬性賦給各種變量,下面這篇文章主要給大家介紹了關(guān)于JavaScript對象解構(gòu)用法的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • JavaScript加強(qiáng)之自定義event事件

    JavaScript加強(qiáng)之自定義event事件

    event事件在本文以自定義的方式出現(xiàn),感興趣的朋友可以參考下,希望對大家有所幫助
    2013-09-09
  • JS實現(xiàn)百度網(wǎng)盤任意文件強(qiáng)制下載功能

    JS實現(xiàn)百度網(wǎng)盤任意文件強(qiáng)制下載功能

    這篇文章主要介紹了JS實現(xiàn)百度網(wǎng)盤任意文件強(qiáng)制下載 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • smartcrop.js智能圖片裁剪庫

    smartcrop.js智能圖片裁剪庫

    為了測試這個智能識別插件,我試了很多壁紙圖片,都能智能裁剪出圖片的主體部分,轉(zhuǎn)而嘗試了一下chrome和Firefox以及IE,發(fā)現(xiàn)IE只有10以上的版本才支持,chrome和Firefox支持,手機(jī)瀏覽器不支持,這到底是啥黑科技??今天我們就來詳細(xì)看看
    2015-10-10
  • js中獲取事件對象的方法小結(jié)

    js中獲取事件對象的方法小結(jié)

    事件對象 的獲取很簡單,很久前我們就知道IE中事件對象是作為全局對象( window.event )存在的,F(xiàn)irefox中則是做為句柄( handler )的第一個參數(shù)傳入內(nèi)的。所以一行代碼就可以搞定
    2011-03-03
  • js實現(xiàn)碰撞檢測

    js實現(xiàn)碰撞檢測

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)碰撞檢測,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • js實現(xiàn)文字選中分享功能

    js實現(xiàn)文字選中分享功能

    本文主要分享了js實現(xiàn)文字選中分享功能的示例代碼。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • JavaScript中定義函數(shù)的三種方法

    JavaScript中定義函數(shù)的三種方法

    這篇文章主要介紹了JavaScript中定義函數(shù)的三種方法,本文直接給出代碼實現(xiàn),同時給出了構(gòu)造函數(shù)的相關(guān)知識,需要的朋友可以參考下
    2015-03-03
  • 前端實現(xiàn)水印效果的5種方案舉例

    前端實現(xiàn)水印效果的5種方案舉例

    在前端項目中,為了保護(hù)圖片、文檔或其他資源的版權(quán),常常需要為它們添加水印,下面這篇文章主要給大家介紹了關(guān)于前端實現(xiàn)水印效果的5種方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • 如何使用proxy實現(xiàn)一個簡單完整的MVVM庫的示例代碼

    如何使用proxy實現(xiàn)一個簡單完整的MVVM庫的示例代碼

    這篇文章主要介紹了如何使用proxy實現(xiàn)一個簡單完整的MVVM庫的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評論

威信县| 宝兴县| 塘沽区| 宜兰市| 莱芜市| 治县。| 喀喇沁旗| 繁昌县| 德惠市| 南郑县| 水富县| 绍兴县| 阿图什市| 马公市| 米脂县| 黄浦区| 汪清县| 阳原县| 肇东市| 千阳县| 华亭县| 清河县| 林口县| 徐闻县| 巴彦县| 望城县| 都兰县| 林州市| 江城| 南皮县| 吴川市| 颍上县| 彩票| 五河县| 巫溪县| 阿尔山市| 昭苏县| 青岛市| 蓬莱市| 新田县| 清河县|