前言
HTML新增的API是放在移动端的 IE低版本浏览器就不要去考虑了(H5一般是在做移动端)
全屏显示
基本概念
- HTML5规范允许用户自定义网页上任一元素全屏显示(规定了任何元素都可以全屏显示)
- 元素.requestFullscreen() 开启全屏显示、document.cancleFullscreen() 关闭全屏显示、document.isFullScreen判断当前是否全屏状态下
- 不同浏览器兼容性不一样
- 全屏伪类div:-webkit-full-screen,一旦元素全屏就会触发伪类选择器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>全屏显示</title>
<style>
*{
margin: 0;
padding:0;
}
#box{
width: 200px;
height: 200px;
background-color: pink;
}
#div{
width: 100%;
height: 800px;
background-color: red;
}
/*全屏伪类选择器 一旦元素全屏就会触发伪类选择器*/
/*选择到全屏下的box 全屏状态激活这个选择器 这个伪类选择器也要加兼容前缀*/
#box:-webkit-full-screen{
background-color: blue;
}
</style>
</head>
<body>
<div id="box">
<div id="div"></div>
<button id="full">全屏显示</button>
<button id="cancel">退出全屏</button>
<button id="isfull">是否全屏</button>
</div>
<script>
//获取显示元素
var oBox = document.getElementById('box');
//获取要点击功能的按钮
var full = document.getElementById('full');
var cancel = document.getElementById('cancel');
var isfull = document.getElementById('isfull');
//点击按钮让box全屏显示
full.onclick = function(){
/*
元素.requestFullscreen()表示请求这个元素全屏显示
requestFullScreen() 这个方法各个浏览器都有自己的方法来实现
所以让要让元素全屏显示 必须加上不同的浏览器的兼容前缀
谷歌浏览器的兼容写法加上webkit兼容前缀,需要写驼峰写法才能符合代码规范
*/
// 检测当前浏览器是什么浏览器,有能力执行对应的全屏的方法(检测这个方法有没有在对应浏览器上面的方法)
// 这种方式叫做浏览器的能力检测
//兼容不同的浏览器,让所用浏览器都可以全屏显示
if (oBox.webkitRequestFullScreen) {//谷歌浏览器
oBox.webkitRequestFullScreen()
} else if (oBox.mozRequestFullScreen) {//火狐浏览器
oBox.mozRequestFullScreen()
} else if (oBox.oRequestFullScreen) {//欧朋浏览器
oBox.oRequestFullScreen()
} else {//IE浏览器
oBox.msRequestFullScreen()
}
}
//退出全屏显示有两种方式
//1.在全屏中退出全屏按键盘上的Esc键即可
//2.document.cancelFullScreen()这个方法可以取消全屏显示
//点击按钮让box退出全屏
cancel.onclick = function(){
// cancelFullScreen 这个方法可以取消全屏显示, 这个方法只能是document这个对象调用
//不是让元素退出全屏 而是让docuemnt退出全屏
//兼容所有浏览器退出全屏显示
if (document.webkitCancelFullScreen) {//谷歌浏览器
document.webkitCancelFullScreen();
} else if (document.mozCancelFullScreen) {//火狐浏览器
document.mozCancelFullScreen();
} else if (document.oCancelFullScreen) {//欧朋浏览器
document.oCancelFullScreen();
} else {//IE浏览器
document.msCancelFullScreen();
}
}
isfull.onclick = function(){
// isFullScreen 这个方法可以判断是否在全屏状态下, 这个属性只能是document这个对象调用
//判断当前是否全屏状态下
alert(document.webkitIsFullScreen);
}
/*
requestFullscreen()让元素全屏显示的兼容前缀
cancelFullScreen()让元素退出全屏显示兼容前缀
isFullScreen判断元素是否全屏显示
各大浏览器兼容前缀
谷歌浏览器 webkit
火狐浏览器 moz
欧朋 o
IE ms
*/
</script>
</body>
</html>
全屏显示
HTML5规范规定页面中的任何元素都能够全屏显示
dom.requestFullScreen dom开启全屏显示
document.cancelFullScreen 关闭全屏显示
document.isFullScreen 是否全屏
由于全屏显示功能在各浏览器的兼容性不同 所以不同的浏览器中需要加不同的兼容前缀
- 谷歌 webkit
- 火狐 moz
- 欧朋浏览器 o
- IE浏览器 ms
:full-screen 全屏伪类选择器
网络检测
基本概念
-
HTML5提供两个事件来检测网络状态这两个事件检测的都是window对象
-
online 当从断网到连网 会触发回调函数
-
offline 当从连网到断网 会触发回调函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
margin:0;
padding:0;
}
body{
user-select: none;
}
#tips{
display: none;
width: 200px;
height: 50px;
margin: 100px auto;
text-align: center;
line-height: 50px;
background-color: rgba(0,0,0,.5);
color: #fff;
}
</style>
</head>
<body>
<div id="tips"></div>
<!-- 引用jQuery -->
<script src="../jquery-3.4.1.js"></script>
<script>
/*
H5 提供了检测设备网络状态的事件
HTML5提供两个事件来检测网络状态这两个事件检测的都是window对象
online 当从断网到连网 会触发回调函数
offline 当从连网到断网 会触发回调函数
*/
//当你一旦连接网络了,就提示恭喜你,网络已重连(当从断网到连网) 网络已连接
//当你一旦断开网络了,就提示对不住了,网络已断开(从连网到断网) 网络已断开
$(document).ready(function(){
//当从断网到连网
window.addEventListener('online',function(){
//tips淡入 2000ms 之后淡出
$('#tips').text('恭喜你,网络已重连').fadeIn().delay(2000).fadeOut();
},false)
//当从连网到断网
window.addEventListener('offline',function(){
//tips淡入 2000ms 之后淡出
$('#tips').text('对不住了,网络已断开').fadeIn().delay(2000).fadeOut();
},false)
});
</script>
</body>
</html>
检测网络状态
HTML5提供两个事件来检测网络状态 这两个事件检测的都是window对象
online 网络连接时
offline 网络断开时
读取文件
前言
type类型是file的input框表示上传文件,multiple让file上传多张图片
<!-- type类型是file的input标签表示上传文件
multiple让file上传多张图片
-->
<input type="file" multiple>
基本概念
当你点击了type类型是file的input框时,触发了input的onchange事件,但你从本地上传了数据也触发了input框的onchange事件
当type类型是file的input框时,你点击上传文件的时候,input节点的files这个属性存储了上传文件的数据集合(文件读取对象) ,files第0项存储了(当前文件的数据)返回结果是一个文件对象存储了文件的数据
点击type类型是file的input时,files属性:name文件的名字 ,size子节/1024/1024=M文件的大小 ,type文件的格式 ,文件lastModified上一次所更新的时间
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<!-- type类型是file的input标签表示上传文件
multiple让file上传多张图片
-->
<input type="file" multiple>
<script>
/*
单纯的上传图片只能出现一个文件名字
但是我想显示上传图片是显示上传的文件(不要显示文件的名字)在计算机本地的文件显示到网页当中
*/
var input = document.querySelector('input');
//点击上传文件存触发一个事件
//触发了input的onchange事件,但你从本地上传了一个文件触发了input节点的onchange事件
//当文件上传时 会触发回调函数
input.onchange = function(){
//文件读取对象
// files 这个属性存储了 上传文件的集合(文件读取对象)
// 理论上一个文件他是一组波数据,通过file类型的input把本地的图片作为数据上传到了JS引擎中(被JS引擎存储起来了)
//文件的数据其实存储在一个属性当中的
//存储到input节点中的files属性中的第0项存储了(当前文件的数据)索引0的位子有一个文件对象存储了图片的数据
console.log(this.files[0]);
//name图片的名字 size子节/1024 type图片的格式 lastModified上一次所更新的时间
//一个索引项表示一张图片的数据
console.dir(this.files);//返回结果是一个类数组当前数据原型是FileList(他是一个构造函数)
}
</script>
</body>
</html>
基本概念
- H5提供了FileReader这个构造函数让我们读取本地的文件 (var reader = new FileReader();//文件读取对象)
- reader.readAsText(文本文件) 读取文本文件
-
reader.readAsDataURL(图片文件) 读取图片文件
-
reader.result 返回结果是一些字符,这些字符就是一个文件(把文件用base64位的字符拼成一个文件)用base64给不同的字符表示一个文件
-
用new Image()启动的一个构造函数和 document.createElement('img')方式创建img节点的方式完全一致
上传图片
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<input type="file" multiple>
<script>
var input = document.querySelector('input');
input.onchange = function () {
//有了数据我要把的数据上传到页面当中(预览)
//把数据转换成图片
var file = this.files[0];//获取图片的数据
//通过new启动了一个FileReader构造函数,这个构造函数是H5给原生JS内置的一个新的构造函数
//生成一个有读取文件能力的对象
var reader = new FileReader();
//只要是通过new启动了FileReader构造函数就会返回一个对象,这个对象他是能够拥有读取文件能力的一个对象
//设置文件的格式
//读取图片请使用readAsDataURL(图片的数据)
// 读取文件对象吧file图片给读取出来了,读取出来的是一个URL(格式)
reader.readAsDataURL(file);//异步
//图片有大有小是读取URL是一个异步操作
//当你把图片的数据读取出来在做一些事情
//等文件读取对象 读完了file的数据之后 会触发onload事件
reader.onload = function () {
//读取出来的数据存储在文件读取对象中的result属性上面
// console.log(this.result);//返回结果是一些字符
// 这些字符就是一张图片(把图片用base64位的字符拼成一张图片)用base64给不同的字符表示一张图片
// base64用字符来表示图片
// 创建img节点 和 document.createElement('img')方式完全一致的
var oImg = new Image();
//等图片的资源加载完毕值在添加到body元素当中
oImg.src = this.result;//把URL路径给到src属性上面(异步代码)
oImg.width = 200;
//等图片加载完成添加到body节点内
oImg.onload = function () {
document.body.appendChild(this);
}
/*
把当前的图片用base64位展示的图片以字符串形式的方式打印出来
原本的图片大小小于用base64位展示图片
这就是用base64位展示图片的缺陷
*/
};
};
</script>
</body>
</html>
上传文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
margin:0;
padding:0;
}
body{
user-select: none;
}
</style>
</head>
<body>
<div id="box"></div>
<input type="file" multiple>
<script>
var input = document.querySelector('input');
var oBox = document.getElementById('box');
//当文件上传时 会触发回调函数
//图片png jpg等图片 文本文件tet md html css js等文件
input.onchange = function(){
var file = this.files[0];
//生成一个有读取文件能力的对象
var reader = new FileReader();//文件读取对象
//读取文本
reader.readAsText(file);//异步操作
reader.onload = function(){
//等到reader里面的result数据读取完毕就会触发onload事件
// console.log(this.result);//result属性存储了文件使用数据
oBox.innerText = this.result;//添加到页面上
};
}
</script>
</body>
</html>
读取文本文件的时候一定要保证文件的格式编码是UTF-8才能读取文本文件
读取文件
H5提供了FileReader这个构造函数让我们读取本地的文件 步骤如下
var reader = new FileReader() //创建对象 该对象能够读取文件
reader.readAsText(文本文件) //读取文本文件
reader.readAsDataURL(图片文件) //读取图片文件
reader.onload = function(){ //等读取好数据之后 打印读取好的数据
console.log(this.result) //获取文件的数据
}
Blob
前言
用base64位解析的图片或者是文件,解析出来的文件往往大于没有被解析的文件,所以在这种情况下Blob构造函数就诞生了
-
var blob = new Blob([图片文件对象]) 当图片文件对象作为参数传递到Blob构造函数里面的时候必须是以数组的形式传递进去
-
var url = window.URL.createObjectURL(blob) 通过这个方法把blob对象传递去生成一个网址(字符串)就是一张图片
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<input type="file" multiple>
<script>
//用base64为展示图片的缺陷
//解决方案把图片的数据用Blob构造函数处理一下
var input = document.querySelector('input');
//上传图片触发了onchange事件
input.onchange = function(){
//把数据转换成图片
var file = this.files[0];//获取图片的数据
var blob = new Blob([file]);//把要处理的数据放在在一个数组当中,当做Blob参数传递去(必须是以数组的形式放置数据)
//通过Blob函数把图片对象file 解析成blob
//把图片的数据放在在,用new 生成Blob构造函数当中 参数用一个数组里面放在数据
console.log(blob)
var url = window.URL.createObjectURL(blob);
//通过window.URL.createObjectURL把生成好了的blob对象传递去生成一个网址
//这个生成的网址(字符串)就是一张图片
// 把生成的blob对象传入到 createObjectURL函数中 生成一个url
console.log(url)
var oImg = new Image();
oImg.src = url;
oImg.width = 200;
//等图片加载完毕添加到body当中
oImg.onload = function(){
document.body.appendChild(oImg);
};
}
</script>
</body>
</html>
base64格式的图片太大 可以使用Blob函数把图片文件对象转换成一个blob对象
var blob = new Blob([图片文件对象]) //生成blob对象
var url = URL.createObjectURL(blob) //生成一个地址
H5拖拽
前言
在浏览器里面里面(除了图片和文字)以外的元素默认都是不可以被拖拽的,想要拖拽某个元素必须在HTML标签里面加上draggable='true'属性表示当前元素是可以被拖拽的
H5规定了任何想要拖拽的元素必须加上draggable='true'这个属性表示当前这个元素是可以被拖拽的
img图片默认是可以被拖拽的(不需要加上draggable='true'属性)
<div id="left">目标区域</div>
<div id="right" draggable='true'>拖拽元素</div>
<!-- 当前元素是可以被拖拽的(元素默认是不可以被拖拽的) -->
<!-- 元素默认是不可以被拖拽的 如果想要其可以拖拽 必须加上draggable="true" -->
H5新增的属性个个浏览器都兼容的不是很好,兼容都没有统一
H5的拖拽他是由两个部分组成的
-
拖拽源对象
-
拖拽目标元素
拖拽源对象
dragstart 当鼠标在拖拽元素上按下时 触发
//当你一开始拖拽元素就会触发这个事件(鼠标按下)
oRight.ondragstart = function(){
//一旦拖拽这个元素就触发ondragstart事件
console.log('ondragstart事件')
};
drag 持续触发 当鼠标在拖拽元素上时触发 不论鼠标有没有运动
//当鼠标在拖拽元素上面拖拽时触发这个事件(鼠标移动)
oRight.ondrag = function(){
console.log('ondrag事件');
//在拖拽元素之上(拖拽元素的虚影)就会触发ondrag事件
};
dragend 当鼠标在拖拽元素上抬起时 触发
//当鼠标在拖拽元素上面抬起时触发这个事件(鼠标抬起)
oRight.ondragend = function(){
console.log('ondragend事件');
//当鼠标在拖拽元素抬起时触发这个事件
};//end(结束)
拖拽源对象
- dragstart 当鼠标在拖拽元素上按下时 触发
-
drag 持续触发 当鼠标在拖拽元素上时触发 不论鼠标有没有运动
-
dragend 当鼠标在拖拽元素上抬起时 触发
拖拽目标元素(拖拽区域)
都是绑定在目标元素里面的,都是根据鼠标有没有进入目标元素来判断是否激活当前事件
ondragenter 当鼠标进入到拖拽区域时触发
//当鼠标进入目标元素里面就会触发dragenter事件
oLeft.ondragenter = function(){
console.log('ondragenter事件');
//鼠标进入目标元素里面触发dragenter事件
};
ondragleave 当鼠标离开到拖拽区域时触发
//当鼠标离开目标元素里面触发dragleave事件
oLeft.ondragleave = function(e){
console.log('ondragleave事件');
//鼠标离开目标元素就会触发这个事件
};
ondragover 常用 当鼠标在拖拽区域时持续触发 不论鼠标有没有运动 (常用于清除浏览器默认事件,激活drop事件)
//当鼠标在目标区域中移动触发dragover事件
oLeft.ondragover = function(e){
console.log('ondragover事件');//当鼠标在目标区域上面时触发ondragover事件
//这样写很保险的阻止掉了默认行为
e.preventDefault();//阻止默认行为(必写)
e.stopPropagation();//阻止事件冒泡
return false;
};
ondrop 常用 当鼠标在目标区域抬起时触发 需要在dragover事件中阻止默认行为 默认情况下 浏览器会阻止这个事件的触发
//当鼠标在目标元素上面抬起触发ondrop事件
oLeft.ondrop = function(){
//默认是浏览器无法感知ondrop这个事件的(这种情况是浏览器的默认行为)我们需要在dragover事件中阻止默认行为
console.log('ondrop事件');
};
拖拽目标元素(拖拽区域)
都是绑定在目标元素里面的,都是根据鼠标有没有进入目标元素来判断是否激活当前事件
- ondragenter 当鼠标进入到拖拽区域时触发
- ondragleave 当鼠标离开到拖拽区域时触发
- ondragover 常用 当鼠标在拖拽区域时持续触发 不论鼠标有没有运动
- ondrop 常用 当鼠标在目标区域抬起时触发 需要在dragover事件中阻止默认行为 默认情况下 浏览器会阻止这个事件的触发
总结
H5拖拽
H5拖拽有两个部分组成 拖拽元素 + 目标元素
拖拽元素的事件
- ondragstart 鼠标按下拖拽元素时触发 常用 一般在这个事件中存储数据
- ondrag 在拖拽元素的过程中持续触发
- ondragend 鼠标抬起拖拽元素时触发
目标元素的事件
- ondragenter 当鼠标进入目标元素内部触发
- ondragover 当鼠标在目标元素上部移动时持续触发 常用
- ondragleave 当鼠标离开目标元素内部时触发
- ondrop 当鼠标在目标元素抬起时触发 常用
浏览器的默认行为会阻止该事件 只要在dragover阻止这个默认行为 浏览器就能检测drop事件