HTML5存儲(帶一個粗糙的打怪小游戲案例)

来源:https://www.cnblogs.com/chenyingying0/archive/2020/01/06/12156246.html
-Advertisement-
Play Games

本地存儲localStorage設置存儲內容setItem(key,value) localStorage.setItem('leo','23'); 更新存儲內容對象[key]=value對象.key=value localStorage.leo = 25; localStorage['leo'] ...


本地存儲localStorage
設置存儲內容setItem(key,value)

    localStorage.setItem('leo','23');

更新存儲內容
對象[key]=value
對象.key=value

    localStorage.leo = 25;
    localStorage['leo'] = 24;

獲取存儲內容getItem(key)

    console.log(localStorage.getItem('leo'))

刪除存儲內容removeItem(key)

    localStorage.removeItem('leo');

清空存儲內容clear()

    localStorage.clear();

獲取存儲內容長度

    console.log(localStorage.length);

sessionStorage

    sessionStorage.a = 10;
    console.log(sessionStorage);

localStorage與sessionStorage的區別
localStorage:
存儲會持久化
容量2-5MB


 

sessionStorage:
在網頁會話結束後失效
容量不一,部分瀏覽器不設限


 

Storage使用註意:
1、存儲容量超出限制,需要使用try catch捕獲異常
2、存儲類型限制:只能是字元串
3、sessionStorage失效機制:
刷新頁面不能使sessionStorage失效
相同URL不同標簽頁不能共用sessionStorage


 

滑鼠點擊掉血游戲案例:

<!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中使用
缺點:相容性問題


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 總結繼承 面向對象特性: 封裝, 繼承,多態 繼承, 類與類之間的關係, 面向對象的語言的繼承是為了多態服務的 js不是面向對象的語言, 但是可以模擬面向對象,模擬繼承,為了節省記憶體 繼承: 原型作用: 數據共用, 目的是: 為了節省記憶體空間, 原型作用: 繼承 目的是:為了節省記憶體空間 原型繼承: ...
  • 拷貝繼承:把一個對象中的屬性或者方法直接複製到另一個對象中 淺拷貝 function Person() { } Person.prototype.age = 10; Person.prototype.sex = "男"; Person.prototype.height = 100; Person.p ...
  • 註釋單行註釋:// 快捷鍵: CTRL + / 多行註釋: /* 內容 */ 快捷鍵: ctrl + shift + /變數申明變數var name;賦值name = 'peach';初始化變數var age=18;更新變數var age_age = 18; age_age=20; // 更新申明多... ...
  • 創建canvas <canvas id="myCanvas" class="canvas"> 您的瀏覽器不支持canvas </canvas> 基礎設置 <script type="text/javascript"> var canvas = document.getElementById('myC ...
  • JSONP Hijackin的中文意思是JSON劫持,而能產生JSON數據劫持的原因在於前端被跨站攻擊了。跨站=跨域,跨域從字面上理解的話,就是指超出了範圍、領域。繼續追問一下,那超出了什麼範圍?原來指的範圍有多大?理解跨站攻擊的基礎在於理解這個域有多大。為了更準確的理解JSON Hijackin攻 ...
  • web前端工程師是近幾年的新興職業,也是目前火爆而且高薪的職業。不同的公司也有不同的叫法,比如:網頁界面開發,網站設計等,要學好web前端開發,需要掌握什麼方法與技巧? 一、div和table 這個是最簡單的,也是最基礎的。要熟練掌握div、form table、ul li 、p、span、font ...
  • 一、文本的水平對齊方式 使用text align來設置文本的對齊方式;text align的取值:left(向左對齊)/center(水平居中對齊)/right(向右對齊)/justify(兩端對齊); text align只對應用此樣式的元素的非塊級子元素有效,對塊級子元素無效;對比使用margi ...
  • multipart/form-data 在使用包含文件上傳控制項的表單時,必須使用autocomplete="on" 自動補全功能novalidate 不驗證 <form enctype="multipart/form-data" novalidate autocomplete="on"></form ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...