• web基础(三)HTML5提供的API


    web基础(三)HTML5提供的API 

    一、HTML5 中的API

    (一)、获取页面元素及类名操作和自定义属性

    1、获取页面元素

    在 HTML 中获取元素时,可以通过 JavaScript 和 JQuery 获取,在 HTML5 中,可以使用 HTML5 提供了以下的两个 API 获取元素,其中,选择器可以是 CSS 中的任意一种选择器类型:

    ☞ document.querySelector("选择器");
      备注:该API只能选中符合该选择器匹配的第一个元素。
    
    ☞ document.querySelectorAll("选择器");
      备注:可以选中所有符合选择器规则的元素,返回的是一个列表。

    document.querySelectorAll 与 document.querySelector区别: querySelectorAll 可以选中所有符合选择器规则的元素,返回的是一个列表。querySelector返回的只是单独的一个元素。

    示例代码如下:

    <body>
      <ul>
        <li>测试1</li>
        <li>测试2</li>
        <li>测试3</li>
        <li>测试4</li>
        <li>测试5</li>
      </ul>
      <p class="pclass">duanluo</p>
      <script type="text/javascript">     // 获取符合的第一个元素     var obj=document.querySelector("li");     console.log(obj);     // 获取所有符合规则的元素     var obj=document.querySelectorAll("li");     for(var i=0; i<obj.length; i++) {       console.log(obj[i].innerText);     }
        // 设置 p 元素的 字体颜色为 红色
        document.querySelector(".pclass").style.color = "red";
      </script> </body>

    2、类名操作

    类名操作是在 CSS 中对 class 选择器的动态操作,可以动态的添加、移除、切换等操作 class 选择器,主要提供了如下方法,在 HTML5 中,Dom可以省略不写:

    ☞ Dom.classList.add("类名"): 给当前dom元素添加类样式
    ☞ Dom.classList.remove("类名"); 给当前dom元素移除类样式
    ☞ Dom.classList.contains("类名"); 检测是否包含类样式
    ☞ Dom.classList.toggle("active");  切换类样式(有就删除,没有就添加)

    示例代码如下:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style type="text/css">
             .bg {
                  height: 50px;
                  background-color: orange;
             }
        </style>
    </head>
      <body>
           <div></div>
           <input type="button" name="" value="添加类名" class="add">
           <input type="button" name="" value="移除类名" class="remove">
           <input type="button" name="" value="切换类名" class="toggle">
           <input type="button" name="" value="是否包含类名" class="contains">
           <script type="text/javascript">
                  //获取页面中元素
                  var  div_obj = document.querySelector("div");
                  var  add_btn = document.querySelector(".add");
                  var  remove_btn = document.querySelector(".remove");
                  var  toolge_btn = document.querySelector(".toggle");
                  var  contains_btn = document.querySelector(".contains");
                  //添加类名
                  add_btn.onclick=function() {
                          div_obj.classList.add("bg");
                  }
                  //移除类名
                  remove_btn.onclick=function () {
                          div_obj.classList.remove("bg");
                  }
                  //切换类名
                  toolge_btn.onclick=function() {
                          div_obj.classList.toggle("bg");
                  }
                  //是否包含类名
                  contains_btn.onclick=function() {
                        console.log(div_obj.classList.contains('bg'));
                  }
           </script>
      </body>
    </html>

    3、自定义属性

    在 HTML4 之前设置自定义属性,只需在元素的标签中写上属性的定义并赋值即可,如: <p p-name="p标签"></p> ,其中 p-name 就是自定义属性。在 HTML5 中,严格了自定义属性的操作,在自定义属性前要加上 data- 前缀,自定义的格式如下:

    格式:data-自定义属性名
    备注:在标签中,以data-自定义名称  
         
    1. 获取自定义属性   Dom.dataset   返回的是一个Dom对象
    Dom.dataset.属性名  或者  Dom.dataset[属性名]
    注意: 属性名是不包含data-
    
    2. 设置自定义属性 Dom.dataset.自定义属性名 = 值 或者 Dom.dataset[自定义属性名] = 值;

    示例代码如下(主要代码):

    <body>
      <div class="nav"  data-name-test="zs" data-age="123">123</div>
      <script type="text/javascript">
        // 获取 .nav 对象
        var data=document.querySelector(".nav").dataset;     console.log(data.nameTest);// 打印 data-name-test 属性的值     //设置自定义属性     var nav=document.querySelector(".nav");     nav.dataset.test="abc";     nav.dataset.TestAbc="123";     nav.dataset["hh"]="呵呵";   </script> </body>

    (二)、文件读取

    HTML5 中提供的文件 API 在前端中有着丰富的应用,上传、下载、读取内容等 在日常的交互中很常见。而且在各个浏览器的兼容也比较好,包括移动端,除了 IE 只支持 IE10 以上的版本。本节主要是 FileReader 对象的一些方法和特性,FileReader 设计用来读取文件里面的数据,提供三个常用的读取文件数据的方法,另外读取文件数据使用了异步的方式,非常高效。 具体如下所示:

    ☞FileReader:有3个用来读取文件方法返回结果在result中
      readAsBinaryString    ---将文件读取为二进制编码
      readAsText            ---将文件读取为文本
      readAsDataURL         ---将文件读取为DataURL
    ☞FileReader 提供的事件模型   onabort ------中断时触发   onerror ------出错时触发   onload ------文件读取成功完成时触发   onloadend ------读取完成触发,无论成功或失败   onloadstart------读取开始时触发   onprogress -----读取中

    示例代码如下(主要代码):

    <body>
      <input type="file" name="">
      <script type="text/javascript">
        var input=document.querySelector("input");
        input.onchange=function(){
          //获取到文件
          var file=this.files[0];       //开始读取,创建读取器       var reader=new FileReader();       //开始读取       reader.readAsText(file);       //获取读取的结果       //当文件读取完成后,才可以获取文件信息内容       reader.onload=function() {         console.log(reader.result);       }     }   </script>
    </body>

    (三)、获取网络状态

    网络状态是网页中非常重要的功能,我们可以在离线状态下,紧急保存相关数据到本地,后面再联网状态时将本地的离线数据保存到数据库,保护用户的数据安全,不会因网络问题而丢失数据。在 HTML5 中,提供了如下API操作网络状态:

    ☞ 获取当前网络状态
      window.navigator.onLine 返回一个布尔值,true:联网状态 / false:离线状态
    
    ☞ 网络状态事件
      1. window.ononline     当联网时触发该事件
      2. window.onoffline    当断网时触发该事件

    示例代码如下(主要代码):

    <script type="text/javascript">
      //获取当前网络状态
      var state=window.navigator.onLine;
      if(state) {
        alert("您好,当前处于联网状态");
      }else {
        alert("当前处于断网状态");
      }
      //当联网的时候触发该事件
      window.ononline=function () {
        alert("在线");
      }
      //当断网的时候触发该事件
      window.onoffline=function() {
        alert("断网");
      }
    </script>

    (四)、获取地理定位

    HTML5 Geolocation API 用于获得用户的地理位置。鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的。浏览器支持:Internet Explorer 9、Firefox、Chrome、Safari 以及 Opera 支持地理定位。对于一些带有GPS的设备,如移动手机,地理定位更加精确。在HTML5 中,提供了如下API操作地理定位:

    ☞  获取一次当前位置
      window.navigator.geolocation.getCurrentPosition(success,error);
    ☞  实时获取当前位置
      window.navigator.geolocation.watchPosition(success,error);
      其中,success:定位成功的回调方法,error:定位失败的回调方法,
    ☞ 清除实现获取的位置
      window.navigator.geolocation.clearWatch(watchID)
      其中,watchID是需要清除的实时获取地理位置的 watch
    成员属性:
    1、coords.latitude 维度 2、coords.longitude 经度 3、coords.altitude 海拔 4、coords.speed 速度 5、timestamp 时间

    示例代码如下(主要代码):

    <body>
      <button id="btn">获取当前浏览器所在的定位信息</button>
      <script>
         btn.onclick=function () {
         // 获取一次地理位置信息
           window.navigator.geolocation.getCurrentPosition(success,error);
           // 实时获取地理位置信息
           var watchId = window.Navigator.geolocation.watchPosition(success,error);
        }
        function success(pos) {
          console.log('成功获取定位信息');
          console.log('定位时间:'+pos.timestamp);
          console.log('经度:'+pos.coords.longitude);
          console.log('纬度:'+pos.coords.latitude);
          console.log('海拔:'+pos.coords.altitude);
          console.log('速度:'+pos.coords.speed);
        }
        function error(err) {
          console.log('获取定位信息失败');
          console.log('错误编号:'+err.code);
          console.log('错误消息:'+err.message);
        }
      // 清除实时获取的地理信息
      window.Navigator.geolocation.clearWatch(watchId);
    </script> </body>

    (五)、本地存储

    随着互联网的快速发展,基于网页的应用越来越普遍,同时也变的越来越复杂,为了满足各种各样的需求,会经常性在本地存储大量的数据,传统方式我们以 document.cookie 来进行存储的,但是由于其存储大小只有4k左右,并且解析也相当的复杂,给开发带来诸多不便,HTML5 规范则提出解决方案,使用 sessionStorage 和 localStorage 存储数据。 具体API信息如下:

    ☞  localStorage:
      特点:
        1. 永久生效
        2. 多窗口共享     3. 容量大约为20M API:     window.localStorage.setItem(key,value) 设置存储内容     window.localStorage.getItem(key) 获取内容     window.localStorage.removeItem(key) 根据key删除内容     window.localStorage.clear() 清空内容 ☞ sessionStorage:   特点:

        1. 生命周期为关闭当前浏览器窗口     2. 可以在同一个窗口下访问     3. 数据大小为5M左右 API:     window.sessionStorage.setItem(key,value) 设置存储内容     window.sessionStorage.getItem(key) 获取存储内容     window.sessionStorage.removeItem(key) 根据key删除内容     window.sessionStorage.clear() 清空内容

     示例代码如下(主要代码):

    1、localStorage

    <body>
      <input type="button" name="" class="bt1" value="添加">
      <input type="button" name="" class="bt2" value="删除">
      <input type="button" name="" class="bt3" value="获取">
      <input type="button" name="" class="bt4" value="清空">
      <input type="button" name="" class="bt5" value="索引获取">
      <script type="text/javascript">
        var bt1=document.querySelector(".bt1");
          bt1.onclick=function() {
            window.localStorage.setItem("name","zs");
          }
        var bt2=document.querySelector(".bt2");
          bt2.onclick=function() {
            window.localStorage.removeItem("name");
          }
        var bt3=document.querySelector(".bt3");
          bt3.onclick=function(){
            console.log(window.localStorage.getItem("name"));    
          }
        var bt4=document.querySelector(".bt4");
          bt4.onclick=function(){
            window.localStorage.clear();
          }
    
        var bt5=document.querySelector(".bt5");
          bt5.onclick=function(){
            console.log( window.localStorage.key(1) );
          }
      </script>
    </body>

    2、sessionStorage

    <script type="text/javascript">
      window.sessionStorage.setItem("name","123");
      var list='[{"name":"zhans","age":"18","gender":"男"},{"name":"lis","age":"23","gender": "女"}]';
      window.sessionStorage.setItem("list",list);
    </script>

    sessionStorage和localStorage 的API在功能是一样的,唯一的区别是:

    localStorage::1. 永久生效、2. 多窗口共享、3. 容量大约为20M。

    sessionStorage:1. 生命周期为关闭当前浏览器窗口、2. 可以在同一个窗口下访问、3. 数据大小为5M左右。

    (六)、操作多媒体

     多媒体特性是 HTML5 的一个重要特性,其中包括音频和视频的操作。

    HTML5 <video> / <Audio> - 方法、属性以及事件,本节只列出常用的,具体可以参考: HTML 5 视频/音频参考手册

    注意:在视频 / 音频的元数据已加载后,其他属性才可用。

     

    1、Video(视频)

    HTML5 <video> 元素拥有方法、属性和事件。

    其中的方法用于播放、暂停以及加载等。其中的属性(比如时长、音量等)可以被读取或设置。其中的 DOM 事件能够通知您,比方说,<video> 元素开始播放、已暂停,已停止,等等。

    视频格式与浏览器的支持

     HTML5 中使用的 Video 及相关元素标签

    示例代码如下:

    <body>
      <div style="text-align:center">
        <button onclick="playPause()">播放/暂停</button>
        <button onclick="makeBig()">放大</button>
        <button onclick="makeSmall()">缩小</button>
        <button onclick="makeNormal()">普通</button>
        <br />
        <video id="video1" width="420">
          <source src="../多媒体标签/trailer.mp4" type="video/mp4">
        </video>
      </div>
      <script>
        var myVideo = document.querySelector("#video1");
        function playPause() { // 暂停或播放
          if (myVideo.paused)
            myVideo.play(); // 播放
          else
            myVideo.pause();// 暂停
        }
        function makeBig() {
          myVideo.width = 560; // 设置宽度
        }
        function makeSmall() {
          myVideo.width = 320;
        }
        function makeNormal() {
          myVideo.width = 420;
        }
      </script>
    </body>

    2、Audio(音频)

    HTML5  中的音频使用 <Audio> 元素,大致上和 <Video> 类似,具体示例代码如下:

    <body>
      <audio class="mp3"  >
        <source src="./作业/video/js.mp3" controls></source>
      </audio>
    </body>

    (七)、应用程序缓存

     HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问。使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本。

    应用程序缓存为应用带来三个优势:

    • 离线浏览 - 用户可在应用离线时使用它们
    • 速度 - 已缓存资源加载得更快
    • 减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源。

    如需启用应用程序缓存,请在文档的 <html> 标签中包含 manifest 属性:

    <html manifest="/example/html5/demo_html.appcache">

    每个指定了 manifest 的页面在用户对其访问时都会被缓存。如果未指定 manifest 属性,则页面不会被缓存(除非在 manifest 文件中直接指定了该页面)。

    manifest 文件的建议的文件扩展名是:".appcache"。

    请注意,manifest 文件需要配置正确的 MIME-type,即 "text/cache-manifest"。必须在 web 服务器上进行配置。

    1、Manifest 文件

    manifest 文件是简单的文本文件,它告知浏览器被缓存的内容(以及不缓存的内容)。

    manifest 文件可分为三个部分:

    • CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存
    • NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存
    • FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)

    ①、CACHE MANIFEST,是必需的: 

    CACHE MANIFEST
    /theme.css
    /logo.gif
    /main.js

    上面的 manifest 文件列出了三个资源:一个 CSS 文件,一个 GIF 图像,以及一个 JavaScript 文件。当 manifest 文件加载后,浏览器会从网站的根目录下载这三个文件。然后,无论用户何时与因特网断开连接,这些资源依然是可用的。

    ②、NETWORK 小节规定文件 "login.asp" 永远不会被缓存,且离线时是不可用的

    NETWORK:
    login.asp 
    *          指示所有其他资源/文件都需要因特网连接

    ③、FALLBACK 小节规定如果无法建立因特网连接,则用 "offline.html" 替代 /html5/ 目录中的所有文件

    FALLBACK:
    /html5/ /404.html
    注释:第一个 URI 是资源,第二个是替补。

    2、更新缓存

    一旦应用被缓存,它就会保持缓存直到发生下列情况:

    • 用户清空浏览器缓存
    • manifest 文件被修改(参阅下面的提示)
    • 由程序来更新应用缓存

    3、完整的 Manifest 文件

    CACHE MANIFEST
    # 2012-02-21 v1.0.0
    /theme.css
    /logo.gif
    /main.js
    
    NETWORK:
    login.asp
    
    FALLBACK:
    /html5/ /404.html

    重要的提示:以 "#" 开头的是注释行,但也可满足其他用途。应用的缓存会在其 manifest 文件更改时被更新。如果您编辑了一幅图片,或者修改了一个 JavaScript 函数,这些改变都不会被重新缓存。更新注释行中的日期和版本号是一种使浏览器重新缓存文件的办法。

    4、关于应用程序缓存的注释

    一旦文件被缓存,则浏览器会继续展示已缓存的版本,即使您修改了服务器上的文件。为了确保浏览器更新缓存,您需要更新 manifest 文件。

    注释:浏览器对缓存数据的容量限制可能不太一样(某些浏览器设置的限制是每个站点 5MB)。

    示例代码如下:

    <!DOCTYPE html>
    <html manifest="/example/html5/demo_html.appcache">
        <body>
            <script type="text/javascript" src="/example/html5/demo_time.js">
            </script>
            <p id="timePara"><button onclick="getDateTime()">获得日期和事件</button></p>
            <p><img src="/i/w3school_banner.gif" /></p>
            <p>请打开<a href="/example/html5/html5_html_manifest.html" target="_blank">这个页面</a>,然后脱机浏览,重新加载页面。页面中的脚本和图像依然可用。</p>
        </body>
    </html> 

    (八)、拖放

    拖放(Drag 和 drop)是 HTML5 标准的组成部分。拖放是一种常见的特性,即抓取对象以后拖到另一个位置。在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。

    示例代码如下:

    <!DOCTYPE HTML>
    <html>
        <head>
            <style type="text/css">
                #div1 {
                    width: 198px;
                    height: 66px;
                    border: 1px solid #aaaaaa;
                }
            </style>
            <script type="text/javascript">
                function allowDrop(ev) {
                    ev.preventDefault();
                }
                function drag(ev) {
                    ev.dataTransfer.setData("Text", ev.target.id);
                }
                function drop(ev) {
                    ev.preventDefault();
                    var data = ev.dataTransfer.getData("Text");
                    ev.target.appendChild(document.getElementById(data));
                }
            </script>
        </head>
        <body>
            <p>请把 W3School 的图片拖放到矩形中:</p>
            <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
            <br />
            <img id="drag1" src="/i/eg_dragdrop_w3school.gif" draggable="true" ondragstart="drag(event)" />
        </body>
    </html>

    首先,要完成元素的拖放功能,需要进行一下步骤:

    ①、设置元素为可拖放

    首先,为了使元素可拖动,把 draggable 属性设置为 true :

    <img draggable="true" />

    ②、拖动什么 - ondragstart 和 setData()

    然后,规定当元素被拖动时,会发生什么。

    在上面的例子中,ondragstart 属性调用了一个函数,drag(event),它规定了被拖动的数据。

    dataTransfer.setData() 方法设置被拖数据的数据类型和值:

    function drag(ev) {
      ev.dataTransfer.setData("Text", ev.target.id);
    }

    在这个例子中,数据类型是 "Text",值是可拖动元素的 id ("drag1")。

    ③、放到何处 - ondragover

    ondragover 事件规定在何处放置被拖动的数据。

    默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。

    这要通过调用 ondragover 事件的 event.preventDefault() 方法:

    function allowDrop(ev) {
      ev.preventDefault();
    }

    ④、进行放置 - ondrop

    当放置被拖数据时,会发生 drop 事件。

    在上面的例子中,ondrop 属性调用了一个函数,drop(event):

    function drop(ev) {
      ev.preventDefault();
      var data = ev.dataTransfer.getData("Text");
      ev.target.appendChild(document.getElementById(data));
    }

    代码解释:

    • 调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)。
    • 通过 dataTransfer.getData("Text") 方法获得被拖的数据。该方法将返回在 setData() 方法中设置为相同类型的任何数据。
    • 被拖数据是被拖元素的 id ("drag1")。
    • 把被拖元素追加到放置元素(目标元素)中。
  • 相关阅读:
    JavaScript之函数(上)
    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)<转>
    Mac配置环境变量注意点
    netty tcp拆包
    mybatis注解方式批量插入数据
    JMX超详细解读<转>
    使用EmbeddedValueResolverAware读取配置文件内容
    线程的几种状态转换<转>
    Java线程池关闭1-shutdown和isTerminated<转>
    Maven项目编译后classes文件中没有.xml问题
  • 原文地址:https://www.cnblogs.com/lingq/p/13179666.html
Copyright © 2020-2023  润新知