H5新增API

前言

HTML新增的API是放在移动端的 IE低版本浏览器就不要去考虑了(H5一般是在做移动端)

全屏显示

基本概念

  1. HTML5规范允许用户自定义网页上任一元素全屏显示(规定了任何元素都可以全屏显示)
  2. 元素.requestFullscreen() 开启全屏显示、document.cancleFullscreen() 关闭全屏显示、document.isFullScreen判断当前是否全屏状态下
  3. 不同浏览器兼容性不一样
  4. 全屏伪类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  是否全屏

由于全屏显示功能在各浏览器的兼容性不同      所以不同的浏览器中需要加不同的兼容前缀

  1. 谷歌  webkit
  2. 火狐  moz
  3. 欧朋浏览器    o
  4. IE浏览器     ms

:full-screen       全屏伪类选择器

 

网络检测

基本概念

  1. HTML5提供两个事件来检测网络状态这两个事件检测的都是window对象

  2.  online  当从断网到连网  会触发回调函数

  3. 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>

基本概念

  1. H5提供了FileReader这个构造函数让我们读取本地的文件 (var reader = new FileReader();//文件读取对象
  2. reader.readAsText(文本文件)               读取文本文件
  3. reader.readAsDataURL(图片文件)       读取图片文件

  4. reader.result   返回结果是一些字符,这些字符就是一个文件(把文件用base64位的字符拼成一个文件)用base64给不同的字符表示一个文件

  5. 用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构造函数就诞生了

  1. var blob = new Blob([图片文件对象])   当图片文件对象作为参数传递到Blob构造函数里面的时候必须是以数组的形式传递进去

  2. 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的拖拽他是由两个部分组成的

  1. 拖拽源对象

  2. 拖拽目标元素

拖拽源对象

dragstart  当鼠标在拖拽元素上按下时 触发

//当你一开始拖拽元素就会触发这个事件(鼠标按下)
oRight.ondragstart = function(){
    //一旦拖拽这个元素就触发ondragstart事件
    console.log('ondragstart事件')
};

 drag  持续触发 当鼠标在拖拽元素上时触发 不论鼠标有没有运动

//当鼠标在拖拽元素上面拖拽时触发这个事件(鼠标移动)
oRight.ondrag = function(){
    console.log('ondrag事件');
    //在拖拽元素之上(拖拽元素的虚影)就会触发ondrag事件
};

 dragend   当鼠标在拖拽元素上抬起时  触发

//当鼠标在拖拽元素上面抬起时触发这个事件(鼠标抬起)
oRight.ondragend = function(){
    console.log('ondragend事件');
    //当鼠标在拖拽元素抬起时触发这个事件
};//end(结束)

拖拽源对象

  1. dragstart  当鼠标在拖拽元素上按下时 触发
  2. drag  持续触发 当鼠标在拖拽元素上时触发 不论鼠标有没有运动

  3. 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事件');
};

拖拽目标元素(拖拽区域)

都是绑定在目标元素里面的,都是根据鼠标有没有进入目标元素来判断是否激活当前事件

  1.  ondragenter   当鼠标进入到拖拽区域时触发
  2.  ondragleave   当鼠标离开到拖拽区域时触发
  3. ondragover  常用 当鼠标在拖拽区域时持续触发  不论鼠标有没有运动
  4. ondrop      常用  当鼠标在目标区域抬起时触发 需要在dragover事件中阻止默认行为 默认情况下  浏览器会阻止这个事件的触发

总结

H5拖拽

H5拖拽有两个部分组成    拖拽元素 + 目标元素

拖拽元素的事件

  1. ondragstart  鼠标按下拖拽元素时触发  常用  一般在这个事件中存储数据 
  2. ondrag  在拖拽元素的过程中持续触发     
  3. ondragend  鼠标抬起拖拽元素时触发

目标元素的事件

  1. ondragenter  当鼠标进入目标元素内部触发
  2. ondragover  当鼠标在目标元素上部移动时持续触发        常用
  3. ondragleave  当鼠标离开目标元素内部时触发
  4. ondrop  当鼠标在目标元素抬起时触发   常用

浏览器的默认行为会阻止该事件  只要在dragover阻止这个默认行为  浏览器就能检测drop事件 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值