html5与js今日笔记

HTML5 敲击乐:开发者文档

用代码谱写音乐,让键盘奏响旋律

------ 一个基于 HTML5 的模块化钢琴模拟器开发指南


🎯 前端基础:程序员的导演艺术

前端开发,是程序员中的"导演"。

我们不只写逻辑,更在编排用户的每一次点击、每一次注视、每一次情感流动。

  • JavaScript(JS) 是交互的灵魂,掌控行为与动态体验。
  • HTML 构建舞台结构,定义每个元素的角色。
  • CSS 负责灯光、布景与视觉美学,让页面生动起来。
  • 三者合称 前端三剑客:HTML + CSS + JS,缺一不可。

💡 AI 时代的极致用户体验,最终由 JS 工程师落地实现。


🎹 项目目标:HTML5 模拟钢琴(模块化开发)

我们将用纯前端技术打造一个可交互的"敲击乐"钢琴应用。

用户点击或敲击键盘即可发出音符,如同在真实钢琴上演奏。

项目结构分层

层级 技术 职责
结构层 HTML5 定义琴键、容器等页面结构
表现层 CSS3 美化琴键样式、动画反馈
行为层 JavaScript 绑定事件、播放音频、响应键盘输入

🧱 第一步:HTML 负责结构 ------ 构建"键盘"舞台

HTML = HyperText Markup Language,即超文本标记语言。

快速生成 HTML5 模板

使用 Emmet 语法:

diff 复制代码
! + Tab → 自动生成标准 HTML5 模板

输出:

xml 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

当需要创建多个相同div时如:

xml 复制代码
<div class="keys">
    <div class="key">
      <h3>A</h3>
      <span class="sound">clap</span>
    </div>
    <div class="key">
      <h3>S</h3>
      <span class="sound">hihat</span>
    </div>
    <div class="key">
      <h3>D</h3>
      <span class="sound">kick</span>
    </div>
    <div class="key">
      <h3>F</h3>
      <span class="sound">openhat</span>
    </div>
    <div class="key">
      <h3>G</h3>
      <span class="sound">boom</span>
    </div>
    <div class="key">
      <h3>H</h3>
      <span class="sound">ride</span>
    </div>
    <div class="key">
      <h3>J</h3>
      <span class="sound">snare</span>
    </div>
    <div class="key">
      <h3>K</h3>
      <span class="sound">tom</span>
    </div>
    <div class="key">
      <h3>L</h3>
      <span class="sound">tink</span>
    </div>
  </div>

非常麻烦,每个块有类有h3和span但用emmet:

css 复制代码
div.keys>(div.key>h3+span.sound)*8//按下tap即可生成

核心概念

  • <!DOCTYPE html>HTML5 文档声明,告诉浏览器这是 HTML5 格式的文档。
  • <html></html>:根标签,包裹整个文档。
  • <head>:元信息区(编码、标题、引入资源等)。
  • <body>:页面主体内容区。

常用标签语义化

标签 类型 含义
<div> 块级元素 布局容器,独占一行,可设宽高
<span> 行内元素 内容包装,不换行,不可设宽高
<h3> 块级元素 三级标题,自带上下边距和行高

开发原则:先写结构,再加样式,最后实现交互


🎨 第二步:CSS 负责样式 ------ 让琴键美起来

CSS(Cascading Style Sheets),层叠样式表,控制网页外观。 加入下面这行进入css编辑

ini 复制代码
<link rel="stylesheet" href="./style.css">

实例:

css 复制代码
* {
    margin:0;
    padding:0;
 }//由于不同的标签参数不一样,所以使用*用于清除元素默认的外边距和内边距
 body,html{
    height:100%;
} //初始的height并非如想象的100%,而是由容器的内容决定
html{
    font-size: 10px;//span的大小,不可更改行高,所以行高为14px
    background:url('./background.jpg') bottom center no-repeat;//bottom为底部center为居中,no-repeat为背景图像不重复
    background-size:cover;/*等比例缩小裁切*/
}
h3{
    font-size: 10px;//设定h3的字体大小
    line-height: 1;//设置行高为字体大小的一倍,默认是1.4
}

当不设置height为100%时:

一个div块的大小为24px(由容器内容决定大小,h3为10,span为14):

h3的高为10px:

块级 vs 行内元素

特性 块级元素(如 div 行内元素(如 span
是否独占一行 ✅ 是 ❌ 否
可否设置宽高 ✅ 可以 ❌ 不可以(除非转为 block/inline-block)
默认宽度 父容器的 100% 内容实际宽度
高度 由内容或设定决定 由字体/行高决定

💡 小知识:line-height(行高)常用于垂直居中文本,就像"情书里的行间距",影响阅读美感。


⚙️ 第三步:JavaScript 负责行为 ------ 让琴键"发声"

JS 是让网页"活起来"的关键。

在本项目中的职责:

  1. 获取所有琴键 DOM 元素
  2. 绑定鼠标点击事件 → 播放对应音符
  3. 监听键盘按键 → 触发对应琴键高亮与发声
  4. 模块化组织代码(如:AudioPlayer、KeyBoardUI)

🚀 提升开发效率的工具链

工具 作用
Emmet ! + Tab 快速生成 HTML5 模板,提升编码速度
Live Server 本地启动服务器,支持热更新,保存即刷新
VS Code 强大的前端编辑器,内置 Emmet 支持

🔥 推荐插件:Live Server(右键 → "Open with Live Server")


🧠 大厂考题解析

问题:<!DOCTYPE html> 是什么?它和 .txt.pdf 文件有何异同?

答案:

<!DOCTYPE html> 不是标签 ,而是 HTML5 的文档类型声明(Document Type Declaration)

它的作用是:

  • 告诉浏览器:这是一个 HTML5 文档。
  • 启用标准渲染模式(避免"怪异模式")。
  • 确保浏览器使用最新的 HTML 解析规则。
类比理解:
文件类型 扩展名 本质 用途
HTML 文档 .html.htm 结构化标记文档 网页内容与结构
纯文本 .txt 无格式文本 存储原始字符
PDF 文档 .pdf 固定布局文档 跨平台打印与阅读

✅ 所有这些都是"文档"(Document),但格式不同,用途不同,解析方式也不同。

<!DOCTYPE html> 就像一本书的"封面标题",告诉读者:"这是一本 HTML5 书,请用现代浏览器阅读。"


🎼 总结:从"敲击"到"乐章"

阶段 技术 成果
结构搭建 HTML5 创建琴键 DOM 结构
视觉美化 CSS3 设计美观的琴键与交互反馈
交互实现 JavaScript 实现点击/键盘触发音效
模块优化 JS 模块化 提升可维护性与扩展性

🎉 让每一次敲击代码,都成为一段悦耳的乐章。


对象字面量与JISON:深入理解JavaScript的灵活性与表现力

JavaScript:最具表现力的脚本语言

JavaScript(JS)以其独特的灵活性和表现力在众多编程语言中脱颖而出。不同于Java或C++等需要先定义类才能创建对象的语言,JavaScript通过对象字面量提供了一种更为直接和灵活的方式来构造对象。

  • 对象字面量 {}:允许开发者快速定义一个包含属性和方法的对象。
  • 数组字面量 []:用于简洁地创建数组结构。

这种直接性使得JavaScript成为了开发人员手中极为强大的工具,特别是在构建动态网页和应用程序时显得尤为重要。

面向对象编程的核心概念

在JavaScript中,面向对象编程(OOP)是通过对象来实现的。每个对象都是由一系列属性和方法组成的集合体。属性通常代表对象的状态信息,而方法则提供了操作这些状态的能力。

数据类型概览

JavaScript支持多种数据类型,包括但不限于:

  • 字符串(String)
  • 数值(Number)
  • 布尔值(Boolean)
  • 空值(Null)
  • 未定义(Undefined)
  • 对象(Object)

这些基本的数据类型构成了所有JavaScript程序的基础,无论是简单的变量声明还是复杂的对象实例化都离不开它们。

设计模式中的应用:以代理模式为例

设计模式为解决特定问题提供了经过验证的方法模板。在JavaScript中,使用面向接口的编程方式可以极大地提升代码的灵活性和复用性。这里我们将重点介绍代理模式(Proxy Pattern),并通过一个具体的例子加以说明。

代理模式简介

代理模式是一种结构型设计模式,它为另一个对象提供了一个代理对象来控制对原对象的访问。这在很多场景下都非常有用,比如延迟加载、权限控制等。

实例解析:送花情境

假设有一个名为xm的对象,该对象拥有一个receiveFlower方法用于接收花朵。如果直接让clpxm送花,可能会被拒绝。为了改善这一情况,我们可以引入一个新的对象xh,这个对象同样实现了receiveFlower方法,并且可以作为xm的代理来接受来自zzp的花朵。

xml 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
   <script>
    // 面向对象思想
    // 表现力的JSON 对象字面量
    // let 变量 关键字 
    // key:value,
    // typeof   object
    let clp ={
        name:'猪哥',// 字符串 string
        howntown:'猪窝',
        age:18,// number 不适合计算 数值类型
        sex:'男',
        hobbies:['滚泥巴'],//object
        isSingle:true,
        job:null, // 空值null
        sentFlower:function(xm){
xm.receiveFllow(this.name);
        }
    }
    let a;
    let xm ={
        xq:30,//心情值
        name:'虞jy',
        hometown:'九江',
        receiveFllow:function(name){
            console.log(`${this.name}收到了${name}的花`);
if(this.xq<80){
    console.log('不约');
}else{
    console.log('吃饭去');
}
        }
    }
    let xh={
        name:'黄zy',
        hometown:'九江',
        receiveFllow:function(name){
            setTimeout(function(){
                xm.xq=90;
                xm.receiveFllow(name);
             } ,3000)
             // console.log(`${this.name}收到了${name}的花`);
// //xm.receiveFllow(name);
// 作用
// if(name=='猪哥'){
//     console.log('猪哥我爱你');
// }
     
        }

     }
   </script> 
</body>
</html>

在这个例子中,xh充当了xm的代理角色,帮助处理来自zzp的花朵请求,而且xh还可以等待xm的心情号时再送出花束。这种方式不仅展示了代理模式的强大,同时也体现了JavaScript对象字面量的简便性和灵活性。


相关推荐
Zyx20074 小时前
🎹用 HTML5 打造“敲击乐”钢琴:前端三剑客的第一次交响曲
前端
小时前端4 小时前
面试官:我为什么总在浏览器存储问题上追问IndexedDB?
前端·浏览器
前端小菜哇4 小时前
前端如何优雅的写一个记忆化函数?
前端
今禾4 小时前
Git完全指南(下篇):Git高级技巧与问题解决
前端·git·github
llq_3504 小时前
为什么 JS 代码执行了,但页面没马上变?
前端·javascript
trsoliu4 小时前
Tailwind CSS 类名管理工具实战指南
前端·css
汤姆Tom4 小时前
CSS 预处理器深入应用:提升开发效率的利器
前端·css·面试
练习前端两年半4 小时前
Vue3组件二次封装终极指南:动态组件+h函数的优雅实现
前端·vue.js
皮皮虾我们跑4 小时前
前端HTML常用基础标
前端·javascript·html