JS—HTML5事件

DOM規(guī)范沒有涵蓋所有瀏覽器支持的所有事件。HTML5詳盡列出了瀏覽器應(yīng)該支持的所有事件枷邪。
其中得到瀏覽器完善支持的事件:


  • contextmenu事件
    通過單擊鼠標(biāo)右鍵诺凡,可以調(diào)出上下文菜單。
    開發(fā)人員面臨的主要問題是:如何確定應(yīng)該顯示上下文菜單尔觉,以及如何屏蔽與該操作關(guān)聯(lián)的默認(rèn)上下文菜單芥吟。
    解決辦法:contextmenu這個(gè)事件,用以表示何時(shí)應(yīng)該顯示上下文菜單钉稍,一遍開發(fā)人員取消默認(rèn)的上下文菜單棺耍,而提供自定義的菜單。
    EventUtil.addHandler(window,"load",function(event){
    var div=document.getElementById("mydiv");
    EventUtil.addHandler(div,"contextmenu",function(event){
    event=EventUtil.getEvent(event);
    EventUtil.preventDefault(event);//取消默認(rèn)上下文菜單

                  var menu=document.getElementById("mymenu");
                  menu.style.left=event.clientX+'px';
                  menu.style.top=event.clientY+'px';
                  menu.style.display="block";
              });
              EventUtil.addHandler(document,'click',function(event){
                  document.getElementById("mymenu").style.display='none'
              });
          });
    

【解釋】

  • 添加load事件,當(dāng)頁面加載完畢后左敌,執(zhí)行該事件矫限。
  • 當(dāng)右鍵單擊時(shí),觸發(fā)contextmenu事件取董,
  • 由于該事件為鼠標(biāo)事件无宿,所以可以獲得鼠標(biāo)的位置信息。
  • 添加click事件孽鸡,當(dāng)鼠標(biāo)單擊其他地方時(shí),隱藏該菜單豆胸。
  • 注意該事件冒泡
  • beforeunload事件
    為了讓開發(fā)人員有可能在頁面卸載之前阻止這一操作巷疼。這個(gè)事件會(huì)在瀏覽器卸載頁面之前觸發(fā)(包括跳轉(zhuǎn)頁面以及刷新頁面),可以通過它來取消卸載并繼續(xù)使用原有頁面估盘。
    EventUtil.addHandler(window,'beforeunload',function(event){
    event=EventUtil.getEvent(event);
    var message="im really going to miss you if you go.";
    event.returnValue=message;
    return message;
    })
    【困惑】
  • event.returnValue不是IE的事件對(duì)象中用于取消默認(rèn)行為的屬性么?
  • 這里需要將返回的確認(rèn)信息賦給這個(gè)屬性擅编。
  • 奇怪的是燥透,當(dāng)我不寫return message時(shí),完全沒有問題肢藐,在最新版的各瀏覽器內(nèi)吱韭。
  • 書上說,event.returnValue=message; 這樣寫是對(duì)ie與火狐而言痘煤,return message這樣寫是對(duì)webkit內(nèi)核而言猿规。
  • DOMContentLoaded事件
    與window的load事件相比,該事件會(huì)在頁面中的一切都加載完畢時(shí)觸發(fā)蘸拔,但這個(gè)過程可能因?yàn)橐虞d的外部資源過多而頗費(fèi)周折环葵。
    DOMContentLoaded事件這個(gè)事件則在形成完整的dom樹之后就觸發(fā)。不理會(huì)圖像张遭,js菊卷,css文件。
    EventUtil.addHandler(document,'DOMContentLoaded',function(event){
    alert('content loaded')
    })
    IE9以前版本的IE瀏覽器不支持這個(gè)事件的烁,書中建議在頁面加載期間設(shè)置一個(gè)時(shí)間為0毫秒的超時(shí)調(diào)用渴庆。
    setTimeout(function(){
    //添加事件處理程序
    },0)
  • readystatechange事件
    這個(gè)事件的目的是提供與文檔或元素的加載狀態(tài)有關(guān)的信息。
    支持這個(gè)事件的每個(gè)對(duì)象都有一個(gè)readyState屬性襟雷,可能包括下列五個(gè)值中的一個(gè)。
  • uninitialized:對(duì)象存在咧虎,但尚未初始化
  • loading:對(duì)象正在加載數(shù)據(jù)
  • loaded:對(duì)象加載數(shù)據(jù)完成
  • interactive:可以操作對(duì)象了砰诵,但還沒有完全加載完成捌显。
  • complete 對(duì)象已經(jīng)加載完畢
    • 雖然這些狀態(tài)看起來很直觀,很有順序理肺,但是善镰,并非所有對(duì)象都會(huì)經(jīng)歷這四個(gè)階段炫欺。
      對(duì)一般的dom對(duì)象,在包含較多外部資源時(shí)树姨,交互階段可能早于完成階段娃弓,但是當(dāng)頁面中包含較少的外部資源時(shí)岛宦,完成階段先于交互階段的可能性更大。
      EventUtil.addHandler(document,'readystatechange',function(event){
      if(document.readyState=='interactive'||document.readyState=='complete'){
      alert('content load');
      EventUtil.removeHandler(document,'readystatechange',arguments.callee);
      }
      })
      【解釋】
      document對(duì)象挽霉,只要可以操作該對(duì)象变汪,我們便可以使用裙盾。所以還要滿足后兩個(gè)狀態(tài)的任意一個(gè)就可以他嫡。
      為了避免該dom對(duì)象在滿足條件后重復(fù)執(zhí)行事件內(nèi)容钢属,可以在執(zhí)行一次后淆党,便移除該對(duì)象讶凉。
    • 通過這種方法,也可以判斷荷憋,動(dòng)態(tài)添加的外部文件js與css文件是否已經(jīng)加載完成台谊。
      不過由于外部文件較大譬挚,有時(shí)候會(huì)停在loaded階段减宣,而永遠(yuǎn)不會(huì)完成漆腌,有時(shí)候又會(huì)跳過loaded階段而直接完成。
      EventUtil.addHandler(window,'load',function(){
      var script=document.createElement('script');
      EventUtil.addHandler(script,'readystatechange',function(event){
      event=EventUtil.getEvent(event);
      var target=EventUtil.getTarget(event);
      if(target.readyState=='loaded'||target.readyState=='complete'){
      alert('content load');
      EventUtil.removeHandler(target,'readystatechange',arguments.callee);
      }
      });
      script.src='../test.js';
      document.body.appendChild(script);
      })
      測(cè)試后塑径,不知道為什么填具,沒有顯示 alert('content load');,求解釋劳景。
  • pageshow和pagehide事件
    在瀏覽器導(dǎo)航欄上,會(huì)有一對(duì)前進(jìn)與后退的按鈕闷串,瀏覽器支持一個(gè)名叫往返緩存的特性烹吵。當(dāng)我們打開一個(gè)網(wǎng)頁,通過這個(gè)網(wǎng)頁具被,又打開一個(gè)網(wǎng)頁只损,此時(shí)可以按住當(dāng)前網(wǎng)頁瀏覽器的后退按鈕跃惫,在不重新加載的條件下艾栋,回到上一個(gè)頁面蝗砾,也就是該頁面已經(jīng)存到這個(gè)往返緩存中去啦。
    這兩個(gè)事件闲勺,可以更好的理解往返緩存菜循。
  • pageshow事件在頁面顯示時(shí)觸發(fā)申尤,會(huì)在load事件觸發(fā)后觸發(fā)昧穿,無論該頁面是否來自往返緩存,都會(huì)觸發(fā)這個(gè)事件胶逢。當(dāng)來自往返緩存時(shí)寥枝,自然就不會(huì)觸發(fā)load事件啦囊拜。該事件對(duì)象有一個(gè)屬性,persisted南誊,該屬性是一個(gè)布爾值,表示該頁面是否保存在了往返緩存中霉赡。
  • pagehide事件幔托,在瀏覽器卸載頁面之前觸發(fā)重挑,而且在unload事件之前觸發(fā)。如果頁面在卸載之后保存在了往返緩存中刺覆,那么persisted的值會(huì)被設(shè)為true史煎。所以第一次觸發(fā)pageshow事件時(shí)篇梭,該屬性的值一定為false。
    【注意】這兩個(gè)事件的處理程序必須添加到window對(duì)象上充蓝。
  • haschange事件
    方便程序員知道在URL列表發(fā)生變化時(shí)喉磁,觸發(fā)這個(gè)事件协怒,
    這個(gè)事件的處理程序應(yīng)該添加到window對(duì)象上。
    之所以新增這個(gè)事件仑撞,是因?yàn)樵赼jax應(yīng)用中隧哮,開發(fā)人員經(jīng)常利用URL參數(shù)列表來保存或?qū)Ш絠信息座舍。
    該事件對(duì)象曲秉,包含兩個(gè)額外的屬性 oldURL與newURL疲牵,分別保存變換前后的url榆鼠。

并不是所有的瀏覽器都支持這些

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末识啦,一起剝皮案震驚了整個(gè)濱河市责静,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖腰鬼,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件熄赡,死亡現(xiàn)場(chǎng)離奇詭異齿税,居然都是意外死亡凌箕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芜壁,“玉大人慧妄,你說我怎么就攤上這事】呃叮” “怎么了窖铡?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長口芍。 經(jīng)常有香客問我雇卷,道長关划,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任裤翩,我火速辦了婚禮,結(jié)果婚禮上调榄,老公的妹妹穿的比我還像新娘踊赠。我一直安慰自己,他們只是感情好每庆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布筐带。 她就那樣靜靜地躺著,像睡著了一般缤灵。 火紅的嫁衣襯著肌膚如雪伦籍。 梳的紋絲不亂的頭發(fā)上腮出,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天帖鸦,我揣著相機(jī)與錄音,去河邊找鬼利诺。 笑死富蓄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的慢逾。 我是一名探鬼主播立倍,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼侣滩!你這毒婦竟也來了口注?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤君珠,失蹤者是張志新(化名)和其女友劉穎寝志,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡材部,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年毫缆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乐导。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苦丁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出物臂,到底是詐尸還是另有隱情旺拉,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布棵磷,位于F島的核電站蛾狗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏仪媒。R本人自食惡果不足惜沉桌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望规丽。 院中可真熱鬧蒲牧,春花似錦、人聲如沸赌莺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽艘狭。三九已至,卻和暖如春翠订,著一層夾襖步出監(jiān)牢的瞬間巢音,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國打工尽超, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留官撼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓似谁,卻偏偏與公主長得像傲绣,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子巩踏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容