这一节主要讲两个标签 canvas 和 img。
canvas 由 HTML5 引入,用于图形绘制,而 img 标签则用于在网页上显示一个已经存在的图片。
画布(canvas)
canvas 标签只是图形容器,显示在其中的图形则需要使用脚本来绘制。
下面通过一系列的例子来说明 canvas 具备的绘制能力。
创建一个画布
<canvas   id="canvasContainer"   width="300"   height="200"   style="border:1px solid #000;" > </canvas> 

使用 Javascript 绘制图像
canvas 本身没有绘图能力,绘制工作需要使用 Javascript 来实现。
<script>   function drawSomthing() {     var c = document.getElementById("canvasContainer");     var ctx = c.getContext("2d");     ctx.fillStyle = "#FF0000";     ctx.fillRect(10, 10, 150, 75);   } </script>  <body onload="drawSomthing()">   <canvas     id="canvasContainer"     width="300"     height="200"     style="border:1px solid #000;"   >   </canvas> </body> 

在 body 的 onload 事件中,调用了方法 drawSomething。这个方法有四行代码。
第一行,获取到页面上的 canvas 元素。
第二行,获取 canvas 元素的 2d 上下文,用于后续的绘画。
第三行,指定填充的是红色。
第四行,指定填充的是长方形,前两个值是坐标,后两个值是长和宽。
canvas 绘制线条
canvas 坐标是二维网格,它从左上角(0,0)开始算起。上述例子里,(10,10, 150, 75),意思是从坐标点(10,10)开始,画一个 150*75 的长方形。
<script>   function drawLine() {     var c = document.getElementById("canvasContainer");     var ctx = c.getContext("2d");     ctx.moveTo(0, 0);     ctx.lineTo(200, 100);     ctx.stroke();   } </script>  <body onload="drawLine()">   <canvas     id="canvasContainer"     width="300"     height="200"     style="border:1px solid #000;"   >   </canvas> </body> 

canvas 绘制文本
使用 canvas 可以绘制文本,如下:
<script>   function drawText() {     var c = document.getElementById("canvasContainer");     var ctx = c.getContext("2d");     ctx.font = "30px Arial";     ctx.fillText("Hello World", 10, 50);   } </script>  <body onload="drawText()">   <canvas     id="canvasContainer"     width="300"     height="200"     style="border:1px solid #000;"   >   </canvas> </body> 

canvas 渐变填充
在使用 canvas 绘制时,填充的颜色可以是渐变的。
canvas 的渐变有两种,线条渐变和径向渐变。
<script>   function drawGradient() {     var c = document.getElementById("canvasContainer");     var ctx = c.getContext("2d");      var grd = ctx.createLinearGradient(0, 0, 200, 0);     grd.addColorStop(0, "red");     grd.addColorStop(1, "white");      ctx.fillStyle = grd;     ctx.fillRect(10, 10, 150, 80);   } </script>  <body onload="drawGradient()">   <canvas     id="canvasContainer"     width="300"     height="200"     style="border:1px solid #000;"   >   </canvas> </body> 

canvas 展现图像
使用 canvas 能够把一幅图像放置到画布上。
<script>   function drawPic() {     var c = document.getElementById("canvasContainer");     var ctx = c.getContext("2d");     var img = document.getElementById("sourceImg");     ctx.drawImage(img, 0, 0, 300, 110);   } </script>  <body onload="drawPic()">   <canvas     id="canvasContainer"     width="300"     height="200"     style="border:1px solid #000;"   >   </canvas>   <img id="sourceImg" src="../img/html-0.jpg" width="300" height="110" /> </body> 

img
img 标签不同于 canvs,它用于在网页上展示已有的图片。
img 的属性主要是 src,即要展示的图片的路径。
<img   id="sourceImg"   src="../img/html-0.jpg"   width="300"   height="110"   alt="这是一张 HTML5的示意图。" /> 
效果在前一个示例里已经有了,就不再贴图。
这里 alt 指定的文字信息,在浏览器无法加载图片时显示。告诉用户这里缺失是什么样的图片。
图片地图
img 标签搭配 map 标签,可以为图片添加可点击的区域,类似于为图片中的区域添加超链接。
<img   src="../img/3-6-0-solar-system.png"   width="466"   height="278"   alt="solar system"   usemap="#solarsystem" /> <map name="solarsystem">   <area     shape="rect"     coords="13,97,56,110"     href="3-6-1-sun.html"     alt="Sun"     title="太阳"   />   <area     shape="circle"     coords="235,95,20"     href="3-6-1-jupiter.html"     alt="Jupiter"     title="木星"   /> </map> 
 
以上示例里,使用了 map 标签,为太阳系图片里的行星添加了链接。
当用户的鼠标经过太阳或木星时,会显示成小手(截图里不能展现)并成为可点击的状态。此时点击它,就会跳转到对应的 href 里指定的页面上。
总结
- 🍑 canvas 标签只是图形容器,显示在其中的图形则需要使用脚本来绘制。 
- 🍑 通过脚本可以绘制图形,填充颜色或渐变色,还可以绘制文字。 
- 🍑 img 用于展示已经有的图片,使用 map 可为 img 添加链接成为图片地图。 
该文章在 2024/10/22 12:32:05 编辑过