HTML5的新属性和新方法

1.表单新增的type属性

  1. email: email提供了默认的电子邮箱校验:要求必须包含@符号,同时必须包含服务器的名称,例如@qq.com,@163.com,如果不能满足验证,则会阻止当前数据的提交
  2. tel: tel并不提供校验功能,它的本质目的是为了在移动端能打开数字键盘,这意味着数字键盘限制了用户只能输入数字
  3. url: 验证只能输入合法的网址:必须包含http://…
  4. number: 只能输入数字(包含小数点),不能输入其他字符,max:可输入的最大值;min:可输入的最小值;value:默认值
  5. range:范围条
  6. search:更人性化的输入体验,输入框最右侧有一个X符号,可一键删除输入框的内容
  7. color:提供颜色选择
  8. time:时分秒
  9. date:年月日
  10. datetime-local:日期时间
  11. month:月份
  12. week:星期
<form>
    <input type="email"><br>
    <input type="tel"><br>
    <input type="url"><br>
    <input type="number" max="100" min="0" value="66"><br>
    <input type="range" max="100" min="0" value="22"><br>
    <input type="search"><br>
    <input type="color"><br>
    <input type="time"><br>
    <input type="date"><br>
    <input type="datetime-local"><br>
    <input type="month"><br>
    <input type="week"><br>
    <input type="submit" value="提交">
</form>

2.表单新增的其他属性

  1. placeholder:提示文本;
  2. autofocus:自动获取输入框焦点;
  3. autocomplete:提示输入过的内容,但要满足两个条件
    1.必须成功提交过;
    2.标签元素具有name属性
  4. required:必须输入值,如果没有输入会阻止当前数据的提交
  5. pattern:正则表达式验证
    *: 表示任意个
    ?: 代表0个或1个
    +: 代表1个或多个
  6. multiple:可以选择多个文件,当type类型为email时,也可以输入多个邮箱地址,以逗号分隔
  7. form:指定表单id,那么将来指定id的表单进行数据提交的时候,也会将当前form属性值为对应表单id的数据一起提交-
<form id="myForm">
  <input type="text" name="account" placeholder="请输入用户名" autofocus autocomplete="on"><br>
   
   <input type="tel" required pattern="^(\+86)?\d{10}$"><br>
   
    <input type="file" multiple name="files"><br>
    <input type="email" multiple name="email">
    
    <input type="submit">
</form>
<input type="text" name="address" form="myForm">
<!--这个元素并没有包含在form中:默认情况下该元素也不会被提交,通过form属性提交->

3.表单新增元素(datalist)

  1. 创建选项值:value–具体的值 label–提示信息,辅助值
  2. 看似功能十分强大但是兼容性特别差
  3. option:可以是单标签,也可以是双标签
  4. 如果input的type为URL,那么value值必须包含http://…
<form id="myForm">
    专业:<input type="text" list="sublist">
    <datalist id="sublist">
    	<option value="java" label="针不戳"></option>
    	<option value="Python" label="人多"></option>
    	<option value="javascript" label="一般"></option>
    </datalist>
    <input type="submit">
</form>

4.表单新增的事件

  1. oninput:监听当前指定元素内容的改变,只要内容改变(添加内容,删除内容),就会触发该事件
  2. 与onkeyup的区别:可检测到右键粘贴导致的文本框内容变化
  3. oninvaild:当验证不通过时触发
<form id="myForm">
   用户名:<input type="text" name="userName" id="userName"><br>
    电话:<input type="tel" name="userPhone" pattern=“^{d}10$” id="userPhone"><br>
    <input type="submit">
</form>
<script>
   
document.getElenemtById('userName').oninput=function(){
    console.log(this.value)
}
    
    document.getElenemtById('userPhone').oninvaild=function(){
    this.setCustomValidity('请输入合法的手机号')
}
</script>

5.进度条

  1. progress:max:最大值 value:当前值
  2. meter:high:规定的较高的值 low:规定的较低的值 max:最大值 min:最小值 value:当前值
<progress max="100" value="22"></progress>
<meter max="100" min="0" low="22" high="66" value="33"></meter>

6.小案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin:0;
            padding:0;
        }
        fieldset{
            width:60%;
            margin:10px auto;
            padding:40px;
        }
        fieldset>label{
            padding:10px;
            display: inline-block;
        }
        fieldset>meter,
        fieldset>input{
            width:100%;
            padding:10px 10px;
            font-size: 15px;
            border:1px solid skyblue;
            border-radius:10px;
            outline:none;
        }
        fieldset>meter{
            outline: #333;
            height:50px;
            padding:0;
        }
        fieldset>input[type="submit"]{
            margin:10px;
        }
    </style>
</head>
<body>
<form action="" method="post">
  <fieldset>
      <legend>学生档案</legend>
      <label for="userName">姓名:</label>
      <input id="userName" type="text" placeholder="请输入姓名">
      <label for="userPhone">手机号码:</label>
      <input id="userPhone" type="tel" pattern="^(\+86)?\d{10}$">
      <label for="userEmail">邮箱地址:</label>
      <input id="userEmail" type="email" required>
      <label for="userSchool">所属学院:</label>
      <input id="userSchool" type="text" list="school">
      <datalist id="school">
          <option value="web前端"></option>
          <option value="web后端"></option>
          <option value="python"></option>
      </datalist>
      <label for="userGrade">入学成绩:</label>
      <input id="userGrade" type="number" min="0" max="100" value="0">
      <label for="userLevel">基础水平:</label>
      <meter id="userLevel" min="0" max="100" value="0" low="59" high="95"></meter>
      <label for="userRegister">入学日期:</label>
      <input id="userRegister" type="datetime-local" >
      <label for="userGraduate">毕业日期:</label>
      <input id="userGraduate" type="datetime-local" >
      <input type="submit" value="提交">
  </fieldset>
</form>
</body>
<script>
   document.querySelector('#userPhone').addEventListener('invalid',function(){
       this.setCustomValidity("请输入十位电话号码")
   })
   document.querySelector('#userGrade').addEventListener('input',function (){
       document.querySelector('#userLevel').value=this.value
   })
</script>
</html>

7.自定义属性

  1. 以**data-**开头
  2. data-后必须至少有一个字符,多个单词使用-连接
  3. 名称都是小写字符,不能包含大写字符和特殊符号
<p data-school-name='itcast'>
    22132
</p>
<script>
let p=document.querySelector('p');
   let value=p.dataset['schoolName']
   console,log(value)
</script>

8.全屏接口

  1. requestFullScreen():开启全屏显示

    不同浏览器下需要添加不同的前缀

    Chrome:webkit firefox:moz ie:ms opera:o

  2. cancelFullScreen():退出全屏显示

    与开启全屏类似,需要添加前缀

  3. fullScreenElement():是否是全屏状态

兼容性写法

<button>full</button>
<script>
  document.querySelector('button').addEventListener('click',function (){
      let div= document.querySelector('body');
       if(div.requestFullScreen){
           div.requestFullScreen();
       }
       else if(div.webkitRequestFullScreen){
           div.webkitRequestFullScreen();
       }
       else if(div.mozRequestFullScreen){
           div.mozRequestFullScreen();
       }
       else if(div.msRequestFullScreen){
           div.msRequestFullScreen();
       }
   })
</script>

9.fileReader

  1. readAsText():读取文本文件(可以使用Txt打开的文件),返回文本字符串,默认编码是UTF-8
  2. readAsBinaryString():读取任意类型的文件,返回二进制字符串。这个方法不是用来读取文件展示给用户看,而是存储文件。(把文件以二进制的形式传递给后端)
  3. readAsDataURL():读取文件以获取一段以data开头的字符串。DataURL是将资源转换成base64编码的字符串形式,并且将这些内容直接存储在URL中,优化网站的加载速度和执行效率
  4. abort():中断读取
  5. 事件函数
    • onabort()读取文件中断时触发
    • onerror()读取错误时触发
    • onload()文件读取成功完成时触发
    • onloadend()文件读取完成时触发,无论成功与否
    • onloadstart()开始读取时触发
    • onprogress()读取文件过程中持续触发
  6. 实现案例
<body>
    <form action="">
    <input type="file" name="myFile" id="myFile" onchange="submitFile()">
    <input type="submit" value="submit">
</form>
<img src="" alt="">
</body>

<script>
  function submitFile(){
      let reader=new FileReader();//创建文件读取对象
      let file=document.querySelector('#myFile').files[0];
      reader.readAsDataURL(file);//读取文件
      //1.没有返回值,但是会把读取结果存储在读取对象的result中
      //2.需要传递一个blob参数,即二进制文件(一般指图片或者其他可以嵌入到文档的类型)
      reader.onload=function(){
          console.log(reader.result);
          document.querySelector('img').src=reader.result;
      }
  }
</script>

10.拖拽

在HTML5中,想要拖拽元素,需要为元素添加draggable属性

被拖动的源对象可以触发的事件:

(1)ondragstart:源对象开始被拖动

(2)ondrag:源对象被拖动过程中(鼠标可能在移动也可能未移动)

(3)ondragend:源对象被拖动结束

拖动源对象可以进入到上方的目标对象可以触发的事件:

(1)ondragenter:目标对象被源对象拖动着进入

(2)ondragover:目标对象被源对象拖动着悬停在上方

(3)ondragleave:源对象拖动着离开了目标对象

(4)ondrop:源对象拖动着在目标对象上方释放/松手,但浏览器存在默认行为,会阻止ondrop事件,需要在ondragover中阻止浏览器的默认行为

案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .div1,.div2{
            width:400px;
            height: 400px;
            border:1px solid skyblue;
        }
    </style>
</head>
<body>
<div  class="div1">
    <p id="wwww" draggable="true">232323</p>
</div>
<div  class="div2"></div>
</body>
<script>

  document.ondragstart=function(e){
      console.log(e)
      e.target.style.opacity=0.5;
      e.dataTransfer.setData("text/html",e.target.id);
  }
    document.ondragend=function(e){
        e.target.style.opacity=1;
    }
document.ondragover=function(e){
      e.preventDefault();
}
document.ondrop=function(e){
    let id=e.dataTransfer.getData("text/html");
    e.target.appendChild(document.getElementById(id))
}
</script>
</html>

11.地理定位

1.H5地理位置定位功能

首先判断用户浏览器是否支持该功能,目前大多数现代浏览器均支持,获取位置信息需用户授权同意

function getLocation(){ 
  if (navigator.geolocation){ 
    navigator.geolocation.getCurrentPosition(showPosition,showError); 
  }else{ 
    alert("浏览器不支持地理定位。"); 
  } 
} 

2.showPosition()获取用户经度纬度

function showPosition(position){
   console.log(position); 
   var lat = position.coords.latitude; //纬度 
   var lag = position.coords.longitude; //经度 
   console.log('纬度:'+lat+',经度:'+lag); 
} 

3.执行函数getLocation(),如果调用成功即可显示经度纬度

4.补充showError(),这个函数是报错信息

showError(error){

  console.log(error.code)

}
function showError(error){ 
  switch(error.code) { 
    case error.PERMISSION_DENIED: 
      alert("定位失败,用户拒绝请求地理定位"); 
      break; 
    case error.POSITION_UNAVAILABLE: 
      alert("定位失败,位置信息是不可用"); 
      break; 
    case error.TIMEOUT: 
      alert("定位失败,请求获取用户位置超时"); 
      break; 
    case error.UNKNOWN_ERROR: 
      alert("定位失败,定位系统失效"); 
      break; 
  } 
} 

12.sessionStorage

1.特点

  • 存储数据到当前页面的内存中
  • 它的生命周期为关闭当前页面,关闭页面,数据会自动清除

2.使用

  • setItem(key,value):存储数据,以键值对的方式存储
  • getItem(key):获取数据,通过指定名称的key获取对应的value值
  • removeItem(key):移除指定名称key的value值
  • clear():清空所有存储的数据

13.localStorage

1.特点

  • 不同浏览器不能共享数据,但是在同一个浏览器的不同窗口中可以共享数据
  • 存储内容大概20mb
  • 永久生效,它的数据存储在硬盘上,并不会随着页面或者浏览器的关闭而清除数据

2.使用

与sessionStorage方法相同

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值