本地存儲localStorage
設置存儲內容setItem(key,value)javascript
localStorage.setItem('leo','23');
更新存儲內容
對象[key]=value
對象.key=valuecss
localStorage.leo = 25;
localStorage['leo'] = 24;
獲取存儲內容getItem(key)html
console.log(localStorage.getItem('leo'))
刪除存儲內容removeItem(key)java
localStorage.removeItem('leo');
清空存儲內容clear()數據庫
localStorage.clear();
獲取存儲內容長度json
console.log(localStorage.length);
sessionStorage數組
sessionStorage.a = 10;
console.log(sessionStorage);
localStorage與sessionStorage的區別
localStorage:
存儲會持久化
容量2-5MB瀏覽器
sessionStorage:
在網頁會話結束後失效
容量不一,部分瀏覽器不設限session
Storage使用注意:
一、存儲容量超出限制,須要使用try catch捕獲異常
二、存儲類型限制:只能是字符串
三、sessionStorage失效機制:
刷新頁面不能使sessionStorage失效
相同URL不一樣標籤頁不能共享sessionStoragedom
鼠標點擊掉血遊戲案例:
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> *{margin: 0;padding: 0;list-style: none;} body{position: relative;height: 100%;} html{height: 100%;} .guai{position: absolute;left: 50%;top: 50%;margin: -75px 0 0 -100px;} .line{width: 400px;height: 20px;border:4px solid black;position: absolute;left: 50%;top: 20px;margin: 0 0 0 -204px;} .xie{width: 400px;height: 100%;background: red;transition: .3s;} </style> </head> <body> <div class='line'> <div class='xie'></div> </div> <img src="1.jpeg" class='guai'> <script type="text/javascript"> var num = 0,timer = null,max = 400, xieNode = document.querySelector('.xie'); if(localStorage.x){ max = localStorage.x; xieNode.style.width = max + 'px'; }; onclick = function(){ var r = Math.random() * 5 + 5; max -= r; localStorage.setItem('x',max); console.log(localStorage) xieNode.style.width = max + 'px'; clearInterval(timer); timer = setInterval(function(){ num++; if(num == 10){ clearInterval(timer); num = 0; document.body.style.left = 0; document.body.style.top = 0; return; }; document.body.style.left = Math.random() * -20 + 10 + 'px'; document.body.style.top = Math.random() * -20 + 10 + 'px'; },30) } </script> </body> </html>
一個帶過時機制的localStorage
<!doctype html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> 儲存數據: <input type="" name="" id='need'> 儲存數據的時間: <input type="" name="" id='timer'> <button id='btn'>保存</button> 數據展現: <span id='span'>暫無數據</span> <script type="text/javascript"> var nowTime = new Date().getMinutes(); if(nowTime >= localStorage.timer){ localStorage.clear(); } else{ if(localStorage.leo){ span.innerHTML = localStorage.leo; } } btn.onclick = function(){ localStorage.setItem('leo',need.value); localStorage.setItem('timer',new Date().getMinutes() + Number(timer.value)); span.innerHTML = localStorage.leo; }; </script> </body> </html>
HTML5 - 數據庫:indexedDB
建立數據庫indexedDB.open('隨便起個名字',版本號)
若是有這個數據就打開,沒有就建立
版本號只能往上走,不能夠降
var request = indexedDB.open('testDBLeo',6);
onsuccess 數據庫建立或打開成功
onerror 打開失敗 (版本號不能下降)
onupgradeneeded 版本升級時觸發的函數
// 數據庫建立成功 request.onsuccess = function(){ console.log('建立數據庫成功'); }; // 數據庫建立失敗 request.onerror = function(){ console.log('數據庫讀取失敗'); }; // 數據庫版本升級 request.onupgradeneeded = function(){ console.log('版本號升級了') };
createObjectStore 建立一個表
自動遞增的 - createObjectStore 表裏面遞增
{autoIncrement: true}
{keyPath:數據中的字段}
request.onupgradeneeded = function(){ var db = request.result; // 一個ObjectStore至關於一張表 // 指定表的主鍵自增 db.createObjectStore('test3',{autoIncrement: true}); };
設置主鍵爲id
db.createObjectStore('test3',{keyPath: 'id'}
unique true 惟一性 若是有多個一樣的的狀況下 就不寫入了
store.createIndex('test3','name',{unique:true});
transaction使用事務獲取表
readwrite 讀寫模式
readonly 只能讀不能寫
var transaction = db.transaction('test3','readwrite'); var store = transaction.objectStore('test3');
操做數據表
add 添加數據,添加 readonly 是報錯的
get 裏面放入key值就能夠的
getAll 能夠獲取全部的表中的數據 result 是以數組的形式表現
put 繼續添加數據
delete 刪除某一條數據 參數就是key值
clear 刪除全部的數據
onsuccess 若是指令成功了執行的回調函數
result 能夠看到相關的數據
var json = [{ "id":200, "name":"Modoy", "age":"15" },{ "id":201, "name":"Busy", "age":"21" },{ "id":202, "name":"Blue", "age":"23" }] // add 添加數據 store.add(json); // 讀取數據store.get()參數是主鍵的值 var requestNode = store.get(1); //獲取成功後的操做 requestNode.onsuccess = function(){ console.log(requestNode.result); for(var i=0;i<3;i++){ console.log('名字叫'+requestNode.result[i].name); console.log('年齡今年已經'+requestNode.result[i].age+'歲了'); } };
更新指定主鍵的數據
store.put({ "id":203, "name":"Sky", "age":"29" });
獲取全部數據
var requestNode = store.getAll();
刪除指定id的數據
store.delete(201);
遊標,此處表示主鍵<=202
var requestNode = store.openCursor(IDBKeyRange.upperBound(202)); requestNode.onsuccess = function(){ //獲取遊標所取得的值 var cursor = requestNode.result; if(cursor){ console.log(cursor.value); cursor.continue(); }; };
索引 惟一性
store.createIndex(表名稱,數據key值,{unique:true}); ---------- var index = store.index(表的名稱)get(key值的名稱).onsuccess = function(){ e.target.result 找到的數據的內容 }
遊標指定範圍:
IDBKeyRange.only//參數一是範圍
upperBound // 小於等於以前的 true 不包含本身的 false 包含本身的
lowerBound // 大於等於以前的 true 不包含本身的 false 包含本身的
bound 參數1 大於等於的 參數2 小於等於的 若是有參數 3 和 4 就是true 和 false
true 不包含本身的 false 包含本身的
參數3 對應着參數1 參數4 對應着參數2
設置遊標的direction:
next 順序查詢
nextunique 順序惟一查詢
prev 逆序查詢
prevunique 逆序惟一查詢
var requestNode = store.openCursor(IDBKeyRange.bound(200,202),'prev');
索引和遊標結合
//指定數據表 var index = store.index('test3'); //遊標指定範圍 var requestNode = index.openCursor(IDBKeyRange.upperBound(31)); requestNode.onsuccess = function(){ var cursor = requestNode.result; if(cursor){ //若是查詢的數據name爲Leo if(cursor.value.name == 'Leo'){ // 更新數據 cursor.update({ "id":209, "name":"Leoooo", "age":31 }); } console.log(cursor.value); cursor.continue(); } };
IndexedDB與Web Storage比較:優勢:IndexedDB存儲類型豐富條件搜索強大存儲容量更大能夠在Worker中使用缺點:兼容性問題