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

JavaScript Event學習第七章 事件屬性

 更新時間:2010年02月07日 10:44:38   作者:  
為了理解Event屬性,我將在這里給出一些示例代碼。在這個范疇內(nèi)有非常嚴重的瀏覽器兼容性問題。
當我們想去讀一讀關(guān)于Event的一些資料時,常常會湮沒在大量的屬性里面,這些屬性其中的大多數(shù)不能良好的運行在大多數(shù)的瀏覽器。這里有event的兼容性列表。
我不打算給這些屬性列個表,因為那些情況實在是太讓人暈頭了,而且對你的學習也不會有一點點的幫助。在寫5段代碼前我先要問關(guān)于瀏覽器的5個問題。
1、event的類型(type)是什么?
2、哪一個HTML元素是event的目標呢?
3、哪些鍵在event發(fā)生時被按下了?
4、哪個鼠標鍵在Event發(fā)生時被按下了?
5、在Event發(fā)生時鼠標的位置在哪?
最后一個問題我在這里做了非常詳盡的解答。
請注意這些代碼我做了非常嚴謹?shù)膶ο髾z查。我首先創(chuàng)建跨瀏覽器的的對事件的訪問,然后在使用每一個屬性前都做了瀏覽器支持性的檢查。

1、event的類型(type)是什么?
這是一個跨瀏覽器的有標準答案的問題:使用type屬性就可以查看其屬性:

復(fù)制代碼 代碼如下:

function doSomething(e) {
if (!e) var e = window.event;
alert(e.type);
}



2、哪一個HTML元素是event的目標呢?
W3C/Netscape說:target。不對,微軟說,是srcElement。這兩個屬性都返回event發(fā)生時的HTML元素。
復(fù)制代碼 代碼如下:

function doSomething(e) {
var targ;
if (!e) var e = window.event;
if (e.target) targ = e.target;
else if (e.srcElement) targ = e.srcElement;
if (targ.nodeType == 3) // defeat Safari bug
targ = targ.parentNode;
}


最后兩行的代碼專門針對Safari的。如果event發(fā)生在一個包含文本(text)的元素上,這個文本節(jié)點(text node)而不是元素本身就成為了event的目標。因此我們要檢查如果目標的nodetype是3(文本節(jié)點)。如果是我們就把它移動到父節(jié)點上,HTML元素。
即使event被捕獲或者冒泡了(bubbles up),target/srcElement屬性也依然是最早發(fā)生event的元素。
其他的target
還有很多targeting的屬性。我在Event Order這篇文章里討論了currentTarget,在Mouse event這篇文章里討論了relatedTarget,fromElement和toElement。


3、哪些鍵在event發(fā)生時被按下了?
這個問題相對簡單一些。首先從keyCode屬性得到該鍵的代碼(a=65)。當你得到了鍵值以后,你可以通過String.fromCharCode()方法知道實際的鍵值,如果必要的話。
復(fù)制代碼 代碼如下:

function doSomething(e) {
var code;
if (!e) var e = window.event;
if (e.keyCode) code = e.keyCode;
else if (e.which) code = e.which;
var character = String.fromCharCode(code);
alert('Character was ' + character);
}


這里有一些地方可能會造成鍵盤事件比較難用。比如,kepress事件觸發(fā)的時間和使用者按下鍵的時間一樣長。然而,大多數(shù)瀏覽器里面keydown的觸發(fā)時間也和按下的時間一樣長。我不確定這是不是一個好的想法,但是就是那樣的。


4、哪個鼠標鍵在Event發(fā)生時被按下了?
這里有兩個屬性可以知道哪個鼠標鍵被按下了:which和button。請注意這些屬性通常不一定在click上起作用。為了保險的探測哪個鼠標鍵被按下,你最好使用mousedown和mouseup事件。
which是一個古老的Netscape屬性。鼠標左鍵的值是1,中鍵(滾輪)的值是2,右鍵的值是3。除了支持上比較薄弱以外沒有什么問題,事實上也經(jīng)常用來檢測鼠標按鍵。
現(xiàn)在button屬性能被很好的識別。W3C的標準值如下:
左鍵 0
中鍵 1
右鍵 2
微軟的標準值如下:
左鍵 1
中鍵 4
右鍵 2
毫無疑問的微軟的標準比W3C的好。0可以表示沒有鍵按下,其他都是不合理的。
另外,只有在微軟的模型中按鍵的值是可以合并使用的,比如5就代表“左鍵和中鍵”一起按下。不僅IE6不支持合并,w3c的的模型在理論上也是不能完成的:你永遠也不知道左鍵是不是被按下了。
所以在我看來w3c在定義button上有嚴重的失誤。

右擊
幸運的是,通常你想知道右鍵是否被點擊。因為W3C和微軟恰好在這個問題上給button的定義值是2,所以你依然可以檢測右擊。
復(fù)制代碼 代碼如下:

function doSomething(e) {
var rightclick;
if (!e) var e = window.event;
if (e.which) rightclick = (e.which == 3);
else if (e.button) rightclick = (e.button == 2);
alert('Rightclick: ' + rightclick); // true or false
}


需要注意的是,Macs通常只有一個鍵,Mozilla給Ctrl-Click的button的值定義為2,所以Ctrl-Click也會打開菜單。ICab 還不支持鼠標button屬性,所以你在Opera里面還不能檢測右擊。
5、在Event發(fā)生時鼠標的位置在哪?
鼠標位置這個問題相當?shù)膰谰?。雖然有不少于6對鼠標坐標的屬性,但是仍然沒有一個可靠的跨瀏覽器的方法能找到鼠標的坐標。
下面是這6組坐標:
1、clientX,clientY
2、layerX,layerY
3、offsetX,offsetY
4、pageX,pageY
5、screenX,screenY
6、x,y
我曾經(jīng)在這里解釋過pageX/Y和clientX/Y的問題。
screenX和screenY是唯一一對跨瀏覽器兼容的屬性。他們給出鼠標在整個電腦屏幕上的坐標。不幸的是,僅僅這個信息是遠遠不夠的:你永遠也不需要知道鼠標在屏幕的位置--好吧,或者你想在當前的鼠標位置放置一個新的窗口。
其他的三對屬性也不重要,看這里的描述。
正確的代碼
下面的代碼能夠正確的檢測鼠標的坐標
復(fù)制代碼 代碼如下:

function doSomething(e) {
var posx = 0;
var posy = 0;
if (!e) var e = window.event;
if (e.pageX || e.pageY) {
posx = e.pageX;
posy = e.pageY;
}
else if (e.clientX || e.clientY) {
posx = e.clientX + document.body.scrollLeft
+ document.documentElement.scrollLeft;
posy = e.clientY + document.body.scrollTop
+ document.documentElement.scrollTop;
}
// posx and posy contain the mouse position relative to the document
// Do something with this information
}


原文在這里:http://www.quirksmode.org/js/events_properties.html

大家多指教 我的twitter:@rehawk

相關(guān)文章

  • H5用戶注冊表單頁 注冊模態(tài)框!

    H5用戶注冊表單頁 注冊模態(tài)框!

    這篇文章主要為大家詳細介紹了H5用戶注冊表單頁的相關(guān)代碼,注冊模態(tài)框,如何設(shè)計用戶注冊表單頁,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • JSONP跨域的原理解析及其實現(xiàn)介紹

    JSONP跨域的原理解析及其實現(xiàn)介紹

    JSONP跨域GET請求是一個常用的解決方案,下面我們來看一下JSONP跨域是如何實現(xiàn)的,并且探討下JSONP跨域的原理
    2014-03-03
  • 學習JavaScript圖片預(yù)加載模塊

    學習JavaScript圖片預(yù)加載模塊

    這篇文章主要介紹了js實現(xiàn)圖片預(yù)加載的方法,內(nèi)容很詳細,帶領(lǐng)大家全面認識js圖片預(yù)加載模塊,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 基于Javascript實現(xiàn)彈出頁面效果

    基于Javascript實現(xiàn)彈出頁面效果

    彈出層效果是一個很實用的功能,很多網(wǎng)站都采用了這種方式實現(xiàn)登錄和注冊,下面小編通過本文給大家分享具體實現(xiàn)代碼,對js彈出頁面效果相關(guān)知識感興趣的朋友一起學習吧
    2016-01-01
  • JS實現(xiàn)點擊文本框改變背景顏色

    JS實現(xiàn)點擊文本框改變背景顏色

    這篇文章主要為大家詳細介紹了JS實現(xiàn)點擊文本框改變背景顏色,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 輸入密碼時檢測大寫是否鎖定的js代碼

    輸入密碼時檢測大寫是否鎖定的js代碼

    網(wǎng)站登錄為了更好的用戶體驗都會在輸入密碼的時候檢測是否開啟大寫。提醒用戶。
    2011-02-02
  • Webwork 實現(xiàn)文件上傳下載代碼詳解

    Webwork 實現(xiàn)文件上傳下載代碼詳解

    WebWork 當然也提供了很友好的攔截器來實現(xiàn)對文件的上傳,讓我們可以專注與業(yè)務(wù)邏輯的設(shè)計和實現(xiàn),在實現(xiàn)上傳和下載時順便關(guān)注了下框架上傳下載的實現(xiàn)
    2016-02-02
  • 詳解webpack 多入口配置

    詳解webpack 多入口配置

    本篇文章主要介紹了webpack 多入口配置 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 詳解JavaScript中的Map和WeakMap

    詳解JavaScript中的Map和WeakMap

    Map和WeakMap都是ES6中新增的數(shù)據(jù)結(jié)構(gòu),它們的主要區(qū)別在于鍵的作用域和鍵的類型,本文就通過代碼示例給大家詳細介紹了JavaScript鍵的作用域和類型,需要的朋友可以參考下
    2023-08-08
  • 前端實現(xiàn)Word在線預(yù)覽功能詳解

    前端實現(xiàn)Word在線預(yù)覽功能詳解

    這篇文章主要給大家介紹了關(guān)于前端實現(xiàn)Word在線預(yù)覽功能的相關(guān)資料,工作中經(jīng)常有時會遇到需要給用戶創(chuàng)建word文檔并實現(xiàn)word文檔在線預(yù)覽的需求,需要的朋友可以參考下
    2023-09-09

最新評論

平湖市| 本溪市| 张家界市| 兰西县| 江津市| 峡江县| 台山市| 合作市| 北流市| 铜山县| 罗源县| 沿河| 波密县| 屏山县| 墨竹工卡县| 莱州市| 清水河县| 舞阳县| 松潘县| 鲁甸县| 绵阳市| 黔南| 民权县| 涟源市| 顺义区| 乌鲁木齐市| 彭泽县| 城口县| 揭东县| 淮南市| 内江市| 灵璧县| 东台市| 临夏市| 竹北市| 哈巴河县| 井研县| 图们市| 神木县| 安达市| 晋宁县|