• 作者:老汪软件技巧
  • 发表时间:2024-12-15 11:08
  • 浏览量:

引言

我们的目标是创建一个可以添加和显示待办事项的计划书,并且这些事项能够被持久地保存下来,即使用户刷新页面或关闭浏览器后再次访问,也能看到之前添加过的项目。为了达到这个目的,我们将使用HTML5中的localStorage来处理数据的存取。

localStorage

在Web开发中,用户数据的持久化是一个关键需求。传统的做法是将所有数据保存到服务器端数据库,但随着HTML5的推出,开发者有了新的选择——localStorage。浏览器开辟了5Mb左右的存储空间作为localStorage,它允许我们直接在用户的浏览器中存储数据,无需依赖服务器,从而为构建快速响应的应用提供了便利。localStorage 对象提供了几个方法用于操作存储的数据:

setItem(keyName, keyValue):用来保存数据到localStorage中。 参数keyName是你想要创建的键名,keyValue是你想要存储的值。

getItem(keyName): 用来从localStorage中读取指定键名的数据。 参数keyName是你要查找的键名,返回与之关联的值;如果找不到,则返回null。

removeItem(keyName): 用来从localStorage中移除指定键名的数据。 参数keyName是要删除的键名。

clear(): 清空localStorage中的所有数据。

HTML结构设计和CSS样式

首先,我们定义了基本的HTML文档结构,包括标题、表单用于输入新事项以及一个无序列表()用来展示已有的事项:

HTML代码

html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, viewport-fit=cover">
    <title>LocalStoragetitle>
    <link rel="stylesheet" href="styles.css">
head>
<body>
    <div class="wrapper">
        <h2>PROPOSALh2>
        <ul class="plates">
            <li>Loading...li>
        ul>
        <form class="add-items">
            
            <input type="text" name="item" placeholder="Item Name" required>
            <input type="submit" value="+ Add Item">
        form>
    div>
    <script src="app.js">script>
body>
html>

这里,我们通过确保了页面在移动设备上的良好显示效果,同时设置了禁止缩放以优化用户体验。

CSS代码

接下来,我们为应用添加了一些基础的CSS样式,下面是我在本例中使用的CSS代码

/* styles.css */
* {
    margin: 0;
    padding: 0;
}
html {
    box-sizing: border-box;
    background: url('http://wes.io/hx9M/oh-la-la.jpg') center no-repeat;
    background-size: cover;
    min-height: 100vh;
    display: flex;
    justify-content: center;
    align-items: center;
    text-align: center;
    font-family: Futura,"Trebuchet MS",Arial,sans-serif;
}
*, *:before, *:after {
    box-sizing: inherit; 
}
.wrapper {
    padding: 20px;
    max-width: 350px;
    background: rgba(255,255,255,0.95);
    box-shadow: 0 0 0 10px rgba(0,0,0,0.1);
}
h2 {
    text-align: center;
    margin: 0;
    font-weight: 200;
}
.plates {
    margin: 0;
    padding: 0;
    text-align: left;
    list-style: none;
}
.plates li {
    border-bottom: 1px solid rgba(0,0,0,0.2);
    padding: 10px 0;
    font-weight: 100;
    display: flex;
}
.plates label {
    flex: 1;

率土之滨萌新秒变大佬_看抠脚大汉如何秒变萌妹_

cursor: pointer; } .plates input { display: none; } .plates input + label:before { content: '⬜'; margin-right: 10px; } .plates input:checked + label:before { /* 选中标志 */ content: ''; } .add-items { margin-top: 20px; } .add-items input { padding: 10px; outline: 0; border: 1px solid rgba(0,0,0,0.1); }

我们先来看一下结果

image.png

JS逻辑实现

最后,也是最重要的一环,就是JS代码的编写。以下是完整的JS代码:

const addItems = document.querySelector('.add-items'); // form
const itemsList = document.querySelector('.plates');  // ul
// 每次刷新后先获取localStorage中内容,如果没有为 [ ]
const items =JSON.parse(localStorage.getItem("items"))|| [];
// 添加plate item
function addItem(event){
    event.preventDefault();   // 阻止默认行为 不要让它每次提交后都刷新
    console.log(this,event.target);  // this 指向form 
    // 性能
    const text = (this.querySelector('[name=item]')).value.trim();  // 输入的内容    querySelector 属于任何一个元素  缩小了范围 速度快
    // 数据
    const item={
        // text:text,
        text,  // es6
        done:false,   
        }
    items.push(item);
    populateList(items,itemsList);
    localStorage.setItem('items',JSON.stringify(items));
    this.reset(); // 清空表单
    }
// 渲染ul
function populateList(items, platesList){
    platesList.innerHTML = items.map((plate,i)=>{
    return `
        
  • ${i} id="item${i}" ${plate.done?'checked':''} >
  • `
    }).join('') } addItems.addEventListener('submit',addItem); populateList(items,itemsList);

    至此,已经实现了我们想要的功能,下面我们来简单解释一下这段代码。

    在这段代码中,我们做了以下几件事:

    初始化:当DOM加载完成后,检查localStorage中是否有保存的数据,如果有,则解析成数组形式。添加事项:先清除表单的默认行为。每当用户提交表单时,获取输入框中的文本内容,创建一个新的事项对象,并将其添加到items数组中。然后调用populateList函数重新渲染列表,并将最新的items数组序列化后存入localStorage。渲染列表:populateList函数根据当前的items数组生成对应的HTML片段,并插入到.plates元素内。清空表单:每次成功添加事项后,自动清空表单输入框,准备下一次输入,优化体验。

    我们可以在浏览器中的开发者工具下的Application中的Local storage找到你存储的内容

    image.png

    localStorage、sessionStorage、Cookie之间的区别

    localStorage、sessionStorage 和 Cookie 是Web开发中用于在客户端存储数据的三种机制。它们各有特点,适用于不同的应用场景。下面我们将使用一个表格来比较它们之间的区别。

    特性localStoragesessionStorageCookie

    数据持久性

    永久保存,除非手动清除

    仅在当前会话期间有效,关闭标签页后清除

    可设置过期时间;默认为会话结束时清除

    存储容量

    每个域名约5MB

    每个域名约5MB

    单个4KB左右,域名下总计不超过4KB到8KB

    数据发送方式