百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

「JavaScript 从入门到精通」18.WebApi介绍

myzbx 2025-01-01 21:41 28 浏览

前置知识:

需要了解 JS 对象 的相关知识。

1.WebAPI介绍

API:应用程序接口,是基于编程语言构建的结构,使开发人员更容易地创建复杂的功能。它们抽象了复杂的代码,并提供一些简单的接口规则直接使用。

客户端JavaScript提供很多可用的API,他们本身不是JavaScript语言的一部分,却建立在JavaScript语言核心的顶部,为使用JavaScript代码提供额外的超强能力。他们通常分为两类:

  • 浏览器API:
  • 内置于Web浏览器,可以从浏览器和电脑周围环境获取数据,并用于复杂的操作。例如Geolocation API提供了一些简单的JavaScript结构来获取位置数据,这种API通常抽象很多复杂逻辑,我们只要调用API即可。
  • 第三方API:
  • 缺省情况下不会内置于浏览器,而必须在Wen中某个地方获取代码和信息,例如Twitter API可以推送最新推文给我们,它提供一系列第三方API让我们获取Twitter的服务和信息。

1.1 API如何工作

那么,这些API是如何工作的?

不同的JavaScript的API工作内容不同,但具有以下几个相同点:

  1. 都是基于对象
  2. API通过使用一个或多个JavaScript对象与我们的代码交互,这些对象作为API使用的数据(包含在对象属性中)的容器,和API提供的功能(包含在对象的方法中)。
  3. 如Geolocation API则是由以下几个对象组成:
  • Geolocation, 包含三种控制地理数据检索的方法。
  • Position, 表示在给定的时间的相关设备的位置。它包含一个当前位置的Coordinates 对象。还包含了一个时间戳,这个时间戳表示获取到位置的时间。
  • Coordinates,包含有关设备位置的大量有用数据,包括经纬度,高度,运动速度和运动方向等。

通常这么使用:

  1. 都有可识别的入口点 即API的入口位置,如Geolocation API的入口在Navigator.geolocation 属性, 它返回浏览器的 Geolocation 对象,所有有用的地理定位方法都可用。
  2. 在**文档对象模型(DOM)**的API入口位置更简单,常常都挂载在Document对象上,或者HTML元素上:

详细的后面介绍。

  1. 都使用事件来处理状态的变化 有些特定的API会包含一些事件,当事件触发,我们便可以运行函数的处理属性,做一些不同的操作。例如XMLHttpRequest对象的实例,有很多的事件可以调用。
  1. 都会在适当位置提供额外的安全机制 主要还是处于安全考虑,提供额外的安全机制,比如常见同源策略,一些特定页面只能在https协议的网页工作等。

接下来看看这些API都能实现什么作用。

2.文档API

我们在开发web页面和应用时,就会经常操作页面文档的结构,这里就会大量用到document对象,控制HTML和样式信息的文档对象模型(DOM)。

下面贴一张web页面视图中的浏览器的主要部分(来源MDN):

介绍:

  • window:是载入浏览器的标签,JavaScript中用Window对象表示,可以实现很多操作:获取窗口大小,操作载入窗口的文档,存储文档数据等。
  • navigator:浏览器存在web上的状态和表示(即用户代理),JavaScript中用Navigator对象表示,用于获取对象的一些信息,如:摄像头的地理信息,用户偏爱的语言等。
  • document:是实际载入窗口的页面,JavaScript中用Document对象表示,可以实现很多文档操作:获取DOM元素,修改文本内容,设置新样式等。

2.1 文档对象模型(DOM)

在浏览器标签中当前载入的文档用文档对象模型(Document Object Model,简称DOM)表示。

这是一个由浏览器生成的“树结构”,使得编程语言可以很容易访问HTML结构,操作等。

下面是基本的DOM操作:

这么一个简单的例子,实际可以看出DOM提供的方法很多,下面分类介绍下这些方法:

  1. DOM HTML操作
  • 改变HTML输出流:
  • 通过document.write()直接修改HTML输出流写内容。
document.write("hello leo");

**注意:**千万不要在文档加载之后使用,否则覆盖文档。

  • 改变HTML内容:
  • 通过innerHTML属性来改变HTML元素的内容:

例子:

document.getElementById("id1").innerHTML = "hello leo!"
  • 改变HTML属性:
  • 通过attribute属性来改变元素的属性:
document.getElementById(id).attribute = new value

例子:

<img id = "id1" src ="a.jpg">
document.getElementById("id1").src = "leo.png";

详细的文档可以查看HTML DOM Document 对象

  1. DOM CSS操作
  • 改变HTML样式
  • 通过style.styleName属性修改元素的样式:

document.getElementById(id).style.property = new style;

例子:

注意:style后面的样式的属性名只能使用命名小驼峰。

  1. DOM 事件操作
  2. 如要对元素做点击事件的绑定,可以在HTML的onclick事件属性上绑定方法:

另外可以绑定的事件类型还有很多:

详细的文档可以查看HTML DOM Event 对象

  1. DOM 节点操作
  • 创建新的HTML元素
  • 需要先创建一个新元素节点,然后在使用appendChild方法,向一个已存在的元素上追加这个新元素:
  • 删除已有的HTML元素
  • 如果需要删除HTML元素,就必须先获得该元素的父元素,再使用removeChild方法删除:

2.2 Window对象

Window 对象表示浏览器中打开的窗口。

Window 对象涉及到的属性和方法非常多,具体可以查看 Window 对象 比较详细。

这里一个简单的例子,实现获取视窗(显示文档的内部窗口)的宽高,并设置给指定的Div元素,并且当我们调整窗口时候,也会及时改变Div的宽高。

3.获取服务器数据API

这一部分主要复习Ajax(全称:Asynchronous JavaScript and XML)。

Ajax主要要解决的问题是:避免重复加载刷新整个页面,因为有时候我们只是小部分数据更新,这时候我们这要刷新这部分的数据,而不是整个页面。

Ajax不是新的编程语言,而是一种使用现有标准的新方法。

下面看一下Ajax模型图:

Ajax模型包括使用Web API作为代理来更智能地请求数据,而不仅仅是让浏览器重新加载整个页面。让我们来思考这个意义:

比如:我们逛淘宝,搜索或打开商品页面时,顶部导航来和页眉页脚等,都保持不变。

这样做的好处:

  • 页面更新更快,减少等待刷新,体验更好,响应更快。
  • 下载的数据更少,减少带宽的浪费。

另外为了提高加载速度,网站有时候也会将首次请求和数据存储在用户计算机中,下次再请求就直接先使用本地版本,如果内容有更新才会去服务器获取新数据,原理图:

3.1 Ajax基础使用

XMLHttpRequest 是 AJAX 的基础。 所有现代浏览器均支持 XMLHttpRequest 对象(IE5 和 IE6 使用 ActiveXObject)。

创建 XMLHttpRequest 对象的语法:

为了兼容所有浏览器(包括IE5 IE6),我们就必须检查浏览器是否支持XMLHttpRequest对象,若支持则创建XMLHttpRequest对象,否则创建ActiveXObject对象。

3.2 Ajax发送请求

向服务器发送请求时,我们可以使用 XMLHttpRequest 对象的 open() 和 send() 方法:

my_http.open(method,url,async); 
my_http.send(string);

参数解释:

open(method,url,async)方法接收三个参数:

  • method:请求的类型;GET 或 POST。
  • url:文件在服务器上的位置。
  • async:true(异步)或 false(同步)。

send(string)方法接收一个参数:

  • string:仅用于 POST 请求。

例子:

如果POST请求的话需要设置HTTP头:

setRequestHeader(header,value)

参数解释:

setRequestHeader(header,value)方法接收两个参数:

  • header: 规定头的名称。
  • value: 规定头的值。

3.3 Ajax服务器响应

接收服务器响应,我们可以使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。

  • responseText:获得字符串形式的响应数据。
  • responseXML:获得 XML 形式的响应数据。
  • responseText属性 当服务端的响应不是XML,使用responseText属性。
  • 若是字符串的响应就可以直接使用。
document.getElementById("id1").inndeHTML = my_http.responseText;

3.4 Ajax readyState

readyState保存着XMLHttpRequest对象的状态。

我们发送Ajax请求的整个过程中,XMLHttpRequest对象的readyState会改变,当readyState改变的时候会触发onreadystatechange事件。

XMLHttpRequest对象的三个重要属性:

属性描述onreadystatechange存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。readyState存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。0(请求未初始化),1(服务器连接已建立),2(请求已接收),3(请求处理中),4(请求已完成,且响应已就绪)status200("OK"),404(未找到页面)

通常我们会在readyState等于4且status等于200时候表示响应已就绪,可以执行业务操作:

if (xmlhttp.readyState==4 && xmlhttp.status==200){
 // 网络请求成功后,执行的操作
}

4.图形绘制API

这里主要介绍的是HTML5新增的canvas元素,JavaScript为canvas添加了很多API,进一步增强canvas。

canvas 元素可以通过JavaScript脚本,在网页上绘制图形。

比如,它可以被用来绘制图形,制作图片集合,甚至用来实现动画效果。你可以(也应该)在元素标签内写入可提供替代的的代码内容,这些内容将会在在旧的、不支持canvas元素的浏览器或是禁用了JavaScript的浏览器内渲染并展现。

详细完整的课程推荐:

  1. MDN Canvas教程
  2. W3C HTML5 Canvas

下面复习一下canvas的一个使用流程:

4.1 简单绘制

  1. 创建画布,规定元素id、宽度和高度

要在网页中创建 2D 或者 3D 场景,必须在 HTML 文件中插入一个canvas元素,以界定网页中的绘图区域。

<canvas id="id1" width="200" height="100">
 卧槽你的浏览器竟然不支持 canvas!
</canvas>

在canvas标签内,写一些浏览器不支持画布功能时候的提示内容。

画布默认尺寸为 300 × 150 像素。

  1. 获取画布上下文,并完成设置

我们需要获得一个对绘画区域的特殊的引用(称为“上下文”)用来在画布上绘图。可通过 HTMLCanvasElement.getContext() 方法获得基础的绘画功能,需要提供一个字符串参数来表示所需上下文的类型。

下面创建一个2d画布:

let ctx = canvas.getContext("2d");

ctx 变量包含一个 CanvasRenderingContext2D 对象,画布上所有绘画操作都会涉及到这个对象。

下面将画布背景涂黑:

ctx.fillStyle = 'rgb(0, 0, 0)';
ctx.fillRect(0, 0, 200, 100);

4.2 绘制基础

首先需要知道一些2D画布的知识,画布左上角的坐标是(0, 0),横坐标(x)轴向右延伸,纵坐标(y)轴向下延伸。

  1. 绘制实线
  1. 绘制矩形
  2. fillRect(x, y, width, height) 绘制一个填充的矩形
  3. strokeRect(x, y, width, height) 绘制一个矩形的边框
  4. clearRect(x, y, width, height) 清除指定矩形区域,让清除部分完全透明。
  5. x与y指定了在canvas画布上所绘制的矩形的左上角(相对于原点)的坐标。
  6. width和height设置矩形的尺寸。
  1. 绘制路径 可以通过路径来实现复杂的图形,下面整理了一些常用到的方法:
  • beginPath():在画笔当前所在位置开始绘制一条路径。在新的画布中,画笔起始位置为 (0, 0)。
  • moveTo():将画笔移动至另一个坐标点,不记录、不留痕迹,只将画笔“跳”至新位置。
  • fill():通过为当前所绘制路径的区域填充颜色来绘制一个新的填充形状。
  • stroke():通过为当前绘制路径的区域描边,来绘制一个只有边框的形状。
  • 路径也可和矩形一样使用 lineWidth 和 fillStyle / strokeStyle 等功能。
  1. 绘制圆形
  2. arc(x, y, radius, startAngle, endAngle, anticlockwise) 画一个以(x,y)为圆心的以radius为半径的圆弧(圆),从startAngle开始到endAngle结束,按照anticlockwise给定的方向(默认为顺时针)来生成。
  3. arcTo(x1, y1, x2, y2, radius) 根据给定的控制点和半径画一段圆弧,再以直线连接两个控制点。

arc方法,该方法有六个参数:

  • x,y为绘制圆弧所在圆上的圆心坐标。
  • radius为半径。
  • startAngle以及endAngle参数用弧度定义了开始以及结束的弧度。
  • anticlockwise是布尔值,为true时,是逆时针方向,否则顺时针方向。
  • 这些都是以x轴为基准。

注意:arc()函数中表示角的单位是弧度,不是角度。角度与弧度的js表达式:

弧度=(Math.PI/180)*角度。

  1. 绘制文本
  2. fillText(text, x, y [, maxWidth]) 在指定的(x,y)位置填充指定的文本,绘制的最大宽度是可选的.
  3. strokeText(text, x, y [, maxWidth]) 在指定的(x,y)位置绘制文本边框,绘制的最大宽度是可选的.

另外还有一些有样式的文本,可以使用这些属性:

  • font = value 当前绘制的文本字体.默认是 10px sans-serif。
  • textAlign = value 文本对齐选项. 可选的值包括:start, end, left, right or center. 默认值是 start。
  • textBaseline = value 基线对齐选项. 可选的值包括:top, hanging, middle, alphabetic, ideographic, bottom。默认值是 alphabetic。
  • direction = value 文本方向。可能的值包括:ltr, rtl, inherit。默认值是 inherit。
  1. 绘制图片
  • drawImage(image, x, y) 其中 image 是 image 或者 canvas 对象,x 和 y 是其在目标 canvas 里的起始坐标。

drawImage方法还有更多参数:

ctx.drawImage(image, 20, 20, 185, 175, 50, 50, 185, 175);
  • 第一个参数不变,为图片引用。
  • 参数 2、3 表示裁切部分左上顶点的坐标,参考原点为原图片本身左上角的坐标。原图片在该坐标左、上的部分均不会绘制出来。
  • 参数 4、5 表示裁切部分的长、宽。
  • 参数 6、7 表示裁切部分左上顶点在画布中的位置坐标,参考原点为画布左上顶点。
  • 参数 8、9 表示裁切部分在画布中绘制的长、宽。本例中绘制时与裁切时面积相同,你也可以定制绘制的尺寸。

详细完整的课程推荐:

  1. MDN Canvas教程
  2. W3C HTML5 Canvas

5.视频音频API

HTML5提供了用于文档中嵌入富媒体的元素<video>和<audio>标签,通过元素自带的API来控制视频和音频的播放搜索等。

5.1 视频

当前,video 元素支持三种视频格式:Ogg/MPEG4和WebM。

简单使用:

连接不同视频:

<video> 与 </video> 之间插入的内容是供不支持 video 元素的浏览器显示的。

<video> 标签的属性:

另外我们可以为视频创建简单的播放/暂停和调整尺寸的控件,这里需要使用play()和 pause() 还有两个属性:paused 和 width。

更多方法可以查看 HTML5 video - 方法、属性以及事件

5.2 音频

audio 元素能够播放声音文件或者音频流。

当前,audio 元素支持三种视频格式:Ogg Vorbis/MP3和Wav。

简单使用:

<audio src="1.ogg" controls="controls"></audio>

control 属性供添加播放、暂停和音量控件。

<audio> 与 </audio> 之间插入的内容是供不支持 audio 元素的浏览器显示的。

连接不同音频:

<audio> 标签的属性:

6.客户端存储API

现代web浏览器会提供一些在客户端存储用户数据的方法,只要用户允许,可以随时取出使用。

使用客户端存储API可以存储的数据量是优先的,具体取决于浏览器或者用户设置 。

存储的方式可以这样分类:

  1. 传统方法:cookies
  2. cookie使用比较久了,过时,存在各种安全问题,而且无法存储复杂数据,可能唯一的优势就是对非常老旧浏览器支持,如果业务需要,也可以使用cookie
  3. 新流派:Web Storage 和 IndexedDB
  4. 现代浏览器所提供的更加简单有效的客户端储存API。
  5. 未来:Cache API
  6. 一些现代浏览器支持新的 Cache API。这个API是为存储特定HTTP请求的响应文件而设计的,它对于像存储离线网站文件这样的事情非常有用,这样网站就可以在没有网络连接的情况下使用。缓存通常与 Service Worker API 组合使用,尽管不一定非要这么做。

6.1 WebStorage

web storageAPI只需存储简单的 键/值对的数据(限制为字符串、数字等类型),并在需要的时候检索其值。

web storageAPI提供了两种在客户端存储数据的新方法:

  • localStorage : 一直保存数据,甚至到浏览器关闭又开启后也是这样
  • sessionStorage : 只要浏览器开着,数据就会一直保存 (关闭浏览器时数据会丢失)

localStorage方法:

  • localStorage.setItem(key, value):存储一个数据。
  • localStorage.getItem(key):读取一个数据。
  • localStorage.removeItem(key):删除一个数据。

关闭浏览器以后数据还在。

sessionStorage方法:

  • sessionStorage.setItem(key, value):存储一个数据。
  • sessionStorage.getItem(key):读取一个数据。
  • sessionStorage.removeItem(key):删除一个数据。

关闭浏览器以后数据不在。

7.第三方API

并不是所有的API都是内置在浏览器中,有一些可能是其他网站(如谷歌,Facebook等)提供的API,让开发者调用,从而使用他们的服务和数据等。

API通过使用一个或多个JavaScript对象与我们的代码交互,这些对象作为API使用的数据(包含在对象属性中)的容器,和API提供的功能(包含在对象的方法中)。

例如我们调用谷歌地图的Google Maps APIs ,需要先引入他们开放的JavaScript库。

<script type="text/javascript" src="https://maps.google.com/maps/api/js?key=AIzaSyDDuGt0E5IEGkcE6ZfrKfUtE9Ko_de66pA"></script>

然后就可以这么使用:

如Geolocation API则是由以下几个对象组成:

  • Geolocation, 包含三种控制地理数据检索的方法。
  • Position, 表示在给定的时间的相关设备的位置。它包含一个当前位置的Coordinates 对象。还包含了一个时间戳,这个时间戳表示获取到位置的时间。
  • Coordinates,包含有关设备位置的大量有用数据,包括经纬度,高度,运动速度和运动方向等。

公众号:前端自习课

往期回顾

「JavaScript 从入门到精通」1.语法和数据类型

「JavaScript 从入门到精通」2.流程控制和错误处理

「JavaScript 从入门到精通」3.循环和迭代

「JavaScript 从入门到精通」4.函数

「JavaScript 从入门到精通」5.表达式和运算符

「JavaScript 从入门到精通」6.数字

「JavaScript 从入门到精通」7.时间对象

「JavaScript 从入门到精通」8.字符串

「JavaScript 从入门到精通」9.正则表达式

「JavaScript 从入门到精通」10.数组

「JavaScript 从入门到精通」11.Map和Set对象

「JavaScript 从入门到精通」12.使用对象

「JavaScript 从入门到精通」13.迭代器和生成器

「JavaScript 从入门到精通」14.元编程

「JavaScript 从入门到精通」15.JS对象介绍

「JavaScript 从入门到精通」16.JSON对象介绍

「JavaScript 从入门到精通」17.闭包

相关推荐

别让水 “跑” 出卫生间!下沉设计打造滴水不漏的家

你是否遭遇过卫生间的水“偷偷溜”进客厅,导致木地板鼓起、墙角发霉的糟心事?又是否为卫生间门口反复渗漏,不得不一次次返工维修而头疼不已?在家庭装修中,卫生间防水堪称“兵家必争之地”,而卫生间门口下...

歼-10CE vs 阵风:谁才是空中霸主?全面性能对比解析

歼10CE与法国阵风战斗机性能深度对比分析一、总体定位与设计哲学歼10CE:单发中型多用途战斗机,侧重于空优(制空权争夺)和对地对海打击,具有较高的性价比和较强的多任务能力。法国阵风战斗机:双发中型多...

知名移植工作室肯定Switch2的图形性能,却被CPU拖了后腿

虽然Switch2发售多日,但没入手的玩家对其性能还是有顾虑。近日,知名移植工作室Virtuos的技术总监在接受采访时讨论了Switch2的性能,并给出了他们工作室的评价。简单来说,Switch2在D...

虹科实测 | CAN XL vs CAN FD传输性能深度对比:速率翻倍,抖动锐减!

导读在汽车电子与工业通信领域,CAN协议持续进化,推动着数据传输效率的提升。本次实测基于虹科PCAN-USBXL与虹科PCAN-USBProFD硬件,在同等严苛条件下对比CANXL与CANF...

1J117合金材料优异的耐腐蚀性、机械性能

1J117合金材料概述定义:1J117是一种不锈软磁精密合金,属于铁铬基合金,其圆棒产品具有特定的形状和尺寸,可满足各种工业应用中的特定需求。标准:技术条件标准为GB/T14986,品种规格标准...

据高管所称,Switch2能轻松移植XSS平台60帧游戏

任天堂,作为主机游戏界的御三家之一,一直注重游戏性而不注重更新升级硬件设备是其最大的特点。各位任豚们,忍受着任天堂早已落后硬件设备,真想感叹一句,天下苦任久矣!但Switch2的出现或许正在渐渐的改变...

FJK-110LED-HXJSN磁传感器有哪应用

作为一名从事电子技术相关工作的自媒体人,我经常会遇到各种传感器的应用问题。其中,FJK-110LED-HXJSN磁传感器是一款在工业自动化、智能设备等领域比较常见的磁场检测元件。今天我想和大家聊一聊这...

浅谈欧标方管200x200x5-12mm质S275JRH的优势与劣势

欧标方管200x200x5-12mm材质S275JRH是一种常见的结构用钢材,广泛应用于建筑、机械制造、桥梁、钢结构等领域。本文将对这种方管的优势与劣势进行浅谈,以帮助读者更好地了解其特性和适用场景。...

宽带拨号错误 651 全解析:故障定位与修复方案

在使用PPPoE拨号连接互联网时,错误651提示「调制解调器或其他连接设备报告错误」,通常表明从用户终端到运营商机房的链路中存在异常。以下从硬件、系统、网络三层维度展开排查:一、故障成因分类图...

模型微调:从理论到实践的深度解析

在人工智能领域,模型微调已成为提升模型性能、使其适应特定任务的关键技术。本文将全面系统地介绍模型微调的各个方面,帮助读者深入理解这一重要技术。一、什么是模型微调模型微调是指在已经训练好的预训练模型基础...

汉语拼音 z、c、s图文讲解(拼音字母表zcs教学视频)

以下是汉语拼音z、c、s的图文讲解,结合发音要领、书写规范及教学技巧:一、发音方法与口诀1.z的发音发音要领:舌尖轻抵上齿背,形成阻碍后稍放松,气流从窄缝中挤出,声带不振动(轻短音)。口诀:“写字写...

吴姗儒惹怒刘宇宁粉丝!吴宗宪护航「是综艺梗」叮咛女儿对话曝光

记者孟育民/台北报道Sandy吴姗儒在《小姐不熙娣》因为节目效果,将男星刘宇宁的头像踩在地上,引起粉丝怒火,节目发声明道歉后仍未平息,她也亲自发文郑重道歉:「我对刘宇宁本人完全没有任何恶意,却在综艺表...

苹果错误地发布了macOS Tahoe公开测试版 现已将其撤下

一些Beta测试人员下载了他们以为是macOSSequoia15.6RC的版本,但却错误地下载了macOSTahoe26公开测试版,后来苹果修复了该问题。苹果预计将于7月25...

make的多种用法!(make 的用法总结)

一、make的用法美make[meik]①V.制造;制定,拟定;使变得,使处于;造成,引起;整理(床铺);做,作出;强迫;挑选,任命…②n.(机器、设备等的)品牌,型号;结构,构造;通电,接电⑤[...

北顿尖刀哗变?俄第20近卫集团军损失惨重,拒绝执行指挥官命令?

【军武次位面】作者:太白近日,外国社交媒体“电报”上传出了一些消息,称俄罗斯在北顿涅兹克战场上的“尖刀”部队之一,俄第20近卫集团军因为损失惨重,已经出现了部分部队拒绝执行指挥官命令,甚至哗变的情况。...