使用 LocalStorage 提升前端体验

embedded/2024/9/22 16:40:08/

使用 LocalStorage 提升前端体验

在这个项目(www.studytool.site)中,本地缓存 (localStorage) 作为一种持久化存储机制,被广泛应用于用户设置和数据保存,确保用户在刷新页面或关闭浏览器后,仍然能够保留自定义的偏好和进度。以下是本地缓存在该项目中的几个关键应用场景:

1. 字体设置的缓存

用户可以在播放器中调整字幕的字体大小(超大、大、中、小),系统会将这些设置保存到 localStorage 中,以便下次访问时能够自动加载之前的字体大小设置。通过以下代码,系统能够持久化用户的字体选择:

localStorage.setItem(LOCAL_STORAGE_KEY_FONT_SIZE, selectedValue);
localStorage.getItem(LOCAL_STORAGE_KEY_FONT_SIZE);

这样,字体设置在页面刷新后仍然有效。

2. 字幕显示与隐藏状态缓存

用户可以选择显示或隐藏字幕、译文和收藏的句子列表。每次用户切换这些选项时,系统会将状态保存到 localStorage,例如:

localStorage.setItem(LOCAL_STORAGE_KEY_IS_SHOW_CAPTION, captionsVisible);  // 保存字幕显示状态
localStorage.setItem(LOCAL_STORAGE_KEY_IS_SHOW_TRANSLATION, captionsTranslationVisible);  // 保存译文显示状态
localStorage.setItem(LOCAL_STORAGE_KEY_IS_SHOW_FAVORITE, favoriteListVisible);  // 保存收藏列表显示状态

这样,当用户重新加载页面时,系统能够根据缓存的状态决定是否显示这些内容。

3. 收藏句子的保存

当用户选择将某些句子标记为需要重复或收藏时,系统会将这些收藏句子的索引保存在 localStorage 中。通过以下函数,收藏的句子列表被存储并加载:

saveToLocalStorage(repeatedSentences);  // 保存收藏句子
loadFromLocalStorage();  // 加载已保存的收藏句子

这样用户可以方便地回顾已收藏的内容。

4. 自动播放下一句功能

播放器支持自动播放下一句字幕。该选项的开启与关闭状态会存储在 localStorage 中,确保用户在关闭浏览器后重新打开时,依旧保持之前的播放设置:

localStorage.setItem(LOCAL_STORAGE_KEY_IS_AUTO_PLAY_NEXT, isAutoPlayNext);

5. 已完成内容的标记

允许用户标记某篇文章为“已完成”,并将该信息保存在 localStorage 中的 completedArticles 列表中。每次用户标记或取消标记时,系统会更新本地缓存:

localStorage.setItem(LOCAL_STORAGE_KEY_COMPLETED, JSON.stringify(completedArticles));

6. 缓存字幕和有效期机制

为了提升页面加载性能,项目实现了字幕文件的缓存,并设置了缓存有效期。使用 setItemWithExpiry 函数,字幕文件会存储在 localStorage 中,并设置缓存有效期(如60分钟)。如果缓存过期,系统将重新请求数据:

setItemWithExpiry(`subtitles_${articleValue}`, subtitles, CACHE_EXPIRY);

总结

在这个项目中,localStorage 通过缓存用户的自定义设置(如字体大小、字幕显示状态等)、保存用户交互结果(如收藏句子、完成状态等),以及缓存常用数据(如字幕内容),极大地提升了用户体验和系统的响应速度。这种方式适用于需要保存用户设置及数据的小型应用场景,而无需复杂的后端支持。

需要注意的是,localStorage 的数据存储上限为5MB,且不应存储敏感信息。


http://www.ppmy.cn/embedded/115130.html

相关文章

CefSharp_Vue交互(Element UI)_WinFormWeb应用(3)---通过页面锁屏和关机(含示例代码)

一、预览 实现功能:通过vue标题栏按钮锁屏和关机 1.1 预览 1.2 代码 锁屏代码csharp LockWorkStation() 关机代码chsharp 注意vue代码参数和此参数一致(0/1/2) 方法ExitWindowsEx()

flex,promise里catch,作用域和作用域链和闭包,递归展开嵌套数组

目录 1. flex里shrink&#xff0c;grow和basis具体应用 2 promise里的catch 3 作用域和作用域链 4 递归展开嵌套数组 1. flex里shrink&#xff0c;grow和basis具体应用 <style> .container { display:flex; width:600px; }.div1 { flex:1 2 500px; }.div2 { flex:2 …

PHP项目中Vendor错误导致项目失败的解决方案

在PHP项目中&#xff0c;vendor目录通常用于存放通过Composer安装的依赖库。虽然这些依赖极大地提高了开发效率&#xff0c;但它们也可能成为项目失败的隐患。本文将探讨常见的Vendor错误及其解决方案。 #### 1. 常见的Vendor错误 ##### 1.1 版本不兼容 不同的依赖可能对PHP…

计算机毕业设计hadoop+spark+hive物流预测系统 物流大数据分析平台 物流信息爬虫 物流大数据 机器学习 深度学习

流程&#xff1a;1.Python爬虫采集物流数据等存入mysql和.csv文件&#xff1b;2.使用pandasnumpy或者MapReduce对上面的数据集进行数据清洗生成最终上传到hdfs&#xff1b;3.使用hive数据仓库完成建库建表导入.csv数据集&#xff1b;4.使用hive之hive_sql进行离线计算&#xff…

前端分段式渲染较长文章

实现思路&#xff1a; 1. 后端返回整篇文章。 2. JavaScript 分段处理&#xff1a;将文章按一定的字符或段落长度分割&#xff0c;然后逐步将这些段落追加到页面上。 3. 定时器或递归调用&#xff1a;使用 setInterval 或 setTimeout 来控制段落的逐步渲染。 代码实现示例 …

Hive parquet表通过csv文件导入数据

1. background 已建好了 hive parquet 格式的表, 需要从服务器的csv导入数据至该hive表 2. step 提前上传csv至服务器 /path/temp.csv 创建 textfile 格式的中转表(这里使用内部表,方便删除) ,源表名dw_procurement.dwd_tc_comm_plant ,这里中转表加上了csv后缀 CREATE TA…

计算机基础(Computer Fundamentals)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

【设计模式-外观】

这里写自定义目录标题 定义UML图角色作用代码使用场景 定义 为子系统中一组相关接口提供一致界面&#xff0c;定义一个高级接口&#xff0c;使得子系统更加容易使用。 UML图 角色作用 外观&#xff08;Facade&#xff09;角色&#xff1a;这是外观模式的核心&#xff0c;它知…