JavaScript高級程序設計49.pdf

HTML5事件瀏覽器

contextmenu事件緩存

contextmenu事件是冒泡的,能夠將事件處理程序指定到document,這個事件的目標是用戶操做的元素,在兼容DOM的瀏覽器中使用event.preventDefalut()取消默認行爲,在IE中將event.returnValue的值設置爲false取消默認行爲ide

contextmenu事件屬於鼠標事件,其事件對象中包含與光標位置有關的全部屬性函數

beforeunload事件對象

這個事件在頁面卸載以前觸發,讓開發人員在頁面卸載前阻止這一操做,彈出一個提示框,告知用戶頁面將被卸載,詢問用戶是否要關閉頁面事件

爲了顯示彈出的對話框,必須將event.returnValue的值設置爲要顯示給用戶的字符串(IE和Firefox),同時做爲函數的值返回(Safari和Chrome)ip

EventUtil.addHandler(window,"beforeunload",function(event){內存

        event=EventUtil.getEvent(event);資源

        var message="I'm really going to miss you if you go.";開發

        event.returnValue=message;

        return message;

    });

Opera11及以前版本不支持beforeunload事件

DOMContentLoaded事件

window的load事件會在頁面中的一切都加載完畢時觸發,DOMContentLoaded事件則是在造成完整的DOM樹以後觸發(不理會圖像、Javascript文件、CSS文件或其餘資源)

EventUtil.addHandler(document,"DOMContentLoaded",function(event){

        alert("Content loaded");

      });

DOMContentLoaded事件早於load事件觸發

readystatechange事件

IE爲某些DOM文檔部分提供了readystatechange事件,支持這個事件的每一個對象都有一個readyState屬性,包含5個值的其中一個

uninitialized(未初始化):對象存在但未初始化

loading(正在加載):對象正在加載數據

loaded(加載完畢):對象加載數據完成

interactive(交互):能夠操做對象,但尚未徹底加載

complete(加載完畢):完成

並不是全部對象都會經歷readyState這幾個階段,readyState屬性不老是連續的

interactive狀態與load事件的前後順序不可肯定,而且interactive狀態與完成階段的順序也不必定肯定,在檢測時須要同時檢測交互和完成階段

if(document.readyState=="interactive"||document.readyState=="complete"){

            ...

        }

支持readystatechange事件的瀏覽器有IE、Firefox4+、Opera

另外<script>(IE和Opera)<link>(僅IE中)也會觸發readystatechange事件,一樣會面臨狀態屬性順序不同的這個問題

if(target.readyState=="loaded"||target.readyState=="complete"){

        EventUtil.removeHandler(target,"readystatechange",argument.callee);

        alert("Script Loaded");

      }

以後移除事件,防止觸發2次

pageshow和pagehide事件

Firefox和Opera有一個「往返緩存」,緩存裏保存着頁面的數據,用戶在使用瀏覽器的「前進」和「後退」時能加快轉換速度,在bfcache中讀取的數據不會觸發load事件

在從新加載的頁面中,pageshow會在load事件觸發後觸發;面對bfcache中的頁面,pageshow會在頁面徹底恢復的那一刻觸發。雖然這個事件的目標是document,但必須將事件處理程序添加到window

除了一般的屬性,pageshow事件的event對象還包含一個名爲persisted的布爾值,若是頁面保存在bfcache中,這個值爲ture,不然爲false

pagehide事件則是在瀏覽器卸載頁面時觸發,並且在unload事件前觸發,與pageshow事件同樣,其在document上面觸發,但事件處理程序要添加到window對象上

pagehide事件也有一個persisted屬性,若是頁面卸載後保存在內存中,值爲true,不然false

支持pageshow和pagehide事件的瀏覽器有Firefox、Safari5+、Chrome和Opera,IE不支持它們

相關文章
相關標籤/搜索