• HTML5进阶


    内容:

    1.geolocation元素

    2.video元素和audio元素

    3.localStorage

    4.WebWorker

    5.WebSQL、IndexedDB

    6.文件操作、文件拖拽新概念

    7.canvas元素和SVG/VML

    1.geolocation元素

    (1)原理

    • PC端:使用IP地址定位    精度非常差
    • 移动:使用GPS定位      精度很高

    (2)使用

      1 <!-- author: wyb -->
      2 <!DOCTYPE html>
      3 <html lang="en">
      4 <head>
      5     <meta charset="UTF-8">
      6     <meta name="viewport" content="width=device-width, initial-scale=1">
      7     <title>geolocation</title>
      8     <script>
      9         // geolocation对象的方法:
     10         // getCurrentPosition      获取位置(1次)
     11         // watchPosition           不断获取位置
     12         // clearWatch              关闭
     13         window.onload = function () {
     14             var oBtn = document.querySelector('#btn1')
     15             oBtn.onclick = function () {
     16                 // console.log(navigator.geolocation)
     17                 // navigator.geolocation.getCurrentPosition(成功, 失败, 参数)
     18                 navigator.geolocation.getCurrentPosition(function (res) {
     19                     alert("成功")
     20                     // coords -> 坐标
     21                     console.log(res.coords);
     22 
     23                     //创建和初始化地图函数:
     24                     function initMap() {
     25                         createMap();        // 创建地图
     26                         setMapEvent();      // 设置地图事件
     27                         addMapControl();    // 向地图添加控件
     28                         addMapOverlay();    // 向地图添加覆盖物
     29                     }
     30 
     31                     function createMap() {
     32                         map = new BMap.Map("bmap");
     33                 // res.coords.longitude, res.coords.latitude -》 获取坐标中的经度和纬度
     34                         map.centerAndZoom(new BMap.Point(res.coords.longitude, res.coords.latitude), 15);
     35                     }
     36 
     37                     function setMapEvent() {
     38                         map.enableScrollWheelZoom();
     39                         map.enableKeyboard();
     40                         map.enableDragging();
     41                         map.enableDoubleClickZoom()
     42                     }
     43 
     44                     function addClickHandler(target, window) {
     45                         target.addEventListener("click", function () {
     46                             target.openInfoWindow(window);
     47                         });
     48                     }
     49 
     50                     function addMapOverlay() {
     51                         var markers = [
     52                             {
     53                                 content: "来找我啊",
     54                                 title: "我的位置",
     55                                 imageOffset: { 0, height: 3},
     56                                 position: {lat: res.coords.latitude, lng: res.coords.longitude}
     57                             }
     58                         ];
     59                         for (var index = 0; index < markers.length; index++) {
     60                             var point = new BMap.Point(markers[index].position.lng, markers[index].position.lat);
     61                             var marker = new BMap.Marker(point, {
     62                                 icon: new BMap.Icon("http://api.map.baidu.com/lbsapi/createmap/images/icon.png", new BMap.Size(20, 25), {
     63                                     imageOffset: new BMap.Size(markers[index].imageOffset.width, markers[index].imageOffset.height)
     64                                 })
     65                             });
     66                             var label = new BMap.Label(markers[index].title, {offset: new BMap.Size(25, 5)});
     67                             var opts = {
     68                                  200,
     69                                 title: markers[index].title,
     70                                 enableMessage: false
     71                             };
     72                             var infoWindow = new BMap.InfoWindow(markers[index].content, opts);
     73                             marker.setLabel(label);
     74                             addClickHandler(marker, infoWindow);
     75                             map.addOverlay(marker);
     76                         }
     77                         ;
     78                     }
     79 
     80                     //向地图添加控件
     81                     function addMapControl() {
     82                         var scaleControl = new BMap.ScaleControl({anchor: BMAP_ANCHOR_BOTTOM_LEFT});
     83                         scaleControl.setUnit(BMAP_UNIT_IMPERIAL);
     84                         map.addControl(scaleControl);
     85                         var navControl = new BMap.NavigationControl({
     86                             anchor: BMAP_ANCHOR_TOP_LEFT,
     87                             type: BMAP_NAVIGATION_CONTROL_LARGE
     88                         });
     89                         map.addControl(navControl);
     90                         var overviewControl = new BMap.OverviewMapControl({
     91                             anchor: BMAP_ANCHOR_BOTTOM_RIGHT,
     92                             isOpen: true
     93                         });
     94                         map.addControl(overviewControl);
     95                     }
     96 
     97                     var map;
     98                     initMap();
     99 
    100                 }, function (err) {
    101                     alert("失败")
    102                     alert(err)
    103                 })
    104             }
    105         }
    106     </script>
    107     <!--引用百度地图API-->
    108     <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.2"></script>
    109     <style>
    110         .container{
    111             width: 80%;
    112             margin: 0 auto;
    113         }
    114         .bmap {
    115             width: 100%;
    116             height: 666px;
    117             margin: 0 auto;
    118             border: 1px solid black;
    119             text-align: center;
    120         }
    121     </style>
    122 </head>
    123 <body>
    124 
    125 <div class="container">
    126     <div class="bmap" id="bmap">
    127         <input type="button" value="定位" id="btn1">
    128     </div>
    129 </div>
    130 
    131 </body>
    132 </html>

    最后效果如下:

    注意:不能使用谷歌浏览器(请求的IP库是国外的,没翻墙的话查不到IP对应的地址!),使用微软的IE or Edge浏览器均可实现,另外要允许使用定位

    2.video元素和audio元素

    关于video元素和audio元素:https://www.cnblogs.com/wyb666/p/9751083.html

    3.localStorage

    (1)什么是localStorage

    在HTML5中,新加入了一个localStorage特性,这个特性主要是用来作为本地存储来使用的,解决了cookie存储空间不足的问题(cookie中每条cookie的存储空间为4k),localStorage中一般浏览器支持的是5M大小,这个在不同的浏览器中localStorage会有所不同

    (2)优点与缺点

    localStorage的优势:

    • localStorage拓展了cookie的4K限制
    • localStorage会可以将第一次请求的数据直接存储到本地,这个相当于一个5M大小的针对于前端页面的数据库,相比于cookie可以节约带宽,但是这个却是只有在高版本的浏览器中才支持的

    localStorage的局限:

    • 浏览器的大小不统一,并且在IE8以上的IE版本才支持localStorage这个属性
    • 目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换
    • localStorage在浏览器的隐私模式下面是不可读取的
    • localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡
    • localStorage不能被爬虫抓取到

    (3)与其他存储方法的区别

    • localStorage 永久存储(本地存储)、大(5M)、浏览器独享
    • sessionStorage 会话期间存储(浏览器一关就没)、大(5M)
    • cookie: 小(4K)、浏览器和服务器共享

    (4)localStorage使用

     1 <!-- author: wyb -->
     2 <!DOCTYPE html>
     3 <html lang="en">
     4 <head>
     5     <meta charset="UTF-8">
     6     <meta name="viewport" content="width=device-width, initial-scale=1">
     7     <title>localStorage</title>
     8     <script>
     9      // 存取元素
    10         // localStorage.a=12;      
    11         // alert(localStorage.a);   
    12         // console.log(localStorage);
    13         // localStorage.b=5;
    14 
    15         //遍历 -> 遍历所有元素 -> 属性和方法
    16         // for(let name in localStorage){
    17         //   alert(`${name}: ${localStorage[name]}`);
    18         // }
    19 
    20         // 遍历 -> 只遍历属性值
    21         for(let i=0;i<localStorage.length;i++){
    22             let key=localStorage.key(i);
    23 
    24             alert(`${key}: ${localStorage[key]}`);
    25         }
    26 
    27         // 删除
    28         delete localStorage.a
    29     </script>
    30 </head>
    31 <body>
    32 </body>
    33 </html>

    简单应用-保存草稿:

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="utf-8">
     5     <title>localStorage应用-存草稿</title>
     6     <script>
     7         window.onload=function (){
     8             let oTxt=document.getElementById('txt1');
     9             let oBtn=document.getElementById('btn1');
    10 
    11             oTxt.value=localStorage.tmp_txt||'';
    12 
    13             oTxt.oninput = function (){
    14                 localStorage.tmp_txt=oTxt.value;
    15             };
    16 
    17             oBtn.onclick = function (){
    18                 alert('发送完成');
    19                 oTxt.value = ''
    20                 delete localStorage.tmp_txt;
    21             };
    22         };
    23     </script>
    24 </head>
    25 <body>
    26 
    27     <textarea rows="28" cols="80" id="txt1"></textarea>
    28     <input type="button" name="" value="发送" id="btn1">
    29 
    30 </body>
    31 </html>

    4.WebWorker

    web多进程,几乎没怎么用

    在前端中的进程:

    • 主进程——UI进程
    • 子进程——工作进程

    WebWorker:

    • 不能控制UI的东西;可以进行数据交互
    • 子进程不能再创建子进程
    • 跨域

    关于多进程——能更充分发挥计算机资源(内存×、IO×、网络×、CPU√)
    基本在web中没用,因为web中不太占用CPU,主要消耗是在内存及IO及网络带宽上

    webworker实例:

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="utf-8">
     5     <title>webworker</title>
     6     <script>
     7         // 这是主进程
     8         let oW=new Worker('1.js');
     9 
    10         oW.onmessage = function (ev) {
    11             alert(ev.data)
    12         }
    13 
    14         oW.postMessage({n1: 2, n2: 3})
    15     </script>
    16 </head>
    17 <body></body>
    18 </html>
    1 // 这是子进程
    2 this.onmessage = function (ev) {
    3     let {n1, n2} = ev.data;
    4     let result = n1 + n2;
    5     this.postMessage(result);
    6 };

    5.WebSQL、IndexedDB

    因为有安全隐患,被W3C删掉了,现在我们无需关心

    6.文件操作、文件拖拽新概念

    详情见:

    https://www.cnblogs.com/wyb666/p/9735022.html 

    https://www.cnblogs.com/wyb666/p/9740731.html

    7.canvas元素和SVG/VML

    (1)三者区别

    • canvas 位图——放大失真 HTML5标准
    • SVG 矢量图——无限缩放 不是HTML5的东西,是一个独立标准
    • VML 矢量图 IE的矢量图

    (2)canvas具体使用

    • 路径操作:相当于选区——没有效果,还需后续操作
    • 闭合:一定要用closePath
    • 边线:stroke()
    • 填充:fill()
    • 线宽:lineWidth
    • 线色:strokeStyle
    • 填充颜色:fillStyle

     实例:

     1 <!-- author: wyb -->
     2 <!DOCTYPE html>
     3 <html lang="en">
     4 <head>
     5     <meta charset="UTF-8">
     6     <meta name="viewport" content="width=device-width, initial-scale=1">
     7     <title>canvas画图</title>
     8     <script>
     9         window.onload = function () {
    10             let oC = document.querySelector('#c1');
    11 
    12             // 图形上下文——接口:所有绘图方法、属性
    13             let gd = oC.getContext('2d');
    14 
    15             // 路径操作——类似PS的选区 -> 选取区域:
    16             // 起点
    17             gd.moveTo(470, 81);
    18             gd.lineTo(778, 236);
    19             gd.lineTo(532, 411);
    20             gd.lineTo(312, 259);
    21 
    22             // gd.lineTo(470, 81);
    23             gd.closePath();             // 也可以直接使用系统提供的闭合函数来闭合(建议用这个)
    24 
    25             // 选取了之后要做事:
    26             gd.lineWidth=20;            // 设置线的宽度
    27             gd.strokeStyle='red';       // 设置线的颜色
    28             gd.stroke();                // 边线
    29             // gd.fill();               // 填充
    30         }
    31     </script>
    32     <style>
    33         body {
    34             background: black;
    35             text-align: center;
    36         }
    37 
    38         #c1 {
    39             background: #fff;
    40         }
    41     </style>
    42 </head>
    43 <body>
    44 <canvas id="c1" width="800" height="600"></canvas>
    45 </body>
    46 </html>

    效果如下:

  • 相关阅读:
    winform中利用正则表达式得到有效的电话/手机号
    winform运行时如何接受参数?(示例)
    [基础]Javascript中的继承示例代码
    [转]C#中"is" vs "as"
    Javascript数组常用方法[包含MS AJAX.NET的prototype扩展方法]示例
    linq学习笔记(一)
    用winform应用程序登录网站的解决方案
    [转贴]操纵自如--页面内的配合与通信
    .net3.0中的扩展方法(示例)
    window.location或window.open如何指定target?
  • 原文地址:https://www.cnblogs.com/wyb666/p/9746357.html
Copyright © 2020-2023  润新知