javascript中本地储存、离线缓存、地理定位、网络状态

2023-05-16

本地储存:

实际开发中某些内容是不需要放到服务器中,而是放到了浏览器中,需要的时候可以快速的访问,甚至页面刷新也可能不会丢失数据,容量较大;这里介绍两种数据存储方式:sessionStorage约5M大小、localStorage约20M大小。其缺点是只能储存字符串,因此要使用JSON.stringify()编译后储存。

1.window.sessionStrage:关闭浏览器窗口为一个生命周期,在同一个页面下任何地方可以访问此数据,以键值对的方式存储数据。sessionStorage.setItem(key,value)存储数据;sessionStorage.getItem(key)获取某个键的值;sessionStorage.removeItem(key)移除某个键和值;sessionStorage.clear()清空所有的键值对,如:

	<!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <input type="text" placeholder='输入key'>
        <input type="text" placeholder='输入value'>
        <input type="button" value='储存'>
        <input type="button" value='删除'>
        <input type="button" value='清空'>
        <p></p>
    </body>
    <script>
        var inputs = document.querySelectorAll('input');
        var p = document.querySelector('p');
    
        function getvalue() {
            p.innerHTML = sessionStorage.getItem(inputs[0].value);
        };
    
        inputs[2].addEventListener('click', function() {
            sessionStorage.setItem(inputs[0].value, inputs[1].value);
            getvalue();
        });
        inputs[3].addEventListener('click', function() {
            sessionStorage.removeItem(inputs[0].value);
        });
        inputs[4].addEventListener('click', function() {
            sessionStorage.clear();
        });
    </script>
    </html>

2.window.localStorage:生命周期永久(除非手动删除),可以在多个页面使用(同一浏览器下),以键值对形式储存,localStorage.setItem(key,value)存储数据;localStorage.getItem(key)获取某个键的值;localStorage.removeItem(key)移除某个键和值;localStorage.clear()清空所有的键值对,如:

	<!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <input type="text" placeholder='输入key'>
        <input type="text" placeholder='输入value'>
        <input type="button" value='储存'>
        <input type="button" value='删除'>
        <input type="button" value='清空'>
        <p></p>
    </body>
    <script>
        var inputs = document.querySelectorAll('input');
        var p = document.querySelector('p');
    
        function getvalue() {
            p.innerHTML = localStorage.getItem(inputs[0].value);
        };
    
        inputs[2].addEventListener('click', function() {
            localStorage.setItem(inputs[0].value, inputs[1].value);
            getvalue();
        });
        inputs[3].addEventListener('click', function() {
            localStorage.removeItem(inputs[0].value);
        });
        inputs[4].addEventListener('click', function() {
            localStorage.clear();
        });
    </script>
    </html>

离线缓存:

在html5中可以构建一个离线应用,其方法是创建一个cache manifest文件即可。其作用是将需要无网络情况加载的资源缓存下来供离线使用,同时提升访问速度来增加用户体验,减少请求提高性能。

缓存清单:一个以.appcache为后缀名的文件,用来配置缓存资源的,其文件格式如下:

1.顶行输入: CACHE MANIFEST

2.CACHE: 此命令输入后换行配置需要缓存的静态资源,如图片,代码文件等,此命令可以省略,但是需要将资源写在CACHE MANIFEST,同时可以指定多个CACHE。

3.NETWORK: 此命令输入后换行配置需要在线访问的资源。

4.FALLBACK: 此命令输入后换行配置当缓存的文件找不到时备用的资源。

	CACHE MANIFEST
    
    #下面是配置需要缓存的资源:
    CACHE:
    ./images/1.jpg
    ./images/3.jpg
    ./images/4.jpg
    ./images/5.jpg
    
    #下面是配置需要网络才可以加载的资源:
    NETWORK:
    ./images/1.jpg
    ./images/3.jpg
    
    #下面是当资源请求失败时需要替换的资源,前面是原资源 空格 需要替换的资源
    FALLBACK:
    ./images/1.PNG ./images/2.PNG

引入appcache文件:将appcache文件通过html标签配置到文件:

	<html  manifest="appcache文件的URL"></html>

调试是否配置成功:chrome 可以通过chrome://appcache-internals/工具和离线(offline)模式来调试管理应用缓存;在appache文件中#表示注释,当appache文件内容发生改变或手动清除时,才会重新缓存。

geolocation地理定位:

在html5中增加了获取地理定位的API,即基于位置的服务(Location Base Service),由于国内政策的影响,geolocation在使用的过程中会发生网络阻塞,这个是无法避免的;

geolocation是navigator导航的一个属性,若想要获取定位,那么就得通过navigator调用geolocation属性,geolocation属性下面有两个方法:getCurrentPosition()一次获取当前定位信息、watchPositionget(callback,callback)重复获取定位信息;

这两个方法都可以传相同的三个参数,前两个是回调函数作为参数,第一个回调函数表示获取定位信息成功,第二个回调函数表示获取地理位置失败,第三个参数是一个可选的对象{timeout:10000,enableHighAccuracy:false,maximumAge:0},timeout设置请求超时时间,enableHighAccuracy浏览器获取高精度的位置,maximumAge在重复获取地理位置是允许多久重新获取一次,一般情况下都是不用考虑的。

注意:使用 watchPosition,浏览器多次调用请求成功的回调函数以便传递最新的位置。该函数返回一个watchID值,使用navigator.geolocation.clearWatch(watchId值)可以清除此次回调,使用不带参数的navigator.geolocation.clearWatch()清除所有watchPosition回调

	<script>
            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(function(position) {
                    // 获取定位成功后执行的回调函数:参数position为定位信息对象,其属性coords为坐标,coords有两个属性用来获取经纬度:
                    var latitude = position.coords.latitude; //维度
                    var longitude = position.coords.longitude; //经度
                    var accuracy = position.coords.accuracy; //精确度
                    var altitude = position.coords.altitude; //高度
                    var altitudeAccuracy = position.coords.altitudeAccuracy; //高度的精确度
                  	var heading = position.coords.heading; //相对于正北方运动的方向
                  	var speed = position.coords.speed; //运动的速度
                  
                    // 可以在下面调用定位运营商API,即下一节内容:
    
                }, function(err) {
                    // 获取定位失败后执行的回调函数:
                    switch (err.code) {
                        case err.PERMISSION_DENIED:
                            alert("获取定位请求被拒绝");
                            break;
                        case err.POSITION_UNAVAILABLE:
                            alert("无法获取当前位置");
                            break;
                        case err.TIMEOUT:
                            alert("请求地理位置超时");
                            break;
                        case err.UNKNOWN_ERROR:
                            alert("未知错误");
                            break;
                    };
                });
            }
        </script>

在百度地图上显示定位:

通过上面的方法只能获取到当前位置的定位,若要想在某地图上面显示,还需要对某地图进行配置,这里介绍百度地图,如:

	<script src="http://api.map.baidu.com/api?v=2.0&ak=	0A5bc3c4fb543c8f9bc54b77bc155724"></script><!-- 引入百度地图javascript API -->
    <script>
        var map = new BMap.Map("container"); // 创建百度地图对象,里面的参数表示把此地图创建到哪个容器
    
        var point = new BMap.Point(116.225350, 40.16999); // 创建百度地图上面的目标对象,并把经度纬度传给此对象
    
        map.centerAndZoom(point, 10); //默认的比例,地图的比例
    
        map.enableScrollWheelZoom(); //添加鼠标滚动缩放
    
        // 以上代码可以实现地图定位效果,但是为了更清晰和实用可以添加一个图标在目标位置、点击获取点击处经纬度
    
        var Icon = new BMap.Icon("1.png", new BMap.Size(128, 128)); // 定义一个图标
    
        var markers = new BMap.Marker(point, { // 将图标定位到目标位置
            icon: Icon
        });
        map.addOverlay(markers);
    
        //点击地图打印坐标:
        map.addEventListener("click", function(e) {
            // console.log(e);//这里的参数e是一个对象,里面包含很多相关属性和方法
            console.log("经度坐标:" + e.point.lng + " 纬度坐标:" + e.point.lat);
        });
    </script>

文件读取:

通过input输入框type属性为file的input输入框可以拿到文件,此时需要通过变量接收这个文件,之后通过onchange事件触发事件处理函数,事件处理函数中国可以new FileReader()实例化一个文件对象,其方法readAsDataURL()为加载文件,括号里面传入的是文件,如下案例:

	<script>
        var img = document.querySelector('img');
        var inputs = document.querySelector('input');
        // 当选择框有文件被选中时触发事件函数:
        inputs.onchange = function() {
            var files = new FileReader(); //创建一个文件对象
            // 给这个对象传入一个文件:
            files.readAsDataURL(this.files[0]); //这里this指files这个对象,files属性是所有拿到的文件,通过下标可以拿到具体的文件
            // 当文件加载完成时执行的函数:
            files.onload = function() {
                img.src = this.result; //this.result是一个读取完成后的base64位的数据
            };
        };
    </script>

网络状态:

window.navigator.onLine可以返回一个布尔值表示当前网络的状态;window有两个关于网络的事件:online表示在线,offline表示离线,这两个事件监听的是网线连接或断开的状态。

	<script>
        console.log(window.navigator.onLine);//true,以布尔值的方式表示网络状态,true表示联网,false表示断网
        window.online = function() {
            console.log('在线')
        };
        window.offline = function() {
            console.log('离线')
        };
    </script>

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript中本地储存、离线缓存、地理定位、网络状态 的相关文章

  • Ubuntu进入(安全模式)修改用户密码

    一 重启系统 xff0c 开机时 xff0c 长按shift进入grub菜单 xff08 有的不用按直接进入如下菜单 xff09 xff1b 选择高级选项 xff1b 回车继续 xff1b 二 选中recovery mode xff08 如
  • Node 之 React ref 最新版本的用法

    在进行React开发时 xff0c 有时在组件的代码中需要访问实际的Dom对象 xff0c 这个时候就要用到ref这个属性来将 dom对象的值保存进来 xff0c 以便代码访问 一 Create Ref 自从 React v16 3开始 x
  • Pagehelper分页插件之自定义COUNT用法

    记录最近遇到的一个小麻烦 1 背景 我这次的需求是实现用户在搜索框输入关键字进行模糊查询 其实挺简单的 xff0c 就是在原来别人的XML代码上做一点修改 xff0c 也就是查询的SQL语句做点改动 xff0c 就是增加三个字段的模糊匹配
  • 网络攻防——kali操作系统基本使用

    1 阅读前的声明 本文章中生成的木马带有一定的攻击性 xff0c 使用时请遵守网络安全相关的法律法规 xff08 恶意攻击操作系统属于违法行为 xff09 2 环境安装 生成木马主要需要如下工具 xff1a kali操作系统 xff0c V
  • Visual Studio Code安装教程(超详细)

    网盘自取 xff1a https pan baidu com s 1BQDyf7uqQopJ3UUZnQ0E6g 提取码 xff1a 2022 点击VSCodeSetup x64进行安装 弹出安装向导 xff0c 勾选我同意 xff0c 点
  • 【实习日记】Sftp & Python上传本地多级文件夹

    实现功能 xff1a 将本地多级文件夹上传至sftp服务器 1 测试 由于公司的sftp已经投入使用了 xff0c 没办法随便连接 xff0c 先在本地用shutil库实现一个文件夹到另一个文件夹的复制 xff0c 把一个本地文件夹当作远程
  • 很简单——拓扑排序(队列实现)

    有N个比赛队 xff08 1 lt 61 N lt 61 500 xff09 xff0c 编号依次为1 xff0c 2 xff0c 3 xff0c xff0c N进行比赛 xff0c 比赛结束后 xff0c 裁判委员会要将所有参赛队伍从前往
  • SSD,NCC,Lucas-Kanade模板匹配,目标跟踪

    SSD xff0c NCC xff0c Lucas Kanade模板匹配 xff0c 目标跟踪 SSD原理 xff1a 实现 xff1a 结果 xff1a NCC原理 xff1a 实现 xff1a 结果 xff1a Lucas Kanade
  • linux下重启Tomcat命令

    第一步 xff1a 进入Tomcat下的bin目录 cd usr local tomcat bin 第二步 xff1a 查询Tomcat是否关闭 ps ef grep java 第三步 xff1a 如果显示以下信息 xff0c 代表着Tom
  • Xshell连接不上Ubuntu 20.04.1 LTS的解决方案

    第一步 xff1a 打开终端输入ifconfig查看IP地址是否错误 xff0c 如果提示如下图 xff0c 需要安装net tools xff0c 输入如下命令 sudo apt install net tools 第二步 xff1a 安
  • “花生壳”实现内网穿透搭建个人网站

    我们先简单介绍一下内网穿透 xff0c 也叫 NAT 穿透 xff0c 进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机 xff0c 在目前国内的内网穿透工具很多 xff0c
  • arch linux 超全安装

    Arch Linux安装 1 制作安装介质 下载ISO镜像文件 xff1a https archlinux org download 官方下载网址 注 xff1a 下载选择 xff0c 中国镜像 制作安装介质 xff1a 在Windows中
  • MySQL8.0远程连接和用户授权相关设置

    文章目录 1 开启MySQL远程连接2 关闭MySQL远程连接3 修改防火墙规则 xff0c 开放端口4 创建用户以及给用户授权5 删除用户及权限 1 开启MySQL远程连接 mysql u root p 进入MySQL数据库后进行一下操作
  • Git代码回归到指定commit

    摘要 工作中 xff0c Git的使用越来越频繁 除了最常用的clone add commit push pull等命令 xff1b 还有回退命令reset 这一篇博客就记录一下该回退命令的简单使用 现在有了可视化工具方便很多 xff0c
  • openGauss企业版安装

    openGauss企业版安装 一 下载openGauss 企业版软件包二 安装Python 3三 安装系统软件依赖四 系统环境设置1 关闭防火墙 安装好了记得打开 2 关闭SELINUX3 设置时区和时间4 设置网卡MTU值5 查看host
  • 专项测试实战 | 如何测试 App 流畅度(基于 FPS 和丢帧率)

    本文为霍格沃兹测试学院学员学习笔记 xff0c 进阶学习文末加群 FPS 和丢帧率可以在一定程度上作为 APP 流畅度的一项衡量标准 xff0c 本文介绍利用 adb shell dumpsys gfxinfo 命令获取软件渲染加载过程的数
  • iOS 视图(UIView)动画

    如果需要在视图 xff08 UIView xff09 上进行一些简单动画 xff0c 可以使用视图动画 视图动画底层也是使用Core Animation xff0c 只是动画的实现细节都封装起来了 UIKit类通常都有animated布尔型
  • MyBatis重复查询产生的一级缓存问题,导致查询失败

    问题 业务场景一直在一个事务中执行同一个sql xff0c myBatis默认第一次查询数据库 xff0c 第二次直接在一级缓存中取 那么在复杂业务中 xff0c 别的线程改变数据的时候 xff0c 那么久可能造成一直使用缓存中的值而造成数
  • 如何安全的从ubuntu16.04升级到18.04?

    Ubuntu全盘备份与恢复 xff0c 亲自总结 xff0c 实测可靠 按照ubuntu官方发布计划 xff0c ubuntu16 04将在2021年4月停止工作 xff0c 加上新出的一些硬件和算法都是考虑了到18 04的兼容 xff0c
  • 当Mysql的Update和Deletes语句不能使用报错时的问题

    当发生Error Code 1175 You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

随机推荐

  • Python代码使用tesseract进行文字识别console没有反应

    今天使用tesseract进行识别 xff0c 跟着B站的视频写了如下代码 span class token keyword import span pytesseract span class token keyword as span
  • 【C++】string的深浅拷贝问题

    深浅拷贝 问题引入浅拷贝深拷贝总结 问题引入 对于一个普通的string类 xff1a class String public String const char str 61 34 34 构造函数 if nullptr 61 61 str
  • 安装debian11系统

    镜像下载地址 xff1a https gemmei ftp acc umu se debian cd current amd64 iso cd debian 11 6 0 amd64 netinst iso 一 选择图形化安装 xff08
  • 头歌平台(EduCoder)————软件测试(黑盒测试)

    第1关 xff1a 等价类划分法 任务描述 本关任务 xff1a 编写代码 xff0c 使用等价类划分法进行黑盒测试 相关知识 为了完成本关任务 xff0c 你需要掌握等价类划分法 第2关 xff1a 边界值法 任务描述 本关任务 xff1
  • Copilot插件下载--IDEA

    1 将你的 github copilot 更新到最新版本 xff08 1 1 24 1610 xff09 然后关闭idea 2 下载这个版本的 github copilot 1 1 20 1417 https plugins jetbrai
  • 蓝桥杯(2)——蜂鸣器与继电器的使用

    目录 蜂鸣器与继电器的使用 一 原理 二 代码控制 三 与LED的连接控制举例 蜂鸣器与继电器的使用 一 原理 首先 xff0c 如何去控制蜂鸣器与继电器呢 xff0c 必须要知道的是蜂鸣器与继电器的各个引脚图 xff08 如下 xff09
  • 蓝桥杯05-独立按键的操作

    目录 xff08 一 xff09 1 原理 xff1a 2 思路 xff1a 一般按下某一键 xff0c 以S7为例时 xff0c 用if函数判断是否按下来执行之后的操作 xff08 延时去抖动 xff09 xff08 二 xff09 xf
  • 蓝桥杯07-51单片机的中断系统

    1 中断 xff1a 你正在追电视剧 神雕侠侣 正看得入迷的时候 xff0c 电话响了 xff0c 你暂停电视剧 xff0c 去接电话 xff0c 在接电话的过程中 xff0c 门铃又响了 xff0c 你暂时放下电话 xff0c 去把门打开
  • 蓝桥杯09-PWM脉冲调制的操作

    目录 一 原理 二 设置思路 xff1a 三 题目练习 一 原理 1 脉冲宽度调制 xff08 PWM xff09 是一种对模拟信号电平进行数字编码的方法 通过高分辨率计数器的使用 xff0c 方波的占空比被调制用来对一个具体模拟信号的电平
  • 蓝桥杯10-存储器mm模式写法

    一 概念原理 51 单片机可以外扩 64K 字节的 RAM 和 ROM 空间 xff0c 传统的 8051 单片机具有 16 位地 址总线和 8 位数据总线 xff0c 其中 P0 口作为数据和地址低字节的复用端口 xff0c P2 口作为
  • 蓝桥杯11-DS18B20的原理与使用

    目录 一 原理 二 操作步骤 三 解题思路 四 数据处理 五 实训代码 xff08 检测环境温度 xff09 一 原理 单总线数字温度传感器DS18B20 xff0c 基本是蓝桥杯比赛必考模块 xff0c 所以它的原理是必须要清楚的 工作电
  • 555定时器与频率测量

    一 概述 xff1a 在NE355定时器内部 xff0c 有3个5K的电阻分压 xff0c 故称为555定时器 xff1b xff08 作为信号发生电路 xff09 NET SIG接到P3 4 xff0c 定时器0的计数信号输入引脚 xff
  • 蓝桥杯各个模块总结(参考)

    明天就要比赛了 xff0c 今天总结一份救命模板加深记忆 xff1b 1 24c02的操作 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 24C02单字节写入 61 61 61
  • 如何让你的内网服务器可以被外网访问到(端口映射、NAT、域名解析、IP地址)

    众所众知 xff0c 我们一般情况下是处在私有网段中 xff0c 我们可以访问外网 xff0c 但是外网访问不到我们 如果想要在Internet网上被访问到就需要有一个公网IP 问题1 xff1a 什么是NAT xff08 网络地址转换 x
  • 头歌平台(EduCoder)————软件测试(测试过程与策略)

    第1关 xff1a 测试策略 任务描述 本关任务 xff1a 根据所学知识 xff0c 完成右侧的选择题 相关知识 为了完成本关任务 xff0c 你需要掌握软件测试的测试策略 第2关 xff1a 测试过程 任务描述 本关任务 xff1a 根
  • 使用vscode下载插件在线打开html界面,解决没有Open in default brower选择问题

    前言 今天刚下载的vscoode xff0c 写了一个html不知道怎么通过vscode打开 问了下百度 xff0c 说需要选择Open in default brower 但是我鼠标右键后并没有找到 Open in default bro
  • Wsl设置图形界面

    文章目录 Wsl设置图形界面原理步骤启动 Wsl设置图形界面 目前 xff0c Wsl尚未正式支持图形显示 xff08 预览版已经有该功能 xff09 为了使用图形界面 xff0c 可以使用Xserver 原理 Xorg使用客户端 服务器模
  • pytest之常用插件

    文章目录 pytest常用的插件有哪些pytest ordering 用法pytest xdist 用法 pytest常用的插件有哪些 pip install pytest span class token operator span or
  • 如何将自己的python代码打包成库,可以让别人使用pip安装调用?

    大家好 xff0c 本文是解决如何将自己的python代码建成一个python库 xff0c 可以让任何人都能pip install lt 库名 gt 使用 xff0c 亲测有效 xff01 前期准备 xff1a 1 创建PyPI用户 Py
  • javascript中本地储存、离线缓存、地理定位、网络状态

    本地储存 xff1a 实际开发中某些内容是不需要放到服务器中 xff0c 而是放到了浏览器中 xff0c 需要的时候可以快速的访问 xff0c 甚至页面刷新也可能不会丢失数据 xff0c 容量较大 xff1b 这里介绍两种数据存储方式 xf