一、 表单元素
1. <prgress>:标签标示任务的进度(进程),进度条(文件上传、下载、加载...),需结合js展示任务进度。
1 <p>max为进度条的进度最大值,value为进度条完成的进度(若无max,value值为0-1之间)</p>
2 <progress value='30' max='100'></progress>
3 <p>没有value值的progress就像一个加载中loading,中间的进度块来回游荡,可以用作loading来使用,表示正在页面加载中</p>
4 <progress></progress>
在chrome浏览器下如图:
2.<meter>:主要表现规定范围内的数量值,例如磁盘的使用量,比例值等。
1 <p>value:实际数量值;min:允许的最小值;max:允许的最大值;low:下限值;high:上限值;optimum:最佳值</p>
2 <meter min="0" low="50" high="150" max="200" optimum="100" value="100"></meter>
3 <p>最佳值optimum在min与low之间:</p>
4 <p>value在min与low之间:<meter min="0" low="50" high="150" max="200" optimum="30" value="20"></meter></p>
5 <p>value在low与high之间:<meter min="0" low="50" high="150" max="200" optimum="30" value="100"></meter></p>
6 <p>value在high与max之间:<meter min="0" low="50" high="150" max="200" optimum="30" value="170"></meter></p>
7 <p>最佳值optimum在low与high之间:</p>
8 <p>value在min与low之间:<meter min="0" low="50" high="150" max="200" optimum="100" value="20"></meter></p>
9 <p>value在low与high之间:<meter min="0" low="50" high="150" max="200" optimum="100" value="100"></meter></p>
10 <p>value在high与max之间:<meter min="0" low="50" high="150" max="200" optimum="100" value="170"></meter></p>
11 <p>最佳值optimum在high与max之间:</p>
12 <p>value在min与low之间:<meter min="0" low="50" high="150" max="200" optimum="170" value="20"></meter></p>
13 <p>value在low与high之间:<meter min="0" low="50" high="150" max="200" optimum="170" value="100"></meter></p>
14 <p>value在high与max之间:<meter min="0" low="50" high="150" max="200" optimum="170" value="170"></meter></p>
在chrome浏览器下如图:
3. <output>:定义不同类型的输出,比如脚本的输出。
1 <!--计算器:for:输出域相关的一个或多个元素-->
2 <form oninput="c.value = parseInt(a.value) + parseInt(b.value)">
3 <input type="number" id="a" value="50" />
4 +<input type="number" id="b" value="50" />
5 =<output name="c" for="a b"></output>
6 </form>
在chrome浏览器下如图:
4. <datalist>:定义选项列表,与 input 元素配合使用(可自定义的下拉框)。
1 <!--input的list与datalist的id对应-->
2 <input id="myFlower" list="flowers" />
3 <datalist id="flowers">
4 <option value="Rose">
5 <option value="Sunflower">
6 <option value="Dandelion">
7 </datalist>
在chrome浏览器下如图:
可自定义:
5. 表单元素的新属性:placeholder、mutiple、autofocus、form、required、min、max、minlength、maxlength、pattern等。
二、音频、视频API(<audio>,<video>)
1. 音频
1 <!--src:歌曲路径;controls:播放控制(显示audio自带的播放控件);loop:歌曲循环;autoplay:歌曲加载后自动播放(只有pc端可以实现)-->
2 <audio src="asset/music/music1.mp3" controls="controls" loop="loop" autoplay="autoplay">您的浏览器不支持html5的audio标签</audio>
在chrome浏览器下如图:
1)对象属性:
(1) currentTime: 当前播放时间;
(2) duration: 歌曲的总时间;
(3) startTime: 返回起始播放时间;
(4) play: 是否在播放,布尔值;
(5) pause: 是否暂停,布尔值;
2)对象方法:
(1) play(): 播放歌曲;
(2) pause(): 暂停歌曲;
(3) load(): 重新加载歌曲;
2. 视频
1 <!--src:视频路径;controls:播放控制(显示video自带的播放控件);loop:视频循环;autoplay:视频加载后自动播放(只有pc端可以实现);preload:如何下载音频-->
2 <video src="asset/video/video1.mp4" controls="controls" loop="loop" autoplay="autoplay" preload="auto"></video>
1)常用事件:
(1) oncanplay: 当文件就绪可以开始播放时触发;
(2) ontimeupdate: 当播放位置(快进、快退)改变时触发;
(3) onended: 当播放到结尾时触发;
2)属性:同上<radio>的1)部分
3)方法:同上<radio>的2)部分
三、.画布API(<canvas)>)
Canvas:H5原生技术,基于网页画布绘制2D位图绘图技术,适合像素处理,动态渲染和大数据量绘制(如网页游戏);开源可视化JS库:ECharts.js等。
SVG:H5借鉴技术,使用XML技术绘制2D矢量图绘图技术,缩放不会失真,适合静态图片展示,大型渲染区域(如地图),高保真文档查看和打印等应用场景;开源可视化JS库:D3.js 、Highcharts等。
WebGL:尚不是H5标准技术,基于HTML5 Canvas提供硬件3D加速渲染;有一个非常强大3D扩展库:three.js。
Canvas与SVG的不同:
(1) Canvas是位图;SVG是矢量图;
(2) Canvas是JS绘图技术(不是DOM元素);SVG是标签绘图技术(是DOM元素);
(3) Canvas内容不能使用CSS;SVG内容可以使用CSS;
(4) Canvas内容不方便绑定事件处理;SVG内容方便进行事件绑定;
(5) Canvas适合小面积、大数量应用场景;SVG适合大面积、小数量应用场景。
1)矩形
Canvas
1 <canvas id="drawing" width="200" height="200" style="margin-top: 20px;">A Canvas!</canvas>
1 <script>
2 var draw = document.getElementById("drawing");
3 if (draw.getContext) {
4 var context = draw.getContext("2d");
5 // 矩形
6 context.fillStyle = "red";
7 context.strokeStyle = "black";
8 context.lineWidth = 5;
9 context.lineJoin = "round";
10 context.fillRect(10,10,50,50);
11 context.strokeRect(10,10,50,50);
12 }
13 </script>
SVG
1 <svg width="200" height="200">
2 <rect x="10" y="10" width="50" height="50" fill="red" stroke="black" stroke-width="5"></rect>
3 </svg>
2)圆形
Canvas
1 var draw = document.getElementById("drawing");
2 if (draw.getContext) {
3 var context = draw.getContext("2d");
4 context.beginPath();
5 context.arc(100, 100, 50, 0, 360);
6 // 第二个圆
7 context.moveTo(140, 100);
8 context.arc(100, 100, 40, 0, 360);
9 // 画钟表指针
10 context.moveTo(100, 100);
11 context.lineTo(120, 100);
12 context.moveTo(100, 100);
13 context.lineTo(100, 70);
14 // 边框样式
15 context.strokeStyle = "red";
16 // 阴影
17 context.shadowColor = "black";
18 context.shadowOffsetX = 5;
19 context.shadowOffsetY = 5;
20 context.shadowBlur = 4;
21 context.stroke();
22 }
SVG
1 <svg width="200" height="200">
2 <circle r="50" cx="100" cy="100" fill="red" fill-opacity="0.4" stroke="black" stroke-width="5" stroke-opacity="0.4"></circle>
3 </svg>
用css画圆
1 .div1 {
2 width: 50px;
3 height: 50px;
4 border: 3px solid red;
5 border-radius: 50%;
6 }
3)椭圆
Canvas
1 var draw = document.getElementById("drawing");
2 if (draw.getContext) {
3 var context = draw.getContext("2d");
4 if (context.ellipse){
5 // 参数顺序:起点x坐标,起点y坐标,半径x坐标,半径y坐标,旋转角度,起始角度,结果角度,是否逆时针
6 context.ellipse(100,70,30,50,0,0,360);
7 context.fillStyle = "red";
8 context.strokeStyle = "black";
9 context.fill();
10 context.stroke();
11 }else {
12 alert("no ellipse!");
13 }
SVG
1 <svg width="200" height="200">
2 <ellipse rx="30" ry="50" cx="100" cy="100" fill="red" fill-opacity="0.4" stroke="black" stroke-width="5" stroke-opacity="0.4"></ellipse>
3 </svg>
4)直线
Canvas
1 var draw = document.getElementById("drawing");
2 if (draw.getContext) {
3 var context = draw.getContext("2d");
4 context.beginPath();
5 context.moveTo(10,100);
6 context.lineTo(150,50);
7 context.strokeStyle = "red";
8 context.lineWidth = 4;
9 // 全局透明度
10 context.globalAlpha = 0.4;
11 context.stroke();
12 }
SVG
1 <svg width="200" height="200">
2 <!--line无fill-->
3 <line x1="10" y1="100" x2="150" y2="50" stroke="red" stroke-width="4" stroke-opacity="0.4"></line>
4 </svg>
5)折线
SVG
1 <svg width="500" height="500">
2 <!--fill需为transparent,否则折线其他部分会填充颜色-->
3 <polyline points="150,200 250,100 350,300 450,50" stroke="black" stroke-width="5" stroke-opacity=".4" fill="transparent"></polyline>
4 </svg>
Canvas: 合理运用moveTo()与lineTo()即可;折线图可用CanvasJS库等。
6)多边形
SVG
1 <svg width="500" height="500">
2 <!--最后会自动连接起点和终点-->
3 <polygon points="100,150 100,300 300,300 400,150 250,220" fill="red" fill-opacity=".4" stroke="black" stroke-width="5" stroke-opacity=".4"></polygon>
4 </svg>
Canvas: 同上,合理运用moveTo()与lineTo()。
7)渐变
Canvas
1 // 参数:渐变开始位置x,y,结束位置x,y
2 var gradient = context.createLinearGradient(55, 55, 150, 150);
3 // 放射性渐变,参数:渐变开始圆心x,y,半径,结束圆心x,y,半径
4 // var gradient = context.createRadialGradient(100,100,10,100,100,50);
5 // 渐变颜色
6 gradient.addColorStop(0, "white");
7 gradient.addColorStop(1, "blue");
8 context.fillStyle = gradient;
9 context.fill();
SVG: SVG 渐变必须在 <defs> 标签中进行定义
1 <svg width="500" height="500">
2 <!--SVG 渐变必须在 <defs> 标签中进行定义-->
3 <defs>
4 <!--线性渐变:(x1,y1)起始位置,(x2,y2)终止位置-->
5 <linearGradient id="g" x1="0%" y1="0%" x2="100%" y2="0%">
6 <stop offset="0" stop-color="white"></stop>
7 <stop offset="0.5" stop-color="green"></stop>
8 <stop offset="1" stop-color="blue"></stop>
9 </linearGradient>
10 <!--放射性渐变:(cx,cy)外圈圆心位置,r外圈半径,(fx,fy)内圈圆心位置-->
11 <radialGradient id="g1" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
12 <stop offset="0%" stop-color="white" stop-opacity="0"/>
13 <stop offset="100%" stop-color="blue" stop-opacity="1"/>
14 </radialGradient>
15 </defs>
16 <rect x="0" y="0" height="200" width="200" fill="url(#g)" stroke="url(#g)"></rect>
17 <rect x="200" y="0" height="200" width="200" fill="url(#g1)" stroke="url(#g1)"></rect>
18 </svg>
四、地理定位API(Geolocation)
Geolocation API 允许用户向 Web 应用程序提供他们的位置,如果用户同意,浏览器会返回一个位置信息,通过用户的手机、电脑等底层设备提供给浏览器。
位置获取的几种方式:
1)电脑的IP地址(使用PC浏览器时),存在的误差较大;
2)GPS地理定位,定位精度准确,定位时间较长,室内效果不好;
3)WIFI地理定位,可在室内使用;
4)手机地理定位,通常基于WIFI和GPS的地理定位信息结合使用。
方法:
1. getCurrenPosition(): 确定设备位置,返回一个带有位置信息的Position对象。
1 navigator.geolocation.getCurrentPosition(
2 function (position) {
3 // 成功得到位置信息时的回调函数
4 position.timestamp; //定位时间
5 position.coords.latitude; //纬度
6 position.coords.longitude; //经度
7 position.coords.altitude; //海拔高度
8 position.coords.accuracy; //准确度
9 position.coords.speed; //地面速度
10 position.coords.heading; //行进方向
11 },
12 function (positionError) {
13 // 可选,获取位置信息失败是时的回调函数
14 console.warn('ERROR(' + positionError.code + '): ' + positionError.message);
15 },
16 options = {
17 //可选,PositionOptions对象
18 enableHighAccuracy: true, //通知浏览器启用html5服务高精确度模式
19 maximunAge: 0, //表示浏览器重新计算位置的时间间隔,以ms为单位的值
20 timeout: 2000 //告诉浏览器计算当前位置所允许的最长时间,默认为infinity无限大。
21 }
22 );
2. watchPosition(): 注册一个位置改变监听器,每当设备位置改变时,返回一个long类型的ID值。
1 var id = navigator.geolocation.watchPosition(
2 // 参数同getCurrentPosition
3 function (position) {
4 // 若经纬度发生改变时,返回字符串;target为目标位置
5 if(target.latitude === position.coords.latitude && target.longitude === position.coords.longitude){
6 console.log('恭喜你到达目标!');
7 // 取消位置监听器
8 navigator.geolocation.clearWatch(id);
9 }
10 },
11 error,
12 options
13 );
3. clearWatch(): 取消watchPosition()注册的位置监听器;参数为watchPosition()返回的id值。
五、文件拖拽(drag,drop,dataTransfer,FileReader)
1. 拖动原对象触发的事件:
(1) ondragstart: 拖动开始;
(2) ondrag: 拖动中;
(3) ondragend: 拖动结束;
2. 拖动目标对象触发的事件:
(1) ondragenter: 鼠标拖动对象进入时触发;
(2) ondragover: 拖动对象在另一容器悬停时触发;
(3) ondrop: 释放鼠标键时触发;
(4) ondragleave: 拖动对象离开容器时触发;
3. 步骤:
1)为了使元素可拖动,元素的draggable属性需设为true。
2)拖动原对象ondragstart(原对象(被拖元素)event):获取原对象数据,被拖动时会发生什么
event.dataTransfer.setData("Text", event.target.id): 设置被拖元素数据类型和值。
3)放置的位置ondragover(目标对象(容器)event): 规定在何处放置被拖数据
event.preventDefault(): 阻止元素的默认处理方式;
4)放置ondrop(目标对象(容器)event)
(1) event.preventDefault();
(2) var data = event.dataTransfer.getData("Text"): 获得被拖数据
(3) event.target.appendChild(document.getElementById(data)); 将元素写入目标容器
4. 文件拖拽(配合FileReader)
event.dataTransfer.files: 获取拖拽文件
1) readAsText 以文本方式读取 (多用于读取文本文件)
2) readAsDataURL 以base64方式读取 (多用于读取图片)
3) readAsArrayBuffer 以二进制的方式读取(不常用,js难以操作这种数据类型)
4) readAsBinaryString 以二进制字符串的方式读取 (多用于上传数据)