## 第三節:事件
`Storage`接口儲存的數據發生變化時,會觸發 storage 事件,可以指定這個事件的監聽函數。
~~~
window.addEventListener('storage', onStorageChange);
~~~
監聽函數接受一個`event`實例對象作為參數。這個實例對象繼承了`StorageEvent`接口,有幾個特有的屬性,都是只讀屬性。
* `StorageEvent.key`:字符串,表示發生變動的鍵名。如果 storage 事件是由`clear()`方法引起,該屬性返回`null`。
* `StorageEvent.newValue`:字符串,表示新的鍵值。如果 storage 事件是由`clear()`方法或刪除該鍵值對引發的,該屬性返回`null`。
* `StorageEvent.oldValue`:字符串,表示舊的鍵值。如果該鍵值對是新增的,該屬性返回`null`。
* `StorageEvent.storageArea`:對象,返回鍵值對所在的整個對象。也說是說,可以從這個屬性上面拿到當前域名儲存的所有鍵值對。
* `StorageEvent.url`:字符串,表示原始觸發 storage 事件的那個網頁的網址。
下面是`StorageEvent.key`屬性的例子。
~~~
function onStorageChange(e) {
console.log(e.key);
}
window.addEventListener('storage', onStorageChange);
~~~
> 注意,該事件有一個很特別的地方,就是它不在導致數據變化的當前頁面觸發,而是在同一個域名的其他窗口觸發。也就是說,如果瀏覽器只打開一個窗口,可能觀察不到這個事件。比如同時打開多個窗口,當其中的一個窗口導致儲存的數據發生改變時,只有在其他窗口才能觀察到監聽函數的執行。可以通過這種機制,實現多個窗口之間的通信。
- 第一章:音視頻
- 第一節:概述
- 第二節:媒體元素
- 第三節:視頻元素
- 第四節:音頻元素
- 第四節:事件
- 第二章:高德地圖
- 第三章:Storage 接口
- 第一節:概述
- 第二節:屬性和方法
- 第三節:事件
- 第四章:IndexedDB
- 第一節:概述
- 第二節:基本概念
- 第三節:indexedDB 對象
- 第四節:IDBRequest 對象
- 第五節:IDBDatabase 對象
- 第六節:IDBObjectStore 對象
- 第七節:IDBTransaction 對象
- 第八節:IDBIndex 對象
- 第九節:IDBCursor 對象
- 第十節:IDBKeyRange 對象
- 第十一節:操作流程
- 第五章:Canvas
- 第一節:概述
- 第二節:繪制圖像
- 第一課時:路徑
- 第二課時:線型
- 第三課時:矩形
- 第四課時:弧線
- 第五課時:文本
- 第六課時:漸變色和圖像填充
- 第七課時:陰影
- 第三節:圖像處理
- 第一課時:寫入圖像
- 第二課時:像素讀寫
- 第三課時:保存和恢復
- 第四課時:畫布
- 第五課時:圖像變換
- 第四節:元素方法
- 第一課時:toDataURL()
- 第二課時:toBlob()
- 第五節:使用實例
- 第一課時:動畫效果
- 第二課時:像素處理