H5的本地存储之IndexedDB

这次给大家带来H5的本地存储之IndexedDB,使用H5本地存储IndexedDB的注意事项有哪些,下面就是实战案例,一起来看一下。

IndexedDB 是一种低级API,用于客户端存储大量结构化数据(包括, 文件/ blobs)。该API使用索引来实现对该数据的高性能搜索。

最近有一项业务需求,就是可以离线存储数据,等到有网络信号的时候可以上传表单和图片。所以研究了一下HTML5的IndexedDB。

对于只存储某些字段的需求来说,可以使用Local Storage和 Session Storage来完成。但是一旦存储大量的数据,Local Storage和 Session Storage就远远不能满足需求了。这时,IndexedDB的强大之处就会体现出来了。

1、创建或者打开数据库

/* 对不同浏览器的indexedDB进行兼容 */const indexeddb = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.msIndexedDB;/* 创建或连接数据库 */const request = indexeddb.open(name, version);  // name:数据库名,version:数据库版本号

登录后复制

因为indexedDB在不同的浏览器上有兼容性,所以我们需要些一个兼容函数来兼容indexedDB。

2、连接到数据库的回调函数

request.addEventListener('success', function(event){     // 打开或创建数据库成功}, false);request.addEventListener('error', function(event){     // 打开或创建数据库失败}, false);request.addEventListener('upgradeneeded', function(event){     // 更新数据库时执行}, false);

登录后复制

在连接到数据库后,request会监听三种状态:

success:打开或创建数据库成功

error:打开或创建数据库失败

upgradeneeded:更新数据库

upgradeneeded状态是在indexedDB创建新的数据库时和indexeddb.open(name, version) version(数据库版本号)发生变化时才能监听到此状态。当版本号不发生变化时,不会触发此状态。数据库的ObjectStore的创建、删除等都是在这个监听事件下执行的。

3、创建、删除ObjectStore

在indexedDB中,ObjectStore类似于数据库的表。

request.addEventListener('upgradeneeded', function(event){     // 创建数据库实例    const db = event.target.result;    // 关闭数据库    db.close();    // 判断是否有ObjectStore    db.objectStoreNames.contains(objectStoreName);    // 删除ObjectStore    db.deleteObjectStore(objectStoreName);}, false);

登录后复制

可以用如下方法创建一个ObjectStore

request.addEventListener('upgradeneeded', function(event){     // 创建数据库实例    const db = event.target.result;    // 判断是否有ObjectStore    if(!db.objectStoreNames.contains(objectStoreName)){        const store = db.createObjectStore(objectStoreName, {            keyPath: keyPath  // keyPath 作为ObjectStore的搜索关键字        });        // 为ObjectStore创造索引        store.createIndex(name,    // 索引                          index,   // 键值                          {                              unique: unique  // 索引是否唯一                          });    }}, false);

登录后复制

4、数据的增删改查

request.addEventListener('success', function(event){     // 创建数据库实例    const db = event.target.result;    // 查找一个ObjectStore    db.transaction(objectStoreName, wa);    // wa为'readwrite'时,数据可以读写     // wa为'readonly'时,数据只读    const store = transaction.objectStore(objectStoreName);}, false);

登录后复制

数据库的增删改查:

// 添加数据,当关键字存在时数据不会添加store.add(obj);// 更新数据,当关键字存在时覆盖数据,不存在时会添加数据store.put(obj);// 删除数据,删除指定的关键字对应的数据store.delete(value);// 清除ObjectStorestore.clear();// 查找数据,根据关键字查找指定的数据const g = store.get(value);g.addEventListener('success', function(event){    // 异步查找后的回调函数}, false);

登录后复制

按索引查找数据

const index = store.index(indexName);const cursor = index.openCursor(range);cursor.addEventListener('success', function(event){    const result = event.target.result;    if(result){        result.value       // 数据        result.continue(); // 迭代,游标下移    }}, false);

登录后复制

按索引的范围查找数据

const index = store.index(indexName);const cursor = index.openCursor(range);/** * range为null时,查找所有数据 * range为指定值时,查找索引满足该条件的对应的数据 * range为IDBKeyRange对象时,根据条件查找满足条件的指定范围的数据 */// 大于或大于等于 range = IDBKeyRange.lowerBound(value, true)   // (value, +∞),>  valuerange = IDBKeyRange.lowerBound(value, false)  // [value, +∞),>= value// 小于或小于等于,isOpen:true,开区间;false,闭区间range = IDBKeyRange.upperBound(value, isOpen)// 大于或大于等于value1,小于或小于等于value2IDBKeyRange.bound(value1, value2, isOpen1, isOpen2)

登录后复制

最后,自己封装了一个indexedDB的库,可以参考一下:duan602728596/IndexedDB

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

H5文件异步上传

datalist输入框与后台数据库数据的动态匹配

以上就是H5的本地存储之IndexedDB的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2909176.html

(0)
上一篇 2025年3月11日 03:55:46
下一篇 2025年3月11日 03:55:55

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • H5文件异步上传

    这次给大家带来H5文件异步上传,H5文件异步上传的注意事项有哪些,下面就是实战案例,一起来看一下。 1 简介 开发文件上传功能从来不是一件愉快的事,异步上传更是如此,使用过iframe和Flash的上传方案,也都感觉十分的别扭。本文简要简绍…

    编程技术 2025年3月11日
    000
  • 常用的HTML5列表标签

    这次给大家带来常用的HTML5列表标签,使用用HTML5列表标签的注意事项有哪些,下面就是实战案例,一起来看一下。  一、列表标签作用 作用:给一堆数据添加列表语义,也就是告诉搜索引擎告诉浏览器这一堆数据是一个整体 二、列表标签分类: 1、…

    编程技术 2025年3月11日
    200
  • 如何设置H5的表单验证失败提示语

    这次给大家带来如何设置H5的表单验证失败提示语,设置H5的表单验证失败提示语注意事项有哪些,下面就是实战案例,一起来看一下。 前言 前端的童鞋在写页面时, 都不可避免的总会踩到 表单验证 这个坑. 这时候, 我们就要跪了, 因为要写一堆 j…

    2025年3月11日
    200
  • h5实现获取用户地理定位

    这次给大家带来h5实现获取用户地理定位,h5获取用户地理定位的注意事项有哪些,下面就是实战案例,一起来看一下。 最近做的一个项目中有一个获取周围商户的功能,需要用到地理定位系统, 于是便想到了用 h5 的地理定位,查阅了下资料后,简单封装了…

    2025年3月11日
    200
  • H5的canvas实现贪吃蛇小游戏

    这次给大家带来H5的canvas实现贪吃蛇小游戏,H5的canvas实现贪吃蛇小游戏注意事项有哪些,下面就是实战案例,一起来看一下。 本文介绍了H5 canvas实现贪吃蛇小游戏,分享给大家,具体如下: 实现效果如下 实现思路: ps:这个…

    2025年3月11日
    200
  • Canvas图片跨域会遇到的问题及解决方法总结

    本篇文章给大家带来的内容是关于canvas图片跨域会遇到的问题及解决方法总结,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 尽管不通过 CORS 就可以在 Canvas 画布中使用图片,但是这会污染画布。一旦画布被污染,你…

    编程技术 2025年3月11日
    200
  • 使用html5可以干什么?Html5的优势和劣势(总结)

    本章给大家介绍使用html5可以干什么?html5的优势和劣势(总结),让大家可以了解html5是什么,有什么用,html5的优势和劣势是什么。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一、html5可以干什么? 在介…

    编程技术 2025年3月11日
    200
  • html5使用canva实现验证码效果(代码实例)

    通常我们在登录界面上都可以看到验证码,验证码的作用是检测是不是人在操作,防止机器等非人操作,防止数据库被轻而易举的攻破。一般情况下验证码都是用php和java等后端语言编写;其实,验证码也可以用前端技术实现:用canva或者svg绘制验证码…

    2025年3月11日
    200
  • html5 canvas常用属性方法(介绍)

    本章给大家带来html5 canvas常用属性方法(介绍),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 首先引入标签就不必说了。 其次就是得到canvas的2d环境了( var ctx = canvasDom.getCo…

    编程技术 2025年3月11日
    200
  • html5利用canvas实现图片转素描效果

    本章给大家介绍html5如何利用canvas实现图片转素描效果。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 素描滤镜原理:最基础的算法就是:1、去色;(去色公式:gray = 0.3 red + 0.59 green …

    2025年3月11日
    200

发表回复

登录后才能评论