玩转HTML5与JavaScript:打造酷炫又高效的Web应用,轻松搞定LocalStorage!

引言

随着互联网技术的发展,HTML5 成为了构建现代网页和应用程序的基础。它引入了大量新特性,不仅简化了开发过程,还提升了用户体验。今天呢,让我们通过分析一个简单的 LocalStorage 示例来探讨 HTML5 的一些关键特性及其最佳实践~~

  • 示例代码
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta data-n-head="ssr" name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, viewport-fit=cover">
  <title>LocalStorage</title>
  <style>
  * {
    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; 
}

svg {
  fill:white;
  background: rgba(0,0,0,0.1);
  padding: 20px;
  border-radius: 50%;
  width: 200px;
  margin-bottom: 50px;
}

.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);
}
  
  </style>
</head>
<body>
<div class="wrapper">
  <h2>LOCAL TAPAS</h2>
  <p></p>
  <ul class="plates">
    <li>Loading Taps...</li>
  </ul>
  <form class="add-items">
    <input type="text" name="item" placeholder="Item Name" 
      required>
    <input type="submit" value="+ Add Item">
  </form>
  <script>
  const addItems = document.querySelector('.add-items'); // form
  const itemsList = document.querySelector('.plates'); // ul
  const items = JSON.parse(localStorage.getItem("items")) || [];
  
  // 添加plate item
  function addItem(event) {
    event.preventDefault();
    console.log(this, event.target);
    // 性能
    const text = (this.querySelector('[name=item]')).value.trim();
    // 数据
    const item = {
      text, // es6 
      done: false
    }

    items.push(item);
    populateList(items, itemsList);
    localStorage.setItem('items', JSON.stringify(items));
    this.reset();
  }

  // 渲染ul 
  function populateList(plates, platesList) {
    platesList.innerHTML = plates.map((plate, i) => {
      return `
        <li>
          <input
            type="checkbox" 
            data-index=${i} 
            id="item${i}"
            ${plate.done ? 'checked' : ''}
          >
          <label for="item${i}">${plate.text}</label>
        </li>
      `
    }).join('')
  }

  addItems.addEventListener('submit', addItem)
  populateList(items, itemsList);
  </script>
</div>
</body>
</html>

1. HTML新特性

HTML5 文档声明和视口设置

Html 复制代码
<!DOCTYPE html>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, viewport-fit=cover">
  1. <!DOCTYPE html> 文档类型声明

    • 这是 HTML5 的文档类型声明方式。它是一个简化的声明,告诉浏览器按照 HTML5 标准来解析页面。相比以前的 HTML 版本,HTML5 的 DOCTYPE 声明更加简洁,并且确保了所有现代浏览器都能正确地渲染页面。
  2. 视口 (viewport) 元标签

    • <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> 是 HTML5 引入的一个重要特性,特别适用于移动设备。它允许开发者控制网页在移动设备上的缩放行为和布局宽度。通过设置 user-scalable=no,可以禁止用户缩放页面,这在某些应用中(如游戏或特定格式的应用)是非常有用的,以提供更好的用户体验。

表单增强功能(placeholder, required 等)

Html 复制代码
<input type="text" name="item" placeholder="Item Name" required>
  • HTML5 为表单元素引入了一系列新的属性,包括 placeholderrequiredplaceholder 属性提供了输入框内的提示文本,当用户开始输入时自动消失;而 required 属性则确保了用户必须填写该字段才能提交表单。这些新属性简化了表单验证的过程,同时也改善了用户体验,提高了表单的易用性和数据完整性。

2. JavaScript 和 DOM 操作性能优化

Javascript 复制代码
const text = (this.querySelector('[name=item]')).value.trim();
  1. JS DOM编程是最耗性能的一件事
  • DOM(文档对象模型)操作确实是JavaScript中最耗费性能的操作之一,因为它们涉及到浏览器重新渲染页面。每次修改DOM元素或其样式时,浏览器可能需要重新计算布局、重绘以及合成新的画面。因此,尽量减少直接的DOM操作次数可以显著提升应用性能。
  1. Vue
  • 通过使用框架如Vue.js等,来间接管理和最小化直接DOM操作。Vue.js 使用虚拟DOM(Virtual DOM),它在内存中创建了一个DOM树的副本,只在必要时将实际变化同步到真实DOM中,从而减少了不必要的DOM更新,提升了性能。
  1. this.querySelector("") 缩小了查找范围
  • querySelectorquerySelectorAll 是非常有用的API,允许开发者根据CSS选择器来定位元素。当你在一个特定的上下文中使用 this.querySelector 或者从某个父节点开始查找时,确实可以缩小搜索范围,提高查询效率。
  1. 性能优化是态度
  • 性能优化不仅仅是一系列的技术手段,更是一种开发态度。良好的性能意识应该贯穿于整个开发过程,包括但不限于:

    • 批量DOM操作:尽可能地一次性完成多个DOM修改,而不是分散进行。
    • 事件委托:利用事件冒泡机制,在父级元素上监听事件,而不是为每个子元素单独添加事件监听器。

3. ES6 语法和代码风格

Javascript 复制代码
const item = {
  text, 
  done: false 
};
function populateList(plates, platesList) {
  // ...
}
  • ES6 对象字面量简化: 我们使用了ES6的对象字面量简化语法。因为属性名text与变量名相同,所以可以直接写成text,而不需要显式地写出text: text。

  • 代码可读性: 函数名如 addItem 等都非常直观,清楚地表达了每个函数的职责,提高了代码的可读性和维护性。

4. 使用 LocalStorage 存储数据

Javascript 复制代码
localStorage.setItem('items', JSON.stringify(items));

HTML5 的 LocalStorage API 允许网页存储少量数据(大约 5MB),即使在浏览器关闭后也能保留。这对于记住用户的偏好或保存临时状态非常有用。由于 LocalStorage 只能存储字符串,因此需要使用 JSON.stringify()JSON.parse() 进行序列化和反序列化操作。

  • JSON.stringify() 方法将 JavaScript 对象或数组转换为 JSON 字符串,便于存储或传输。
  • JSON.parse() 方法解析一个 JSON 字符串,构造由字符串描述的 JavaScript 值或对象。

结论

综上所述,这个例子就像一场奇妙的魔法秀,展示了如何巧妙地运用HTML5的新特性和JavaScript的最佳实践,来构建既高效又超级友好的Web应用程序哦!通过这些魔法般的技巧和技术,开发者不仅能像变魔术一样提升网页的功能和响应速度,还能让用户体验变得更加美妙和愉快呢。随着技术不断进步,紧跟最新的标准和最佳实践,就像是追逐彩虹尽头的宝藏一样,对于每一位Web开发者来说都超级重要呢!

这篇文章就像是一个贴心的小助手,详细介绍了HTML5的几个重要方面,并且还附上了具体的代码示例,希望可以帮助大家更好地理解这些神奇的技术和理念,并把它们应用到实际项目中,创造出更多令人惊艳的作品。😊✨

相关推荐
疯狂的沙粒18 分钟前
在uni-app中如何从Options API迁移到Composition API?
javascript·vue.js·uni-app
siwangqishiq222 分钟前
Vulkan Tutorial 教程翻译(四) 绘制三角形 2.2 呈现
前端
李三岁_foucsli24 分钟前
js中消息队列和事件循环到底是怎么个事,宏任务和微任务还存在吗?
前端·chrome
尽欢i24 分钟前
HTML5 拖放 API
前端·html
xiaominlaopodaren38 分钟前
Three.js 光影魔法:如何单独点亮你的3D模型
javascript
PasserbyX40 分钟前
一句话解释JS链式调用
前端·javascript
1024小神41 分钟前
tauri项目,如何在rust端读取电脑环境变量
前端·javascript
Nano1 小时前
前端适配方案深度解析:从响应式到自适应设计
前端
古夕1 小时前
如何将异步操作封装为Promise
前端·javascript
小小小小宇1 小时前
前端定高和不定高虚拟列表
前端