前端学习笔记-Web APls篇-05

news2024/12/25 9:19:30

Bom操作

1.Window对象

 1.1BOM(浏览器对象模型)

BOM(Browser Object Model ) 是浏览器对象模型

  • window对象是一个全局对象,也可以说是JavaScript中的顶级对象
  • 像document、alert()、console.log()这些都是window的属性,基本BOM的属性和方法都是window的。
  • 所有通过var定义在全局作用域中的变量、函数都会变成window对象的属性和方法
  • window对象下的属性和方法调用的时候可以省略window 


1.2定时器-延时函数

JavaScript 内置的一个用来让代码延迟执行的函数,叫 setTimeout

语法:

setTimeout 仅仅只执行一次,所以可以理解为就是把一段代码延迟执行, 平时省略window

清除延时函数:

注意点:

延时器需要等待,所以后面的代码先执行

每一次调用延时器都会产生一个新的延时器 

两种定时器对比:执行的次数

延时函数:执行一次

间歇函数:每隔一段时间就执行一次,除非手动清除

案例:5秒钟之后消失的广告

需求:5秒钟之后,广告自动消失

分析:

  • ①:设置延时函数
  • ②:隐藏元素
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    img {
      position: fixed;
      left: 0;
      bottom: 0;
    }
  </style>
</head>

<body>
  <img src="./images/ad.png" alt="">
  <script>
    // 1.获取元素
    const img = document.querySelector('img')
    setTimeout(function () {
      img.style.display = 'none'
    }, 3000)
  </script>
</body>

</html>

1.3JS执行机制

经典面试题目:

结果均为111133332222

JavaScript 语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。

这是因为 Javascript 这门脚本语言诞生的使命所致——JavaScript 是为处理页面中用户的交互,以及操作 DOM 而诞生的。比如我们对某个 DOM 元素进行添加和删除操作,不能同时进行。 应该先进行添加,之 后再删除。

单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。这样所导致的问题是: 如果 JS 执行的时间过长,这样就会造成页面的渲染不连贯,导致页面渲染加载阻塞的感觉。

为了解决这个问题,利用多核 CPU 的计算能力,HTML5 提出 Web Worker 标准,允许 JavaScript 脚本创建多个 线程。于是,JS 中出现了同步和异步。

同步 前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的、同步的。比如做饭的同 步做法:我们要烧水煮饭,等水开了(10分钟之后),再去切菜,炒菜。【按顺序来不可以打乱】

异步 你在做一件事情时,因为这件事情会花费很长时间,在做这件事的同时,你还可以去处理其他事 情。比如做饭的异步做法,我们在烧水的同时,利用这10分钟,去切菜,炒菜。

他们的本质区别: 这条流水线上各个流程的执行顺序不同。

同步任务

同步任务都在主线程上执行,形成一个执行栈

 异步任务

JS 的异步是通过回调函数实现的。 一般而言,异步任务有以下三种类型:

  • 1、普通事件,如 click、resize 等
  • 2、资源加载,如 load、error 等
  • 3、定时器,包括 setInterval、setTimeout 等

异步任务相关添加到任务队列中(任务队列也称为消息队列)。

1. 先执行执行栈中的同步任务。

2. 异步任务放入任务队列中。

3. 一旦执行栈中的所有同步任务执行完毕,系统就会按次序读取任务队列中的异步任务,于是被读取的异步任务结束等待 状态,进入执行栈,开始执行。 

由于主线程不断的重复获得任务、执行任务、再获取任务、再执行,所以这种机制被称为事件循环( event loop)


1.4location对象

location 的数据类型是对象,它拆分并保存了 URL 地址的各个组成部分

常用属性和方法:

href 属性获取完整的 URL 地址,对其赋值时用于地址的跳转

案例 5秒钟之后跳转的页面

需求:用户点击可以跳转,如果不点击,则5秒之后自动跳转,要求里面有秒数倒计时

分析: ①:目标元素是链接 ②:利用定时器设置数字倒计时 ③:时间到了,自动跳转到新的页面

search 属性获取地址中携带的参数,符号 ?后面部分

hash 属性获取地址中的啥希值,符号 # 后面部分

后期vue路由的铺垫,经常用于不刷新页面,显示不同页面,比如 网易云音乐 

reload 方法用来刷新当前页面,传入参数 true 时表示强制刷新


1.5navigator对象

navigator的数据类型是对象,该对象下记录了浏览器自身的相关信息

通过 userAgent 检测浏览器的版本及平台

// 检测 userAgent(浏览器信息)
!(function () {
  const userAgent = navigator.userAgent
  // 验证是否为Android或iPhone
  const android = userAgent.match(/(Android);?[¥$¥/]+([¥d.]+)?/)
  const iphone = userAgent.match(/(iPhone¥sOS)¥s([¥d_]+)/)

  // 如果是Android或iPhone,则跳转至移动站点
  if (android || iphone) {
      location.href = 'http://m.itcast.cn'
  }
})()


1.6histroy对象

history 的数据类型是对象,主要管理历史记录, 该对象与浏览器地址栏的操作相对应,如前进、后退、历史记 录等

常用属性和方法

history 对象一般在实际开发中比较少用,但是会在一些 OA 办公系统中见到。


2.本地存储

以前我们页面写的数据一刷新页面就没有了

随着互联网的快速发展,基于网页的应用越来越普遍,同时也变的越来越复杂,为了满足各种各样的需求,会经常 性在本地存储大量的数据,HTML5规范提出了相关解决方案。

  • 1、数据存储在用户浏览器
  • 2、设置、读取方便、甚至页面刷新不丢失数据
  • 3、容量较大,sessionStorage和localStorage约 5M 左右

常见的使用场景:

https://todomvc.com/examples/vanilla-es6/ 页面刷新数据不丢失

仅存储数据类型字符串

本地存储分类- localStorage

作用: 可以将数据永久存储在本地(用户的电脑), 除非手动删除,否则关闭页面也会存在

特性:

  • 可以多窗口(页面)共享(同一浏览器可以共享)
  • 以键值对的形式存储使用

语法:

存储数据: localStorage.setItem(key, value)

获取数据: localStorage.getItem(key)

删除数据: localStorage.removeItem(key)

本地存储分类- sessionStorage 

特性:

  • 生命周期为关闭浏览器窗口
  • 在同一个窗口(页面)下数据可以共享
  • 以键值对的形式存储使用
  • 用法跟localStorage 基本相同

存储复杂数据类型

语法:JSON.stringify(复杂数据类型)

 将复杂数据转换成JSON字符串 存储 本地存储中

因为本地存储里面取出来的是字符串,不是对象,无法直接使用;把取出来的字符串转换为对象

语法:JSON.parse(JSON字符串) 

将JSON字符串转换成对象 取出 时候使用


3.综合案例

APIs-day5-132-综合案例-读取本地存储数据_哔哩哔哩_bilibili

数组中map方法  迭代数组

map 可以处理数据,并且返回新的数组 

数组中join方法 

join() 方法用于把数组中的所有元素转换一个字符串

数组元素是通过参数里面指定的分隔符进行分隔的

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2116638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT&#xff0c;这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频&#xff0c;并利用 SAM 2 进行 3D 空间分割&#xff0c;无需进一步训练或 2D-3D 投影。 我们的框架…

ML19_GMM高斯混合模型详解

1. 中心极限定理 中心极限定理&#xff08;Central Limit Theorem, CLT&#xff09;是概率论中的一个重要定理&#xff0c;它描述了在一定条件下&#xff0c;独立同分布的随机变量序列的标准化和的分布趋向于正态分布的性质。这个定理在统计学中有着广泛的应用&#xff0c;尤其…

算法篇_C语言实现霍夫曼编码算法

一、前言 霍夫曼编码&#xff08;Huffman Coding&#xff09;是一种广泛使用的数据压缩算法&#xff0c;特别适用于无损数据压缩。它是由David A. Huffman在1952年提出的&#xff0c;并且通常用于文件压缩和传输中减少数据量。霍夫曼编码的核心思想是使用变长编码表对源数据进…

提升效率必备!学习awk命令,轻松搞定数据

在日常的工作中&#xff0c;无论是数据处理、日志分析&#xff0c;还是格式化输出&#xff0c;AWK命令都是不可或缺的利器。AWK是一种强大的文本处理工具&#xff0c;能让你轻松处理复杂的数据&#xff0c;提升工作效率。本文将为你介绍AWK的基本功能及一些实用场景&#xff0c…

树 --- 二叉树

树的物理结构和逻辑结构上都是树形结构。 树形结构&#xff1a;由一个根和若干个子节点组成的集合。 最外围的为叶子节点&#xff1a;只有前驱而没有后继。 &#xff08;一&#xff09;树的性质 • ⼦树是不相交的 • 除了根结点外&#xff0c;每个结点有且仅有⼀个⽗结点 •…

每天五分钟玩转深度学习框架PyTorch:将nn的神经网络层连接起来

本文重点 前面我们学习pytorch中已经封装好的神经网络层,有全连接层,激活层,卷积层等等,我们可以直接使用。 如代码所示我们直接使用了两个nn.Linear(),这两个linear之间并没有组合在一起,所以forward的之后,分别调用了,在实际使用中我们常常将几个神经层组合在一起…

【EI会议征稿通知】第十一届机械工程、材料和自动化技术国际会议(MMEAT 2025)

第十一届机械工程、材料和自动化技术国际会议&#xff08;MMEAT 2025&#xff09; 2025 11th International Conference on Mechanical Engineering, Materials and Automation Technology 本次大会旨在汇聚全球机械工程、材料科学及自动化技术的创新学者和行业专家&#xff0…

使用 BentoML快速实现Llama-3推理服务

介绍 近年来&#xff0c;开源大模型如雨后春笋般涌现&#xff0c;为自然语言处理领域带来了革命性的变化。从文本生成到代码编写&#xff0c;从机器翻译到问答系统&#xff0c;开源大模型展现出惊人的能力&#xff0c;吸引了越来越多的开发者和企业投身其中。 然而&#xff0…

Subclass-balancing Contrastive Learning for Long-tailed Recognition

文章目录 SCL(supervised contrastive learning)1. 监督对比学习&#xff08;SCL&#xff09;的基本概念2. SCL的损失函数3. 长尾数据集的问题4. k-正样本对比学习&#xff08;KCL&#xff09;的引入5. 总结 SBCL举例说明&#xff1a;狗的分类 关键点&#xff1a;划分为多个子类…

4-1.Android Camera 之 CameraInfo 编码模板(前后置摄像头理解、摄像头图像的自然方向理解)

一、Camera.CameraInfo Camera.CameraInfo 是用于获取设备上摄像头信息的一个类&#xff0c;它提供摄像头的各种详细信息&#xff0c;例如&#xff0c;摄像头的方向、是否支持闪光灯等&#xff0c;以下是它的常用属性 static int CAMERA_FACING_BACK&#xff1a;表示设备的后置…

Protobuf库的使用

文章目录 Protobuf是什么Protobuf使⽤流程介绍ProtoBuf的使用创建.proto⽂件指定proto3语法package声明符定义消息&#xff08;message&#xff09;编译contacts.proto⽂件命令如下&#xff1a;序列化与反序列化的使⽤ Protobuf是什么 ProtoBuf&#xff08;全称ProtocolBuffer…

数字 FPV 革命 – DJI、Leadcore 和 Artosyn 的三角关系。

人们对 DJI、Caddx FPV 以及 HDZero 等公司最近推出的数字 FPV 系统的起源进行了大量的猜测和推测。随着 Avatar 系统的发布&#xff0c;也有许多人认为它要么使用与 DJI 相同的芯片组&#xff0c;要么是复制品或克隆品。在本文中&#xff0c;我将尝试揭开这一切的神秘面纱&…

python spider novel

python msedgedriver 获取小说 声明&#xff1a;只为学习/练习技术 from lxml import etree from selenium import webdriver from selenium.webdriver.edge.service import Service from selenium.webdriver.edge.options import Optionsimport time# 初始化EdgeOptions, 以…

【系统规划与管理师】【案例分析】【考点】【答案篇】第4章 IT服务规划设计

【问题篇】☞【系统规划与管理师】【案例分析】【考点】【问题篇】第4章 IT服务规划设计 【移动端浏览】☞【系统规划与管理师】【案例分析】【模拟考题】章节考题汇总&#xff08;第4章&#xff09;&#xff08;答案篇&#xff09;&#xff08;共38个知识点&#xff09; 第4章…

《数字信号处理》学习05-单位冲击响应与系统响应

目录 一&#xff0c;单位冲激响应 二&#xff0c;LTI系统对任意序列的系统响应 三&#xff0c;LTI系统的性质 通过上一篇文章《数字信号处理》学习04-离散时间系统中的线性时不变系统-CSDN博客的学习&#xff0c;我已经知道了离散时间线性时不变系统&#xff08;LTI&#x…

基于 jenkins 的持续测试方案

CI/CD Continuous Integration; Continuous Deployment; 持续集成&#xff0c;将新代码和旧代码一起打包、构建&#xff1b;持续部署&#xff0c;将新构建的包进行部署&#xff1b;持续测试&#xff0c;将新代码、新单元测试一起测试&#xff1b;方案&#xff1a; 公有云DevO…

Python 控制Chrome浏览器使用Selenium4操作点击百度搜索

前面我们讲到如何安装Selenium和ChromeDriver来驱动打开网页,现在我们有一个目的就是使用python来控制chrome浏览器打开百度并搜索 直接先上调试好的代码 from time import sleepfrom selenium import webdriver from selenium.webdriver.common.keys import Keys from selen…

2-88 基于matlab的四叉树加权聚焦多聚焦图像融合

基于matlab的四叉树加权聚焦多聚焦图像融合&#xff0c;的四叉树分解策略将源图像被分解成四叉树结构中具有最佳尺寸的块。在这个树形结构中&#xff0c;使用一种新的加权焦点测量方法&#xff08;名为加权修正拉普拉斯之和&#xff09;来检测焦点区域。可以很好地从源图像中提…

1934. 数字游戏(number)

代码 #include<bits/stdc.h> using namespace std; int main() {int ans0,i;string s;cin>>s;for(i0;i<7;i)if(s[i]1)ans;cout<<ans;return 0; } 记得点赞关注收藏&#xff01;&#xff01;&#xff01;谢谢&#xff01;&#xff01;&#xff01;

基于huffman树的文件压缩项目以及相关测试

前言 项目采用Huffman编码的方式进行文件压缩与解压缩。主要原理是通过Huffman编码来表示字符&#xff0c;出现次数多的编码短&#xff0c;出现次数少的编码长&#xff0c;这样整体而言&#xff0c;所需要的bit位是减少的&#xff0c;就实现了文件压缩功能。读取文件中的字符出…