Skip to content

Commit db45bbf

Browse files
committed
doc(elements): add image
1 parent 6696cf0 commit db45bbf

File tree

2 files changed

+202
-0
lines changed

2 files changed

+202
-0
lines changed

chapters.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,4 @@
5757
- bom/location.md: Location 对象,URL 对象,URLSearchParams 对象
5858
- elements/: 网页元素接口
5959
- elements/a.md: <a>
60+
- elements/image.md: <image>

docs/elements/image.md

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
# <image> 元素
2+
3+
## 概述
4+
5+
`<img>`元素用于插入图片,主要继承了 HTMLImageElement 接口。
6+
7+
浏览器提供一个原生构造函数`Image`,用于生成`HTMLImageElement`实例。
8+
9+
```javascript
10+
var img = new Image();
11+
img instanceof Image // true
12+
img instanceof HTMLImageElement // true
13+
```
14+
15+
`Image`构造函数可以接受两个整数作为参数,分别表示`<img>`元素的宽度和长度。
16+
17+
```javascript
18+
// 语法
19+
Image(width, height)
20+
21+
// 用法
22+
var myImage = new Image(100, 200);
23+
```
24+
25+
`<img>`实例的`src`属性可以定义图像的网址。
26+
27+
```javascript
28+
var img = new Image();
29+
img.src = 'picture.jpg';
30+
```
31+
32+
新生成的`<img>`实例并不属于文档的一部分。如果想让它显示在文档中,必须手动插入文档。
33+
34+
```javascript
35+
var img = new Image();
36+
img.src = 'image1.png';
37+
document.body.appendChild(img);
38+
```
39+
40+
除了使用`Image`构造,下面的方法也可以得到`HTMLImageElement`实例。
41+
42+
- `document.images`的成员
43+
- 节点选取方法(比如`document.getElementById`)得到的`<img>`节点
44+
- `document.createElement('img')`生成的`<img>`节点
45+
46+
```javascript
47+
document.images[0] instanceof HTMLImageElement
48+
// true
49+
50+
var img = document.getElementById('myImg');
51+
img instanceof HTMLImageElement
52+
// true
53+
54+
var img = document.createElement('img');
55+
img instanceof HTMLImageElement
56+
// true
57+
```
58+
59+
`HTMLImageElement`实例除了具有 Node、Element、HTMLElement 接口以外,还拥有一些独有的属性。这个接口没有定义自己的方法。
60+
61+
## 特性相关的属性
62+
63+
**(1)HTMLImageElement.src**
64+
65+
`HTMLImageElement.src`属性返回图像的完整网址。
66+
67+
```javascript
68+
// HTML 代码如下
69+
// <img width="300" height="400" id="myImg" src="http://example.com/pic.jpg">
70+
var img = document.getElementById('img');
71+
img.src // http://example.com/pic.jpg
72+
```
73+
74+
**(2)HTMLImageElement.currentSrc**
75+
76+
`HTMLImageElement.currentSrc`属性返回当前正在展示的图像的网址。JavaScript 和 CSS 的 mediaQuery 都可能改变正在展示的图像。
77+
78+
**(3)HTMLImageElement.alt**
79+
80+
`HTMLImageElement.alt`属性可以读写`<img>`的 HTML 属性`alt`,表示对图片的文字说明。
81+
82+
**(4)HTMLImageElement.isMap,HTMLImageElement.useMap**
83+
84+
`HTMLImageElement.isMap`属性对应`<img>`元素的 HTML 属性`ismap`,返回一个布尔值,表示图像是否为服务器端的图像映射的一部分。
85+
86+
`HTMLImageElement.useMap`属性对应<img>元素的 HTML 属性`usemap`,表示当前图像对应的`<map>`元素。
87+
88+
**(5)HTMLImageElement.srcset,HTMLImageElement.sizes**
89+
90+
`HTMLImageElement.srcset`属性和`HTMLImageElement.sizes`属性,分别用于读写`<img>`元素的`srcset`属性和`sizes`属性。它们用于`<img>`元素的响应式加载。`srcset`属性可以单独使用,但是`sizes`属性必须与`srcset`属性同时使用。
91+
92+
```javascript
93+
// HTML 代码如下
94+
// <img srcset="example-320w.jpg 320w,
95+
// example-480w.jpg 480w,
96+
// example-800w.jpg 800w"
97+
// sizes="(max-width: 320px) 280px,
98+
// (max-width: 480px) 440px,
99+
// 800px"
100+
// id="myImg"
101+
// src="example-800w.jpg">
102+
var img = document.getElementById('myImg');
103+
img.srcset
104+
// "example-320w.jpg 320w,
105+
// example-480w.jpg 480w,
106+
// example-800w.jpg 800w"
107+
108+
img.sizes
109+
// "(max-width: 320px) 280px,
110+
// (max-width: 480px) 440px,
111+
// 800px"
112+
```
113+
114+
上面代码中,`sizes`属性指定,对于小于`320px`的屏幕,图像的宽度为`280px`;对于小于`480px`的屏幕,图像宽度为`440px`;其他情况下,图像宽度为`800px`。然后,浏览器会根据当前屏幕下的图像宽度,到`srcset`属性加载宽度最接近的图像。
115+
116+
## HTMLImageElement.width,HTMLImageElement.height
117+
118+
`width`属性表示`<img>`的 HTML 宽度,`height`属性表示高度。这两个属性返回的都是整数。
119+
120+
```javascript
121+
// HTML 代码如下
122+
// <img width="300" height="400" id="myImg" src="pic.jpg">
123+
var img = document.getElementById('img');
124+
img.width // 300
125+
img.height // 400
126+
```
127+
128+
如果图像还没有加载,这两个属性返回的都是`0`
129+
130+
如果 HTML 代码没有设置`width``height`属性,则它们返回的是图像的实际宽度和高度,即`HTMLImageElement.naturalWidth`属性和`HTMLImageElement.naturalHeight`属性。
131+
132+
## HTMLImageElement.naturalWidth,HTMLImageElement.naturalHeight
133+
134+
`HTMLImageElement.naturalWidth`属性表示图像的实际宽度(单位像素),`HTMLImageElement.naturalHeight`属性表示实际高度。这两个属性返回的都是整数。
135+
136+
如果图像还没有指定或不可得,这两个属性都等于`0`
137+
138+
```javascript
139+
var img = document.getElementById('img');
140+
if (img.naturalHeight > img.naturalWidth) {
141+
img.classList.add('portrait');
142+
}
143+
```
144+
145+
上面代码中,如果图片的高度大于宽度,则设为`portrait`模式。
146+
147+
## HTMLImageElement.complete
148+
149+
`HTMLImageElement.complete`属性返回一个布尔值,表示图表是否已经加载完成。如果`<img>`元素没有`src`属性,也会返回`true`
150+
151+
## HTMLImageElement.crossOrigin
152+
153+
`HTMLImageElement.crossOrigin`属性用于读写`<img>`元素的`crossorigin`属性,表示跨域设置。
154+
155+
这个属性有两个可能的值。
156+
157+
- `anonymous`:跨域请求不要求用户身份(credentials),这是默认值。
158+
- `use-credentials`:跨域请求要求用户身份。
159+
160+
```javascript
161+
// HTML 代码如下
162+
// <img crossorigin="anonymous" id="myImg" src="pic.jpg">
163+
var img = document.getElementById('img');
164+
img.crossOrigin // "anonymous"
165+
```
166+
167+
## HTMLImageElement.referrerPolicy
168+
169+
`HTMLImageElement.referrerPolicy`用来读写`<img>`元素的 HTML 属性`referrerpolicy`,表示请求图像资源时,如何处理 HTTP 请求的`referrer`字段。
170+
171+
它有五个可能的值。
172+
173+
- `no-referrer`:不带有`referrer`字段。
174+
- `no-referrer-when-downgrade`:如果请求的地址不是 HTTPS 协议,就不带有`referrer`字段,这是默认值。
175+
- `origin``referrer`字段是当前网页的地址,包含协议、域名和端口。
176+
- `origin-when-cross-origin`:如果请求的地址与当前网页是同源关系,那么`referrer`字段将带有完整路径,否则将只包含协议、域名和端口。
177+
- `unsafe-url``referrer`字段包含当前网页的地址,除了协议、域名和端口以外,还包括路径。这个设置是不安全的,因为会泄漏路径信息。
178+
179+
## HTMLImageElement.x,HTMLImageElement.y
180+
181+
`HTMLImageElement.x`属性返回图像左上角相对于页面左上角的横坐标,`HTMLImageElement.y`属性返回纵坐标。
182+
183+
## 事件属性
184+
185+
图像加载完成,会触发`onload`属性指定的回调函数。
186+
187+
```javascript
188+
// HTML 代码为 <img src="example.jpg" onload="loadImage()">
189+
function loadImage() {
190+
console.log('Image is loaded');
191+
}
192+
```
193+
194+
图像加载完成,会触发`onerror`属性指定的回调函数。
195+
196+
```javascript
197+
// HTML 代码为 <img src="image.gif" onerror="myFunction()">
198+
function myFunction() {
199+
console.log('There is something wrong');
200+
}
201+
```

0 commit comments

Comments
 (0)