HTML5笔记
前端学习笔记专栏区别于官网中全面的知识讲解,主要记录学习技术栈时对于重点内容的提炼,便于对技术栈知识的快速回顾以及使用
1.canvas元素
- 内部坐标:坐标均以左上角为(0, 0),单一坐标均作为起始坐标
- 创建对象:
<canvas id="myCanvas" width="200" height="100"></canvas>var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
- 绘制线条:
ctx.moveTo(0,0); // 定义开始坐标
ctx.lineTo(200,100); // 定义结束坐标
ctx.stroke(); // 绘制线条
- 绘制圆:
ctx.beginPath();
ctx.arc(95, 50, 40, 0, 2*Math.PI); // (95, 50)为圆心,40为半径,(0,2*Math.PI)对应绘制周长
ctx.stroke();
- 定义背景颜色/图案:
ctx.fillStyle
- 定义字体:
ctx.font
- 绘制矩形:
ctx.fillRect(x, y, width, height)
- 绘制实心文本:
ctx.fillText(text, x, y)
- 绘制空心文本:
ctx.strokeText(text, x, y)
- 绘制图片:
ctx.drawImage(img, x, y);
2.SVG元素
- canvas元素
- 依赖分辨率
- 不支持事件处理器
- 弱的文本渲染能力
- 能够以 .png 或 .jpg 格式保存结果图像
- 最适合图像密集型的游戏,其中的许多对象会被频繁重绘
- svg元素
- 不依赖分辨率
- 支持事件处理器
- 最适合带有大型渲染区域的应用程序(比如谷歌地图)
- 复杂度高会减慢渲染速度(任何过度使用 DOM 的应用都不快)
- 不适合游戏应用
3.拖放
function allowDrop(ev) {ev.preventDefault();
}function drag(ev) {ev.dataTransfer.setData("Text",ev.target.id);
}function drop(ev) {ev.preventDefault();var data=ev.dataTransfer.getData("Text");ev.target.appendChild(document.getElementById(data));
}<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div><img id="drag1" src="/images/logo.png" draggable="true" ondragstart="drag(event)">
4.地图定位
function getLocation(){if (navigator.geolocation) {navigator.geolocation.getCurrentPosition(showPosition,showError);}else x.innerHTML="该浏览器不支持定位。";
}function showPosition(position) {x.innerHTML="纬度: " + position.coords.latitude + "<br>经度: " + position.coords.longitude;
}function showError(error) {switch(error.code) {case error.PERMISSION_DENIED:x.innerHTML="用户拒绝对获取地理位置的请求。"break;case error.POSITION_UNAVAILABLE:x.innerHTML="位置信息是不可用的。"break;case error.TIMEOUT:x.innerHTML="请求用户地理位置超时。"break;case error.UNKNOWN_ERROR:x.innerHTML="未知错误。"break;}
}
5.video/audio
<video id="video1" width="420"><source src="mov_bbb.mp4" type="video/mp4"><source src="mov_bbb.ogg" type="video/ogg">您的浏览器不支持 HTML5 video 标签。
</video>
<audio controls><source src="horse.ogg" type="audio/ogg"><source src="horse.mp3" type="audio/mpeg">您的浏览器不支持 audio 元素。
</audio>// 支持通过js控制DOM元素的play播放、pause方法
function playPause() { var myVideo = document.getElementById("video1")if (myVideo.paused) myVideo.play()else myVideo.pause()
}
6.input
- 选色器:
<input type="color">
- 时间选择:
<input type="date">
- 邮箱/链接/号码校验:
<input type="email/url/tel">
- 数字区间:
<input type="range" min="1" max="10">
- 数字:
<input type="number" min="1" max="5">
7.语义元素
<section>
:定义文档中的节,比如章节、页眉、页脚或文档中的其他部分<article>
:定义独立的内容<nav>
:定义导航链接的部分<aside>
:定义页面主区域内容之外的内容(比如侧边栏)<header>
:描述了文档的头部区域,主要用于定义内容的介绍展示区域<footer>
:描述了文档的底部区域<figure>
:规定独立的流内容(图像、图表、照片、代码等等)<figcaption>
:定义<figure>
的标题,应该被置于"figure"的第一个或最后一个子元素的位置
8.web存储
- localStorage与sessionStorage
- web sql与indexedDB(单独篇章)
9.localForge
将indexedDB封装成第三方库,可以通过类似于localStorage的调用方式使用;内置优雅降级,在不支持indexedDB或web sql时使用localStorage
1.vue引入
npm install localforageimport localforage from "localforage";
localforage.config({driver: localforage.INDEXEDDB});
Vue.prototype.$localforage = localforage;
2.调用方式
- promise方式:
localforage.setItem('key', 'value').then(function)
- 回调方式:
localforage.setItem('key', 'value', function)
3.数据API
- 获取:
getItem(key, successCallback)
- 设置:
setItem(key, value, successCallback)
- 删除:
removeItem(key, successCallback)
- 清空:
clear(successCallback)
- 长度:
length(successCallback)
- 索引:
key(keyIndex, successCallback)
- 全量:
keys(successCallback)
- 迭代:
iterate(iteratorCallback, successCallback)
4.设置API
setDriver(driverName/[driverNames])
- 强制使用特定的驱动或者固定优先级顺序的驱动
- driverName可选项
localforage.INDEXEDDB
localforage.WEBSQL
localforage.LOCALSTORAGE
config(options)
- 设置全局通用的配置,必须在调用数据API前调用该API
- options参数
- driver:驱动,规则与setDriver相同
- name:数据库名称,默认值:localforge
- size:数据库大小,仅用于web sql
- storeName:仓库名称,默认值:keyvaluepairs
- version:数据库版本
- description:数据库描述
5.驱动API
- 自定义驱动:
defineDriver(myCustomDriver)
- 返回正在使用驱动:
driver()
- 确定驱动是否启动:
ready()
- 判断浏览器是否支持driverName:
supports(driverName)
6.多实例
- 创建返回localForge实例:
createInstance(config)
- 删除数据库/仓库:
dropInstance({ name: '', storeName: '' })
10.web worker
使用场景多为需要复杂计算的操作,如大量数据处理等等
1.限制
- 同源:必须与主线程文件同源
- DOM:无法使用document、window、parent等对象,但可以使用navigator和location对象
- 通信:与主线程不在同一上下文,需要通过信息传递通信
- 脚本:不能执行alter、confirm方法,但可以使用XMLHttpRequest发出ajax请求
- 文件:无法读取本地文件,加载的脚本必须来自网络
2.主线程调用
// 根据脚本文件创建线程
let worker = new Worker('work.js')// 向线程传递信息
worker.postMessage('hello')
worker.postMessage({msg: 'hello'})// Transferable Objects传递二进制数据,仅在单一线程可用
let buffer = new ArrayBuffer(1);
worker.postMessage(buffer, [buffer])// 接收线程信息
worker.onmessage = function(event) {console.log(event.data)worker.postMessage('receive')
}// 接收线程错误
worker.onerror = function(event) {console.log(event)
}// 关闭线程
worker.terminate()
3.worker线程执行
// 加载其他脚本
importScripts('script.js')// 接收主线程信息
onmessage = function (event) {let data = e.dataswitch (data) {case 'start':// 向主线程传递信息postMessage('worker start')breakcase 'stop':postMessage('worker stop')// 内部关闭线程close()break;};
}
4.worker实例
// 线程中轮询,判断与缓存是否一致决定是否传递信息
function createWorker(f) {let blob = new Blob(['(' + f.toString() +')()'])let url = window.URL.createObjectURL(blob)let worker = new Worker(url)return worker
}let pollingWorker = createWorker(function (e) {let cachefunction compare(new, old) {}setInterval(function () {fetch('/my-api-endpoint').then(function (res) {let data = res.json();if (!compare(data, cache)) {cache = data;self.postMessage(data);}})}, 1000)
})pollingWorker.onmessage = function () {}
pollingWorker.postMessage('init')
11.SSE
网页自动获取来自服务器的更新,适用于服务器单向高频的数据发送
// 前端开启轮询
const source = new EventSource('/sse');
source.onopen = () => {console.log('轮询开启');
}
source.onmessage = (res) => {console.log('获得的数据是:' + res.data );
}
source.onerror = (err) => {console.log(err);
}// node.js后端传递信息
const http = require('http')
const fs = require('fs')
const server = http.createServer((req, res) => {const url = req.url;if (url === '/') {const data = fs.readFileSync('./index.html')res.end(data)} else if (url === '/sse') {res.setHeader("Content-type", "text/event-stream")setInterval(() => {res.write('data:' + new Date() + '\r\n\r\n')}, 2000);}
})
server.listen(3000)
12.WebSocket
客户端与服务端全双工通信
let ws = new WebSocket("ws://localhost:8080");// 显示指定收到的二进制数据类型
ws.binaryType = 'blob'// 判断web socket状态
switch (ws.readyState) {case WebSocket.CONNECTING:// do somethingbreak;case WebSocket.OPEN:// do somethingbreak;case WebSocket.CLOSING:// do somethingbreak;case WebSocket.CLOSED:// do somethingbreak;default:// this never happensbreak;
}ws.onopen = function(evt) {let data = new ArrayBuffer(10000000)// 发送信息ws.send(data)if (ws.bufferedAmount === 0) {// 发送完毕} else {// 发送还没结束}
};ws.onmessage = function(evt) {console.log( "Received Message: " + evt.data)ws.close()
}wx.onerror = function(evt) {console.log("Connection error" + evt)
}ws.onclose = function(evt) {console.log("Connection closed" + evt)
}
相关文章:
HTML5笔记
前端学习笔记专栏区别于官网中全面的知识讲解,主要记录学习技术栈时对于重点内容的提炼,便于对技术栈知识的快速回顾以及使用 1.canvas元素 内部坐标:坐标均以左上角为(0, 0),单一坐标均作为起始坐标创建对象: <c…...
前端架构师需要解决那些问题
假设你是一个大型后台管理系统的前端架构师,你需要解决那些问题? 1、Ui设计规范 大型系统UI得统一吧?各个业务模块的UI设计得高效吧?那就得有规范,直观的说就是原子设计那套东西。加一堆推荐设计稿。 2、基础组件库…...

使用python快速搭建接口自动化测试脚本实战总结
导读 本文将介绍如何使用python快速进行http/https接口自动化测试脚本搭建,实现自动请求、获取结果、数据对比分析,导出结果到Excel等功能,包括python的requests、pandas、openpyxl等库的基本使用方法。 测试需求介绍 通常,在我…...

android studio 字节码查看工具jclasslib bytecode viewer
jclasslib bytecode viewer 是一款非常好用的.class文件查看工具; jclasslib bytecode editor is a tool that visualizes all aspects of compiled Java class files and the contained bytecode. Many aspects of class files can be edited in the UI. In addit…...
Ubuntu上搭建FTP服务
要在Ubuntu上搭建FTP服务器,可以使用常见的FTP服务器软件如vsftpd(Very Secure FTP Daemon)或ProFTPD。以下是使用vsftpd在Ubuntu上设置FTP服务器的基本步骤: 步骤 1: 安装 vsftpd 打开终端并运行以下命令安装 vsftpd:…...

unity打AB包,AssetBundle预制体与图集(三)
警告: spriteatlasmanager.atlasrequested wasn’t listened to while 条件一:图片打图集里面去了 条件二:然后图集打成AB包了 条件三:UI预制体也打到AB包里面去了 步骤一:先加载了图集 步骤二:再加载UI预…...
在Javascript中为什么 0.1+0.2 不等于0.3 ? 源代码详细解析
在JavaScript中,浮点数计算可能会导致精度问题,这就是为什么0.1 0.2不等于0.3的原因。这是因为JavaScript使用IEEE 754标准来表示浮点数,而该标准使用二进制来表示小数。 让我们通过一个实例来详细解释这个问题。考虑以下代码: …...

MATLAB|热力日历图
目录 日历图介绍: 热力日历图的特点: 应用场景: 绘图工具箱 属性 (Properties) 构造函数 (Constructor) 公共方法 (Methods) 私有方法 (Private Methods) 使用方法 日历图介绍: 热力日历图是一种数据可视化形式…...

《golang设计模式》第三部分·行为型模式-05-仲裁者/中介模式(Mediator)
文章目录 1. 概述1.1 作用1.2 角色1.3 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 仲裁者(Mediator)可以封装和协调多个对象之间的耦合交互行为,以减弱这些对象之间的耦合关联。 1.1 作用 将多个对象相互耦合的设计转变为所有对象…...

7天入门python系列之准备工作
寄语 编者打算开一个python 初学主题的系列文章,用于指导想要学习python的同学。关于文章有任何疑问都可以私信作者。对于初学者想在7天内入门Python,这是一个紧凑的学习计划。但并不是不可完成的。 7天的安排 如果你想在7天内入门Python,…...
Go语言~反射
reflect包 type name和type kindValueOf通过反射获取值通过反射设置变量的值 package mainimport ("fmt""reflect" )func reflectType(x interface{}) {obj : reflect.TypeOf(x)fmt.Println(obj, obj.Name(), obj.Kind())fmt.Printf("obj type of %…...

详解交叉验证中【KFold】【Stratified-KFold】【StratifiedShuffleSplit】的区别
交叉验证是一种统计分析方法,它的目的是通过在同一数据集上重复并分割训练和测试数据,来评估机器学习模型的性能。以下是这三种交叉验证方法的区别: KFold(K-折叠) 在KFold交叉验证中,原始数据集被分为K个…...

数学建模比赛中常用的建模提示词(数模prompt)
以下为数学建模比赛中常用的建模提示词,希望对你有所帮助! 帮我总结一下数学建模有哪些预测类算法? 灰色预测模型级比检验是什么意思? 描述一下BP神经网络算法的建模步骤 对于分类变量与分类变量相关性分析用什么算法 前10年的数据分别是1&a…...

Spark 新特性+核心回顾
Spark 新特性核心 本文来自 B站 黑马程序员 - Spark教程 :原地址 1. 掌握Spark的Shuffle流程 1.1 Spark Shuffle Map和Reduce 在Shuffle过程中,提供数据的称之为Map端(Shuffle Write)接收数据的称之为Reduce端(Sh…...

STM32 TIM定时器,配置,详解(1)
计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动重载寄存器(TIMx_ARR)。 PSC预分频器,顾名思义,先预备一下分频,有时候频率过高,后面的定时器承受不住,就先用PSC先分频一下。如何分频的?将每接受到…...

Helix Toolkit:为.NET开发者带来的3D视觉盛宴
推荐一个基于.Net开源的3、功能强大的3D图形库和工具包,适用于WPF应用程序的3D渲染和开发。 01 项目简介 Helix Toolkit是一个开源的3D库,主要用于WPF应用程序。它有许多优点,例如提供各种各样的功能,包括基于MVVM的3D模型编辑器…...

PHP分类信息网站源码系统 电脑+手机+微信端三合一 带完整前后端部署教程
大家好啊!今天源码小编来给大家分享一款PHP分类信息网站类源码系统。这款源码系统是一套专业的信息发布类网站综合管理系统,适合各类地方信息和行业分类站点建站。随着这几年我们国家网民爆炸式的增 长,网络信息也随之越来越庞大,…...

2023年辽宁省数学建模竞赛B题数据驱动的水下导航适配区分类预测
2023年辽宁省数学建模竞赛 B题 数据驱动的水下导航适配区分类预测 原题再现: “海洋强国”战略部署已成为推动中国现代化建设的重要组成部分,国家对此提出“发展海洋经济,保护海洋生态环境,加快建设海洋强国”的明确要求。 …...
完蛋!百融云被大阳线包围了!
没想到让AI指数爬出底部的,不是离婚的两口子承诺不减持了,而是国产游戏圈神作《完蛋!我被女友包围了》。确实,资本市场不相信眼泪,AI的涨跌也与爱情无关。 之前有一个来自美国和澳大利亚的大数据团队做过一个有趣的统…...
数据结构 编程1年新手视角的平衡二叉树AVL从C与C++实现③
对应地,我们可以将insert函数中省略的操作补上 if(getBalance(node)2){ if(getBalance(node->left)1){ noderightRotate(node); //对应LL型 } else if(getBalance(node->left)-1{ node->left leftRotate(node->left); //对应LR型 noderightRotate(n…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...