HTML5学习笔记

HTML5

此篇为H5的学习,如要学习基础HTML→html基础的笔记

目录

  • 字符设定
  • 常用新标签
    • 表单输入类型
    • 表单新属性
    • 综合案例
    • 表单新增的事件
  • 多媒体标签
    • 传统多媒体embed
    • HS音频audio
    • HS视频video
  • DOM扩展
  • H5新增接口
    • 网络接口
    • 全屏接口
    • 读取文件
    • 拖拽接口
    • 地理位置
  • web存储
    • sectionStorage
    • localStorage
  • 应用缓存
  • 案例:自定义播放器

字符设定

  • HTML与XHTML中建议这样去写

    <meta http-equiv="charset" content="utf-8">
    
  • HTML5的标签中建议这样去写

    <meta charset="utf-8">
    

常用新标签

为了更好地处理今天的互联网应用,HTML5添加了很多新元素及功能,比如: 图形的绘制,多媒体内容,更好的页面结构,更好的形式 处理,和几个api拖放元素,定位,包括网页 应用程序缓存,存储,网络工作者,等。

一、canvas

标签描述
<canvas>标签定义图形,比如图表和其他图像。该标签基于 JavaScript 的绘图 API

二、多媒体

标签描述
<audio>定义音频内容
<video>定义视频(video 或者 movie)
<source>定义多媒体资源 <video><audio> 字体
<embed>定义嵌入的内容,比如插件。
<track>为诸如 <video><audio> 元素之类的媒介规定外部文本轨道。

三、表单

标签描述
<datalist>定义选项列表。请与 input 元素配合使用该元素,来定义 input 可能的值。
<keygen>规定用于表单的密钥对生成器字段。
<output>定义不同类型的输出,比如脚本的输出。用于展示内容,只能展示,不能进行编辑

四、语义和结构

HTML5提供了新的元素来创建更好的页面结构:

标签描述
<article>定义页面的侧边栏内容
<aside>定义页面内容之外的内容。
<bdi>允许您设置一段文本,使其脱离其父元素的文本方向设置。
<command>定义命令按钮,比如单选按钮、复选框或按钮
<details>用于描述文档或文档某个部分的细节
<dialog>定义对话框,比如提示框
<summary>标签包含 details 元素的标题
<figure>规定独立的流内容(图像、图表、照片、代码等等)。
<figcaption>定义 <figure> 元素的标题
<footer>定义 section 或 document 的页脚。
<header>定义了文档的头部区域
<mark>定义带有记号的文本。
<meter>定义度量衡。仅用于已知最大和最小值的度量。
<nav>定义运行中的进度(进程)。
<progress>定义任何类型的任务的进度。
<ruby>定义 ruby 注释(中文注音或字符)。
<rt>定义字符(中文注音或字符)的解释或发音。
<rp>在 ruby 注释中使用,定义不支持 ruby 元素的浏览器所显示的内容。
<section>定义文档中的节(section、区段)。
<time>定义日期或时间。
<wbr>规定在文本中的何处适合添加换行符。

例子:

  1. 表单datalist与 input 元素配合使用该元素,来定义 input 可能的值。
<input type="text" value="输入明星" list="star"/> <!--  input里面用 list -->
<datalist id="star">   <!-- datalist 里面用 id  来实现和 input 链接 -->  
    		<option value="刘德华">刘德华</option>
    		<option value="刘若英">刘若英</option>
    		<option value="刘晓庆">刘晓庆</option>
    		<option value="郭富城">郭富城</option>
    		<option value="张学友">张学友</option>
    		<option value="郭郭">郭郭</option>
</datalist>
  1. 表单keygen:提供一种验证用户数据的可靠方法。在提交表单数据的时候,会生成两个键,一个私钥,一个公钥。私钥存储在本地,公钥发送到服务器。在需要做验证的时候,我们可以从服务器下载一个客户端证书,通过私钥和证书来实现相关的验证操作。

  2. 结构meter : 度量器,可用于标示级别

属性描述
highnumber定义度量的值位于哪个点,被界定为高的值。
lownumber定义度量的值位于哪个点,被界定为低的值。
maxnumber定义最大值。默认值是 1。
minnumber定义最小值。默认值是 0。
optimumnumber定义什么样的度量值是最佳的值。如果该值高于 “high” 属性,则意味着值越高越好。如果该值低于 “low” 属性的值,则意味着值越低越好。
valuenumber定义度量的值。
  1. fieldset 元素可将表单内的相关元素分组,打包 legend 搭配使用

    • 将表单内容的一部分打包,生成一组相关表单的字段。当一组表单元素放到<fieldset>标签内时,浏览器会以特殊方式来显示它们,它们可能有特殊的边界、3D 效果,或者甚至可创建一个子表单来处理这些元素。

    • legend 元素为 fieldset 元素定义标题(caption)。

<fieldset>
    		<legend>用户登录</legend>  标题
    		用户名: <input type="text"><br /><br />
    		密 码: <input type="password">
</fieldset>
表单输入类型
类型使用示例含义
email<input type="email">输入邮箱格式
tel<input type="tel">输入手机号码格式
url<input type="url">输入url格式
number<input type="number">输入数字格式
search<input type="search">搜索框(体现语义化)
range<input type="range">自由拖动滑块
color<input type="color">拾色器,通过value进行取值
time<input type="time">小时分钟
date<input type="date">年月日
datetime<input type="datetime">时间
month<input type="month">月年
week<input type="week">星期 年
表单新属性
属性用法含义
placeholder<input type="text" placeholder="请输入用户名">占位符 当用户输入的时候 里面的文字消失 删除所有文字,自动返回
autofocus<input type="text" autofocus>规定当页面加载时 input 元素应该自动获得焦点
multiple<input type="file" multiple>多文件上传
autocomplete<input type="text" autocomplete="off">规定表单是否应该启用自动完成功能;1. on /2. off on 代表记录已经输入的值 1.autocomplete 首先需要提交按钮 2.这个表单您必须给他名字
required<input type="text" required>必填项 内容不能为空
accesskey<input type="text" accesskey="s">规定激活(使元素获得焦点)元素的快捷键 采用 alt + s的形式
pattern<input type="tel" pattern="^1\d{10}$">正则表达式 验证表单
novalidate关闭验证,可用于<form>标签
form指定表单项属于哪个form,处理复杂表单时会需要
综合案例
<form action="">
  <fieldset>
    <legend>学生档案</legend>
    <label for="userName">姓名:</label>
    <input type="text" name="userName" id="userName" placeholder="请输入用户名"> <br>
    <label for="userPhone">手机号码:</label>
    <input type="tel" name="userPhone" id="userPhone" pattern="^1\d{10}$"><br>
    <label for="email">邮箱地址:</label>
    <input type="email" required name="email" id="email"><br>
    <label for="collage">所属学院:</label>
    <input type="text" name="collage" id="collage" list="cList" placeholder="请选择"><br>
    <datalist id="cList">
      <option value="前端与移动开发学院"></option>
      <option value="java学院"></option>
      <option value="c++学院"></option>
    </datalist><br>
    <label for="score">入学成绩:</label>
    <input type="number" max="100" min="0" value="0" id="score"><br>
   <form action="">
    <fieldset>
    	<legend>学生档案思密达</legend>
    	<label>姓名: <input type="text" placeholder="请输入学生名字"/></label> <br /><br />
    	<label>手机号: <input type="tel" /></label> <br /><br />
    	<label>邮箱: <input type="email" /></label> <br /><br />
    	<label>所属学院:  <input type="text" placeholder="请选择学院" list="xueyuan"/>
    	<datalist id="xueyuan">
    		<option>java学院</option>
    		<option>前端学院</option>
    		<option>php学院</option>
    		<option>设计学院</option>
    	</datalist>
    	<br /><br />
    	<label>出生日期:   <input type="date" /></label> <br /><br />
    	<label>成绩:  <input type="number" /></label> <br /><br />
    	<label>毕业时间:  <input type="date" /></label> <br /><br />
    	<input type="submit" />  <input type="reset" />
    </fieldset>
    </form>
    <label for="inTime">入学日期:</label>
    <input type="date" id="inTime" name="inTime"><br>
    <label for="leaveTime">毕业日期:</label>
    <input type="date" id="leaveTime" name="leaveTime"><br>
    <input type="submit">
  </fieldset>
</form>
表单新增的事件
  • oninput 用户输入内容时触发,可用于移动端输入字数统计

  • oninvalid 验证不通过时触发

/*oninput可以监听用户的每一次输入*/    
document.getElementById("name").oninput=function(){        console.log(this.value);    }    /*监听键盘弹起,每一个键盘弹出触发一次*/    
document.getElementById("name").onkeyup=function()
{        console.log("---"+this.value);    }    /*当指定表单元素验证不通过时触发*/    
document.getElementById("phone").oninvalid=function(){        console.log("验证不通过");    }

多媒体标签

  • embed:标签定义嵌入的内容
  • audio:播放音频
  • video:播放视频
传统多媒体 embed

embed可以用来插入各种多媒体,格式可以是 Midi、Wav、AIFF、AU、MP3等等。url为音频或视频文件及其路径,可以是相对路径或绝对路径。

因为兼容性问题,我们这里只讲解 插入网络视频, 后面H5会讲解 audio 和video 视频多媒体。

<embed src="http://player.youku.com/player.php/sid/XMTI4MzM2MDIwOA==/v.swf" allowFullScreen="true" quality="high" width="480" height="400" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash"></embed>
H5音频audio

HTML5通过<audio>标签来解决音频播放的问题。

通过附加属性可以更友好控制音频的播放,如:

  • autoplay 自动播放
  • controls 是否显不默认播放控件
  • loop 循环播放 如果不写 默认播放一次 ; loop 或者 loop = “loop” 表示无限循环
  • preload 如果出现该属性,则音频在页面加载时进行加载,并预备播放。如果使用 “autoplay”,则忽略该属性。

在这里插入图片描述

多浏览器支持的方案:

<source>标签允许您规定可替换的视频/音频文件供浏览器根据它对媒体类型或者编解码器的支持进行选择

在这里插入图片描述

H5视频 video

附加属性可以更友好的控制视频的播放

  • autoplay 自动播放
  • controls 是否显示默认播放控件
  • loop 循环播放
  • preload 如果出现该属性,则音频在页面加载时进行加载,并预备播放。如果使用 “autoplay”,则忽略该属性。
  • width 设置播放窗口宽度
  • height 设置播放窗口的高度

在这里插入图片描述

多浏览器支持的方案,如下图

在这里插入图片描述

DOM扩展

  1. 获取元素:

    • document.getElementsByClassName (‘class’) 通过类名获取元素,以类数组形式存在。getElementsByTagName(‘class’) [n]

    • document.querySelector(‘selector’) 通过CSS选择器获取元素,符合匹配条件的第1个元素。

      • 类选择器要加.,id 选择器要加#
    • document.querySelectorAll(‘selector’) 通过CSS选择器获取元素,以类数组形式存在。

  2. 类名操作:

    • Node.classList.add(‘class’) 添加class,一次一个

      • 原Node.className=“red underline” 需要防止所有类名被覆盖
    • Node.classList.remove(‘class’) 移除class,一次一个

    • Node.classList.toggle(‘class’) 切换class,有则移除,无则添加

    • Node.classList.contains(‘class’) 检测是否存在class

      • 原Node.classList.item(‘class’) 获取类名称
    document.querySelector('selector').classList.add('class')
    
    
  3. 自定义属性:

    • 规范:data-开头;data-后必须至少有一个字符,多个单词使用-连接
      建议:名称应该都使用小写–不要包含任何的大写字符;不要有任何的特殊符号;不要纯数字

    • 在HTML5中我们可以自定义属性,其格式如下 data-*=" ",例如:data-info=“我是自定义属性”,通过Node.dataset['info'] 我们便可以获取到自定义的属性值

    • 如下格式设置时,则需以驼峰格式才能正确获取:data-my-name=“itcast”,获取Node.dataset[‘myName’]

H5新增接口

网络接口
    /*1.ononline:网络连通的时候触发这个事件*/
    window.addEventListener("online",function(){
        alert("网络连通了");
    });

    /*2.onoffline:网络断开时触发*/
    window.addEventListener("offline",function(){
        alert("网络断开了");
    })

全屏接口

全屏操作的主要方法和属性

  1. requestFullScreen():开启全屏显示
    不同浏览器需要添加不同的前缀:chrome:webkit firefox:moz ie:ms opera:o (不支持ie9)
  2. cancelFullScreen():退出全屏显示:也添加前缀,在不同的浏览器下.退出全屏只能使用document来实现
  3. fullScreenElement:是否是全屏状态,也只能使用document进行判断
window.onload=function(){
        var div=document.querySelector("div");
        /*添加三个按钮的点击事件*/
        /*全屏操作*/
        document.querySelector("#full").onclick=function(){
            /*使用能力测试添加不同浏览器下的前缀*/
            if(div.requestFullScreen){
                div.requestFullScreen();
            }
            else if(div.webkitRequestFullScreen){
                div.webkitRequestFullScreen();
            }
            else if(div.mozRequestFullScreen){
                div.mozRequestFullScreen();
            }
            else if(div.msRequestFullScreen){
                div.msRequestFullScreen();
            }
        }
        /*退出全屏*/
        document.querySelector("#cancelFull").onclick=function(){
            if(document.cancelFullScreen){
                document.cancelFullScreen();
            }
            else if(document.webkitCancelFullScreen){
                document.webkitCancelFullScreen();
            }
            else if(document.mozCancelFullScreen){
                document.mozCancelFullScreen();
            }
            else if(document.msCancelFullScreen){
                document.msCancelFullScreen();
            }
        }
        /*判断是否是全屏状态*/
        document.querySelector("#isFull").onclick=function(){
            /*两个细节:使用document判断  能力测试*/
         if(document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement){
                alert(true);
            }
            else{
                alert(false);
            }
        }
    }

读取文件

FileReader读取文件

  1. readAsText():读取文本文件(可以使用Txt打开的文件),返回文本字符串,默认编码是UTF-8

  2. readAsBinaryString():读取任意类型的文件。返回二进制字符串。这个方法不是用来读取文件展示给用户看,而是存储文件。例如:读取文件的内容,获取二进制数据,传递给后台,后台接收了数据之后,再将数据存储

  3. readAsDataURL():读取文件内容:读取文件获取一段以data开头的字符串,这段字符串的本质就是DataURL;DataURL是一种将文件(这个文件一般就是指图像或者能够嵌入到文档的文件格式)嵌入到文档的方案。DataURL是将资源转换为base64编码的字符串形式,并且将这些内容直接存储在url中->优化网站的加载速度和执行效率

  4. 说明没有任何的返回值:void:但是读取完文件之后,它会将读取的结果存储在文件读取对象的result中

  5. 需要传递一个参数 binary large object:文件(图片或者其它可以嵌入到文档的类型)

  6. 文件存储在file表单元素的files属性中,它是一个数组

  7. abort():中断读取

  8. FileReader提供一个完整的事件模型,用来捕获读取文件时的状态

    • onabort:读取文件中断片时触发
    • onerror:读取错误时触发
    • onload:文件读取成功完成时触发
    • onloadend:读取完成时触发,无论成功还是失败
    • onloadstart:开始读取时触发
    • onprogress:读取文件过程中持续触发

实例需求:即时预览
即时:当用户选择完图片之后就立刻进行预览的处理 >>onchange
预览:通过文件读取对象的readAsDataURL()完成

<form action="">
    文件: <input type="file" name="myFile" id="myFile" onchange="getFileContent();"> <br>
    <div></div>
    <input type="submit">
</form>
<img src="" alt="">

 function getFileContent(){
       /*1.创建文件读取对象*/
        var reader=new FileReader();
        /*2.读取文件,获取DataURL*/
        var file=document.querySelector("#myFile").files;
        reader.readAsDataURL(file[0]);
        /*获取数据*/
        reader.onload=function(){
            //console.log(reader.result);
            /*展示*/
            document.querySelector("img").src=reader.result;
        }
        reader.onprogress=function(e){
            var percent= e.loaded/ e.total*100+"%";
            div.style.width=percent;
        }
    }

拖拽接口

应用于被拖拽元素的事件

  • ondrag 应用于拖拽元素,整个拖拽过程都会调用–持续
  • ondragstart 应用于拖拽元素,当拖拽开始时调用
  • ondragleave 应用于拖拽元素,当鼠标离开拖拽元素时调用
  • ondragend 应用于拖拽元素,当拖拽结束时调用

应用于目标元素的事件

  • ondragenter 应用于目标元素,当拖拽元素进入时调用
  • ondragover 应用于目标元素,当停留在目标元素上时调用,阻止浏览器的默认行为e.preventDefault()为了触发ondragleave
  • ondrop 应用于目标元素,当在目标元素上松开鼠标时调用,追加元素
  • ondragleave 应用于目标元素,当鼠标离开目标元素时调用,默认不会被触发,必须在ondragover阻止浏览器的默认行为e.preventDefault()

拖拽通用例子

e.target可以获取被拖拽元素

通过dataTransfer来实现数据的存储与获取
setData(format,data):

  • format:数据的类型:text/html text/uri-list
  • Data:数据:一般来说是字符串值

添加元素 e.target.appendChild(obj);通过e.dataTransfer.setData存储的数据,只能在drop事件中获取

<div class="div1" id="div1">
    <!--在h5中,如果想拖拽元素,就必须为元素添加draggable="true". 图片和超链接默认就可以拖拽-->
    <p id="pe" draggable="true">试着把我拖过去</p>
    <p id="pe1" draggable="true">试着也把我拖过去</p>
</div>
<div class="div2" id="div2"></div>
<div class="div3" id="div3"></div>

var obj=null;//全局变量,当前被拖拽的地元素
document.ondragstart=function(e){
    /*通过事件捕获来获取当前被拖拽的子元素*/
    e.target.style.opacity=0.5;
    e.target.parentNode.style.borderWidth="5px";
    obj= e.target;
        e.dataTransfer.setData("text/html", e.target.id);
    }
    document.ondragend=function(e){
        e.target.style.opacity=1;
        e.target.parentNode.style.borderWidth="1px";
    }
    document.ondragleave=function(e){
    }
    document.ondrag=function(e){
    }
    document.ondragenter=function(e){
        console.log(e.target);
    }
    document.ondragover=function(e){
        /*如果想触发ondrop事件,那么就必须在这个位置阻止浏览器的默认行为*/
        e.preventDefault();
    }
    /*浏览器默认会阻止ondrop事件:我们必须在ondragover中阻止浏览器的默认行为*/
    document.ondrop=function(e){
        var id=e.dataTransfer.getData("text/html");
        /*console.log("id="+id);*/
        e.target.appendChild(document.getElementById(id));
    }
    document.ondragleave=function(e){
}

地理位置
  1. 获取地理信息成功之后的回调success
  2. 获取地理信息失败之后的回调
  3. 调整获取当前地进信息的方式

navigator.geolocation.getCurrentPosition(success,error , option)

option:可以设置获取数据的方式

  • enableHi ghAccuracy; true/false:是否使用高精度
  • timeout:设置超时时间,单位ms
  • maximumAge:可以设置浏览器重新获取地理信息的时间间隔,单位是ms

成功回调后可以使用(success方法需要参数position):position.coords.latitude 纬度/longitude经度/accuracy精度/altitude 湖拔高度

第三方地理定位接口

申请密钥,打开api,复制代码

web存储

sectionStorage

sectionStorage :存储数据到本地,存储的容量5mb左右。

  1. 这个数据本质是存储在当前页面内存中
  2. 生命周期为关闭当前页面,关闭页面,数据自动清除
  3. 可以在Application/Resources找到存储的数据
  • setItem(key , value):存储数据,以键值对的方式存储
  • getItem(key):获取数据,通过指定名称的key获取对应的value值
  • removeItem(key):删除数据,通过指定名称key删除对应的值
  • clear():清空所有存储的内容
    var userData=document.getElementById("userName");
    //存储数据
    document.getElementById("setData").onclick=function(){
        window.sessionStorage.setItem("userName",userData.value);
    }
    //获取数据
    document.getElementById("getData").onclick=function(){
        var value=window.sessionStorage.getItem("userName");
        alert(value);
    }

localStorage

localStorage :存储数据到本地,存储的容量20mb左右。

  1. 存储的内容大概20mb
  2. 不同浏览器不能共享数据。但是在同一个浏览器的不同窗口中可以共享数据
  3. 永久生效,它的数据是存储在硬盘上,并不会随着页面或者浏览器的关闭而清除,必须手动清除removeItem
  • setItem(key , value):存储数据,以键值对的方式存储
  • getItem(key):获取数据,通过指定名称的key获取对应的value值
  • removeItem(key):删除数据,通过指定名称key删除对应的值
  • clear():清空所有存储的内容
var userData=document.getElementById("userName");
    //存储数据
    document.getElementById("setData").onclick=function(){
        window.localStorage.setItem("userName",userData.value);
    }
    //获取数据
    document.getElementById("getData").onclick=function(){
        var value=window.localStorage.getItem("userName");
        alert(value);
    }
    //删除数据
    document.getElementById("removeData").onclick=function(){
        window.localStorage.removeItem("userName");
    }

应用缓存

ctrl+F5强制刷新

chrome 可以通过chrome://appcache-internals/工具和离线(offline)模式来调试管理应用缓存

概念:使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本

优势

  • 可配置需要缓存的资源

  • 网络无连接应用仍可用

  • 本地读取缓存资源,提升访问速度,增强用户体验

  • 减少请求,缓解服务器负担

Cache Manifest 基础

  • 如需启用应用程序缓存,请在文档的 <html>标签中包含 manifest 属性
<!DOCTYPE HTML>
<html manifest="demo.appcache"></html>

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

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

  • 注意,manifest 文件需要配置正确的 MIME-type,即 “text/cache-manifest”。必须在 web 服务器上进行配置,输入inetmgr->MIME类型->添加

在这里插入图片描述

Manifest 文件

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

  • manifest 文件可分为三个部分

    • CACHE MANIFEST (第一句必须)
    • CACHE 在此标题下列出的文件将在首次下载后进行缓存
    • NETWORK 需要与服务器的连接,且不会被缓存
    • FALLBACK 规定当页面无法访问时的回退页面(比如 404 页面)
CACHE MANIFEST 
#首次下载后进行缓存;*:代表所有文件
CACHE:
/theme.css
/logo.gif
/main.js

#与服务器的连接,且不会被缓存
NETWORK:
login.asp

#无法访问时的回退页面;/:代表所有文件
FALLBACK:
/html5/ /404.html

  • 其它:
    1. CACHE: 可以省略,这种情况下将需要缓存的资源写在CACHE MANIFEST
    2. 可以指定多个CACHE: NETWORK: FALLBACK:,无顺序限制
    3. #表示注释,只有当demo.appcache文件内容发生改变时或者手动清除缓存后,才会重新缓存。
  • 更新缓存:

一旦文件被缓存,则浏览器会继续展示已缓存的版本,即使修改了服务器上的文件。为了确保浏览器更新缓存,也需要更新 manifest 文件,也就意味着一旦应用被缓存,它就会保持缓存直到发生下列情况:

  1. 用户清空浏览器缓存

  2. manifest 文件被修改(参阅下面的提示)

  3. 由程序来更新应用缓存

说明:更新注释行中的日期和版本号是一种使浏览器重新缓存文件的办法

案例:自定义播放器

各种浏览器默认播放器都不一样

多媒体:http://www.w3school.com.cn/tags/html_ref_audio_video_dom.asp

  1. 常用方法:load() 加载、 play() 播放、 pause() 暂停

Jq没有提供对视频播放控件的方式,也就意味着如果要操作视频播放,必须使用原生的js方法—dom元素

  1. 常用属性:
  • currentTime 视频播放的当前进度、

  • duration:视频的总时间 100000/60

  • paused:视频播放的状态.

  1. 常用事件:
  • oncanplay: 事件在用户可以开始播放视频/音频(audio/video)时触发。

  • ontimeupdate:通过该事件来报告当前的播放进度.

  • onended:播放完时触发—重置

三:多媒体案例:自定义视频播放器

页面结构:

<h3 class="playerTitle">视频播放器</h3> 
<div class="player">     
 <video src="../mp3/test.mp4"></video>     
  <div class="controls">        
   <a href="javascript:;" class="switch fa fa-pause"></a>    <a href="javascript:;" class="expand fa fa-expand"></a>    <div class="progress">            
        <div class="bar"></div>            
        <div class="loaded"></div>             
        <div class="elapse"></div>         
   </div>         
   <div class="time">             
        <span class="currentTime">00:00:00</span>
        \             
        <span class="totalTime">00:00:00</span>         
   </div>     
 </div> 
</div>

/*获取到播放器*/
    var video=$("video")[0];//jq转成dome元素
    /*暂停-播放切换*/
    $(".switch").click(function(){
        //1.切换样式,从暂停切换到播放,或者从播放切换到暂停
        $(this).toggleClass("fa-pause fa-play");
        //2.修改播放器的状态
        if(video.paused){
            video.play();
        }
        else{
            video.pause();
        }
    });
    /*全屏*/
    $(".expand").click(function(){
        video.webkitRequestFullScreen();
    });
    /*当可以开始播放的时候触发oncanplay*/
    video.oncanplay=function(){
        //延迟
        setTimeout(function(){
            video.style.display="block";
            //1.获取视频的总时长,结果以秒作为单位
            var duration=video.duration;
            //2.计算 时  分  秒
            var hour= Math.floor(duration/3600);
            var menite= Math.floor(duration%3600/60);
            var second=Math.floor(duration%60);
            //3.将时分秒信息填充到总时长span中
            //3.1 设置时分秒的格式
            hour=hour<10?"0"+hour:hour;
            menite=menite<10?"0"+menite:menite;
            second=second<10?"0"+second:second;
            //3.2填充
           $(".totalTime").html(hour+":"+menite+":"+second);
        },2000);
    }
    /*当视频在播放的时候,会触发下下面的方法ontimeupdate*/
    video.ontimeupdate=function(){
        //1.获取当前已经播放过了时间
        var elapseTime=video.currentTime;
        //2.获取已过时间的时分秒
        var hour= Math.floor(elapseTime/3600);
        var menite= Math.floor(elapseTime%3600/60);
        var second=Math.floor(elapseTime%60);
        //3.将时分秒信息填充到当前时长span中
        //3.1 设置时分秒的格式
        hour=hour<10?"0"+hour:hour;
        menite=menite<10?"0"+menite:menite;
        second=second<10?"0"+second:second;
        //3.2填充
        $(".currentTime").html(hour+":"+menite+":"+second);
        //4.设置当前<div class="elapse"></div>的宽度
        var valuePercent=0;
        if(elapseTime>0){
            valuePercent=elapseTime/video.duration*100;
            $(".elapse").css("width",valuePercent+"%");
        }
    }

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值