Web Storage分為兩類:
- sessionStorage:數據保存在session 對象中(臨時)
- localStorage:數據保存在本地硬件設備中(永久)
sessionStorage:
保存數據的兩種方法:
sessionStorage.setItem('key','val');
sessionStorage.key = 'val';
讀取數據的兩種方法:
sessionStorage.getItem('key');
var temp = sessionStorage.key;
清除數據的方法:
sessionStorage.removeItem('key')
注意:鍵名即'key'是不能重復的,鍵名頁也不能刪除。
示例:
sessionStorage.world='hello world';
sessionStorage.setItem('kitty','hello kitty');
在javascript中運行上述代碼,用瀏覽器打開該頁面后按F12呼出控制臺,選擇Resources標簽頁下的Session Storage選項,可以看到上述兩條數據已經被存入了:
當執行清除后:
sessionStorage.removeItem('kitty');
相應鍵名的數據被刪除:
現在sessionStorage中插入如下數據:
獲取session中的數據條數(sessionStorage.length),并在控制臺打印出來:
console.log(sessionStorage.length);
獲取指定索引下標對應的鍵名(sessionStorage.key(index)):
console.log(sessionStorage.key(1));
清除所有數據:
sessionStorage.clear(2881064151);
通過window對象對storage添加監聽事件:
window.addEventListener(‘storage’,function(event){ });
event的屬性值:
- event.key:storage中被修改的鍵值
- event.oldValue:被修改前的值
- event.newValue:被修改后的值
- event.url:storage 中值得頁面URL地址
localStorage與sessionStorage使用方法一致,只需要變下名字
區別在于localSorage是永久保存,而sessionStorage會在瀏覽器關閉時自動清除。sessionStorage可以用來暫時保存登陸后的用戶名等信息。
實用的本地數據庫:
html5?內置了兩種數據庫一種是SQLLite 可以通過SQL語言來訪問的文件型SQL數據庫,另外一種是indexedDB的noSQL類型的數據庫。
這里主要介紹下SQLLite
創建訪問數據庫對象:
var db=openDatabase("gameDB","1.0","游戲數據庫",1024*1024);
參數:1.數據庫名,如果存在就打開,如果不存在就創建一個 2.版本號,默認1.0 3.數據庫描述 4.數據庫大小,單位字節,1024*1024即1M,一般1M到2M就夠用了。
訪問數據庫:
db.transaction(function(tx){
tx.executeSql("SQL語句",[],function(tx,rs){},function(tx,err){});
});
參數:1.SQL語句 2.SQL參數組 3.執行SQL成功時的回調函數 4.執行SQL失敗時的回調函數。
其中執行成功回調函數中的rs代表結果集,其中的rows屬性保存了每條數據。
用之前做的游戲舉個實例:
var username=$("username").value;
var db=openDatabase("gameDB","1.0","游戲數據庫",1024*1024);
db.transaction(function(tx){
tx.executeSql("create table t_defenders (username varchar(20),score int)",[],function(tx,rs){},function(tx,err){});
});
db.transaction(function(tx){
tx.executeSql("insert into t_defenders values(?,?)",[username,killNum*100],function(tx,rs){},function(ts,err){});
});
作用為當游戲結束時,在本地數據庫中創建名為t_defenders的表,之后獲取名字與得分存入表中:
復制代碼
var db=openDatabase("gameDB","1.0","游戲數據庫",1024*1024);
db.transaction(function(tx){
tx.executeSql("select * from t_defenders order by score desc limit 5",[],function(tx,rs){
var row = rs.rows;
$("score-table").innerHTML = "";
var str = "
名次玩家姓名分數";for(var i = 0;i
str += "
"+(i+1)+""+row.item(i).username+""+row.item(i).score+"";}
$("score-table").innerHTML += str;
},function(ts,err){});