溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

html5中新增加的屬性與元素是什么

發(fā)布時間:2022-01-17 14:05:26 來源:億速云 閱讀:160 作者:iii 欄目:web開發(fā)

本篇內(nèi)容介紹了“html5中新增加的屬性與元素是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

html5中新增加的屬性有placeholder、calendar、date、time、email、url、search、Hidden等;新增加的元素有header、footer、nav、article、canvas、svg、video等。

本教程操作環(huán)境:windows7系統(tǒng)、HTML5版、Dell G3電腦。

html5–多用于移動端

新增的屬性

  • placeholder

  • calendar, date, time, email, url, search

  • contentEditable(來描述標(biāo)簽中的內(nèi)容是否可編輯)

  • Draggable

  • Hidden

  • Context-menu

  • Data-val(自定義屬性)

新增的標(biāo)簽

  • 語義化標(biāo)簽(一群類似div的東西)

  • canvas(畫板)

  • svg(也算是一個畫板)

  • audio(聲音播放)

  • video(視頻播放)—html5之前一般都用flash–現(xiàn)在flash使用比較少,現(xiàn)在adobe停止維護

API

  • a. 定位(需要地理位置的功能)

  • b. 重力感應(yīng)(手機中要有陀螺儀)

  • c. request-animation-frame(動畫優(yōu)化)

  • d. History(控制當(dāng)前頁面的瀏覽記錄)

  • e. LocalStorage–一直存在,SessionStorage(存儲信息,比如歷史最高記錄,聊天記錄-存在本地)–>頁面關(guān)了就沒了

  • f. websocket–用來做通信的(可用于在線聊天,聊天室)

  • g. fillReader(文件讀取和預(yù)覽)

  • h. webWorker(文件的異步處理–用來提升性能,提升交互體驗)

  • i. fetch(傳說中要替代AJAX的東西,兼容性不太好,使用的公司不多)

屬性篇

input的新type

  • placeholder

<input type='text' placeholder='請輸入用戶名'>
<input type='password' placeholder='密碼'>
  • calendar類

<input type='date'><!--兼容性不好,chrome支持,safari,IE不支持-->
<input type='time'>
<input type='week'>
<input type='datatime-local'><!--把年月日事件結(jié)合在一起填寫的框-->
<!-- 上述關(guān)于時間的標(biāo)簽不怎么常用,兼容性不好 -->
<!-- 上面為calendar類 -->
<br>
<input type='number'><!--限制輸入,如果非數(shù)字則無法輸入,但是只有chrome支持-->

<input type='email'><!--格式不正確的話會提示錯誤,只有chrome和Firefox支持-->
<input type='color'><!--顏色選擇器 只有chrome支持-->
<input type='range' min='' max='' name="">
<!--chrome和safari支持,火狐和IE 不支持-->
<input type='search' name='search'>
<!-- 自動提示 , 只有chrome支持,safari支持一點(只有內(nèi)容打全了才提示)-->
<input type='url'>
<!--如果填寫的不是網(wǎng)址的話會提示,chrome、Firefox支持,safari和IE不支持-->

contentEditable

細節(jié):該屬性只填寫一個contenteditable也可以起作用,但是后面的draggable就不行,只可以寫成draggable='true’這樣的形式

以前沒有這個屬性的時候要修改div里面的內(nèi)容需要給div添加點擊事件,當(dāng)被點擊之后,將該標(biāo)簽變?yōu)閕nput輸入框,然后填完替換

<div contenteditable='true'>ddd</div>
<!-- 沒有兼容性問題 一般用于展示頁面中可修改的表格 -->

該屬性可以繼承,如果自己沒有設(shè)置,會看父級有無contenteditable

細節(jié):雖說沒有寫該屬性無法編輯,然后如果里面嵌套了其他元素,然后里面元素設(shè)置的屬性值為false,只是代表該元素內(nèi)容無法修改,然后它其實可以和他的元素名作為一個整體被刪除;

<div contenteditable>
    <span contenteditable='false'>姓名:</span>monkey<br>
    <span contenteditable='false'>性別:</span>
</div>

Draggable

可拖拽的—拖拽的還是虛擬的,并不會改變元素的位置(可以自己實現(xiàn),用后面兩個拖拽事件)

兼容性:只有chrome和safari可以正常使用,F(xiàn)irefox下不好使

a標(biāo)簽 img標(biāo)簽 默認是可拖拽的

既然可以拖拽,那就有拖拽事件

  • 拖拽的生命周期

從按下到開始拖拽叫做拖拽開始,然后拖拽進行,當(dāng)松開的那一刻,拖拽結(jié)束

  1. 拖拽開始

  2. 拖拽進行中

  3. 拖拽結(jié)束

  • 拖拽的組成

  1. 被拖拽的物體

  2. 目標(biāo)區(qū)域

  • 被拖拽的物體以及其生命周期

通過下面三個事件可以隨時的知道元素的位置
clientX:鼠標(biāo)的x軸位置
clientY:鼠標(biāo)的y軸位置

var oDragDiv = document.getElementsByClassName('a')[0];

// 在移動的一瞬間開始觸發(fā)
oDragDiv.ondragstart = function (e) {
    console.log(e);
}

// 移動事件 移動的過程中會觸發(fā)很多次
oDragDiv.ondrag = function (e) {
    console.log(e)
}

// 在結(jié)束時觸發(fā)
oDragDiv.ondragend = function (e) {
    console.log(e);
}

所有的標(biāo)簽元素,當(dāng)拖拽周期結(jié)束時,默認事件是回到原處;

事件是由行為觸發(fā)的,但是一個行為可以不止觸發(fā)一個事件
比如鍵盤鼠標(biāo)抬起既觸發(fā)了onclick 又觸發(fā)了onmouseup

拖拽事件松開的瞬間,觸發(fā)了ondragover ondrop

但是默認的ondragover執(zhí)行完后,默認事件是回到原處,故不會觸發(fā)ondrop事件

ondragover -> 回到原處
-> 執(zhí)行drop事件
責(zé)任鏈模式:
A -> B(阻止) ->默認事件

阻止默認事件,e.preventDefault();

  1. 被拖拽物體的目標(biāo)區(qū)域(結(jié)束元素)

// 1. 由圖形剛進入到目標(biāo)區(qū)域后觸發(fā)的事件, 該事件一開始觸發(fā)一次
oDragTarget.ondragenter = function (e) {
    // 不是元素的圖形進入就觸發(fā)的,而是拖拽的鼠標(biāo)進入觸發(fā),如果說組件里有那種圖形一進入就觸發(fā)的,是經(jīng)過計算算出來的,一開始我們可以知道鼠標(biāo)相對圖形邊緣的距離,然后這樣計算
    console.log(e);
}

// 不斷的觸發(fā)
// 2.當(dāng)圖形進入目標(biāo)區(qū)域之后,只要坐標(biāo)有變化會不斷的觸發(fā), 和ondrag事件有點像
oDragTarget.ondragover = function (e) {
    console.log(e);
}

// 3.該事件表示圖形進入目標(biāo)區(qū)域后,一離開觸發(fā)的事件
oDragTarget.ondragleave = function (e) {
    console.log(e);
}


//4. 拖拽 放下(一松手)的時候觸發(fā)的事件()
// 由于所有的ondragover默認當(dāng)拖拽周期結(jié)束時(松手的時候),會觸發(fā)默認事件-回到原處 ,所有在使用ondrop 事件的時候需要在ondragover事件中阻止默認事件 e.preventDefault()
oDragTarget.ondrop = function (e) {
    console.log(e);
}
// 該拖拽事件發(fā)生在ondragend之前

小demo練習(xí)

補充屬性 datatransfer

拖拽的時候和進入目標(biāo)區(qū)域的時候,指針是會變化

這個屬性不常用,原因是兼容性不好,只有在chrome中支持

繼承自O(shè)bject MOuseEvent對象 —> 鼠標(biāo)事件
其實就是多了個屬性
e.dataTransfer

該屬性必須在ondragevent中設(shè)置,但是顯示的時候是在進入目標(biāo)區(qū)域后指針改變
e.dataTransfer.effectAllowed = ‘link’

該屬性只能在ondrop中使用
e.dataTransfer.dropEffect = ‘link’
type為link copy move copyMove linkMove all

h6新增標(biāo)簽

語義化標(biāo)簽

使用標(biāo)簽時盡量的更加語義化

h6新增了很多語義化標(biāo)簽
以下這些標(biāo)簽只是有語義,本質(zhì)上和p沒有區(qū)別

  • header
    頁面頂部

  • footer
    頁面底部

  • nav
    導(dǎo)航條

  • article
    文章—可以直接被引用拿走的,比如一個博客文章內(nèi)容

  • section
    段落結(jié)構(gòu)–不是一個完整

實際開發(fā)中section 和 article區(qū)分的沒有特別仔細

  • aside
    側(cè)邊欄–正文旁邊的地方

canvas標(biāo)簽

特點:要想給定畫板的大小,必須在行間加樣式而不是用css渲染樣式

canvas是用js操縱畫東西的 canvas元素本身就是一塊畫布,需要結(jié)合js來畫畫

規(guī)范,建議在每開始畫一筆之前都加上ctx.beginPath(),也就是在每一次ctx.moveTo(x, y)之前加上ctx.beginPath()

1、畫筆

var ctx = canvas.getContext(‘2d’)

a. 規(guī)劃路徑

起點:ctx.moveTo(x, y);

從哪畫到哪:ctx.lineTo(x, y);

b. 描線

ctx.stroke();

c. 方法

ctx.closePath(); 閉合路徑,回到起點–只針對一筆畫出來的圖形

ctx.fill(); 填充區(qū)域,不需要stroke,fill自動會stroke,默認是起始點到終止點的連線(畫個圓弧很容易觀察出來)

改變畫筆線條的粗細,改為numpx

ctx.lineWidth = num;

同一筆畫下來的圖形粗細是相同的

重新開啟一個路徑

ctx.beginPath()

然后開始新的moveTo和lineTo

2、畫矩形

注意:以下畫法不需要使用moveTo()來表明起點,因為rect()方法的startX, startY已經(jīng)表明了起點

  • 畫法1

空矩形
ctx.rect(startX, startY, length, height);
ctx.stroke()

  • 畫法2

空心矩形
ctx.strokeRect(startX, startY, length, height);

  • 畫法3

實心矩形
ctx.fillRect(startX, startY, length, height)

ctx.clearRect(startX, startY, length, height);//清除指定區(qū)域的圖形

3、畫圓(圓弧)

圓心(x, y), 半徑?, 弧度(起始弧度, 結(jié)束弧度), 方向(順逆時針)

順時針填0,逆時針填1;
canvas的0度角在和數(shù)學(xué)中的一樣

起止弧度的大小默認以順時針的計算為準(zhǔn)

90° = pi / 2

ctx.arc(x, y, r, radStart, radEnd, direction);

var canvas = document.getElementById('can');
var can = canvas.getContext('2d');
can.arc(100, 100, 50, 0, Math.PI * 1.5, 1);
can.fill()

4、圓角

圓角矩形當(dāng)然可以用四條線 + 四個90°的弧來畫,但是下面有更簡單的方法,只需要畫四筆

var canvas = document.getElementById('can');
var can = canvas.getContext('2d');
can.moveTo(100, 120);
can.arcTo(100, 300, 300, 300, 20);
can.arcTo(300, 300, 300, 100, 20);
can.arcTo(300, 100, 100, 100, 20);
can.arcTo(100, 100, 100, 300, 20);
can.stroke();

5、貝塞爾曲線

需要規(guī)定起點moveTo(x, y)
二次:quadraticCureTo(x1, y1, x2, y2)  
三次:bezierCurveTo(x1, y1, x2, y2, x3, y3)

// 4. 貝塞爾曲線
        var canvas = document.getElementById('can');
        var can = canvas.getContext('2d');
        

        can.beginPath();
        can.moveTo(100, 100);
        // quadraticCurveTo()
        can.bezierCurveTo(200, 200, 300, 200, 400, 100);
        can.stroke();

6、canvas坐標(biāo)平移旋轉(zhuǎn)和縮放

默認根據(jù)畫布的圓點進行旋轉(zhuǎn)
可以根據(jù)can.translate()進行坐標(biāo)系的平移

can.translate(x, y)

然后旋轉(zhuǎn)的話會根據(jù)新的圓心(x, y)進行旋轉(zhuǎn)

can.translate(x, y);//全局起作用

can.rotate(旋轉(zhuǎn)弧度);//全局起作用

can.scale(橫向縮放, 縱向縮放)
// 計算方法:每一個坐標(biāo)點的x, y都乘以了相應(yīng)的縮放值

因為坐標(biāo)系的平移和形狀的旋轉(zhuǎn)是全局起作用的,所以設(shè)置了一次之后,新畫的圖形都會按照改變了坐標(biāo)系以及旋轉(zhuǎn)形狀之后的條件 stroke,如果后面畫的圖形在stroke的時候還想按照原來的那樣,就需要在改變坐標(biāo)系以及旋轉(zhuǎn)之前保存以下,后面再恢復(fù),就像中斷一樣,保護現(xiàn)場–恢復(fù)現(xiàn)場

can.save()

可以保存坐標(biāo)系的平移數(shù)據(jù),縮放數(shù)據(jù),旋轉(zhuǎn)數(shù)據(jù)

can.restore()

7、背景填充

can.fillStyle = ‘color’
var img = new Image();
img.src = ‘’
將圖片變成紋理,然后填充
var bg = can.createPattern(img, ‘no-repeat’);
img.onload = function () {
}

圖片默認是以canvas框的坐標(biāo)系原點開始填充的,想要改變背景圖片的位置的話需要使用can.translate(newX, newY);

8、顏色漸變函數(shù)

linearGradient(direction, color1 position, color2)
radialGradient(shape radius at position, color1, position, color2, position…)

var canvas = document.getElementById('can');
can = canvas.getContext('2d');
can.beginPath();
var bg = can.createLinearGradient(0, 0, 200, 200);
bg.addColorStop(0, 'white');
bg.addColorStop(1, 'black');//第一個數(shù)字只能從0~1, 是百分比的概念
can.fillStyle = bg;

// 輻射漸變---在chrome收藏夾中找
var bg = ctx.createRadialGradient(x1, y1, r1, x2, y2, r2);
// 從起始圓的邊向結(jié)束圓的邊漸變輻射
// 起始圓和結(jié)束圓可以是不同的圓心   起始圓大于結(jié)束圓的時候,外界的顏色就都是起始圓的顏色,結(jié)束圓大于起始圓的時候,外界的顏色就是結(jié)束圓的顏色

9、陰影

注意這個陰影是一邊一半的;
ctx.shadowColor = ‘blue’;
ctx.shadowBlur = num;
ctx.shadowOffset = num1;

陰影在x和y方向的偏移量
ctx.shadowOffsetX = num2;
ctx.shadowOffsetY = num3;

10、canvas渲染文字

ctx.strokeText(‘content’, x, y); 文字描邊

ctx.fillText(‘content’, x, y);

可以通過設(shè)置fillStyle設(shè)置格式文字填充

ctx.font = ‘20px Georgia’ 兩種填充都可設(shè)置上font

實心字用strokeText, 空心字用fillText

11、線端樣式

ctx.beginPath();
ctx.lineWidth = '30';
ctx.moveTo(100, 100);
ctx.lineTo(200, 200)
ctx.lineCap = 'butt' //butt是默認的,square(方塊帽子), round(半圓帽子)

// 線段與線段交會時的設(shè)置
//round(圓角)  bevel(直接給切了)  miter(保留尖角)-可以設(shè)置miterLimit,防止過分尖銳
ctx.lineJoin = 'bevel'//miter round
ctx.miterLimit = num;
ctx.stroke();

canvas的合成屬性

ctx.beginPath();
ctx.fillStyle = 'red';
ctx.fillRect(100, 100, 100, 100);


ctx.globalCompisiteOperation = 'lighter';
ctx.beginPath();
ctx.fillStyle = 'green';
ctx.arc(300, 300, 100, 0, Math.PI * 2);

ctx.fill();

SVG

  • svg:矢量圖(放大不會失真,適合大面積的貼圖,通常動畫較少或者較簡單)–用元素和css畫

  • canvas:適合用于小面積的繪圖,適合動畫-用js畫

所有閉合的圖形在svg中默認都是天生充滿并且有效果的
ployline默認填充,如果去掉填充,不會首尾相連;
ploygon也默認填充,如果去掉填充,會首尾相連

<style>
    .line1{
        stoke:black;
    }
    .line2{
        stroke:red;
        stroke-width:2px;
    }
    ployline{
        fill:transparent;   /*不填充*/
        stroke:blueviolet;  /*閉合*/
        stroke-width:3px;/*線變粗了之后,只有線的中間是原來的位置,然后寬度向兩邊擴散,里面一半,外面一半*/
        stroke-opacity:0.5;/*邊框透明度*/
        fill-opacity:0.5;/*填充透明度*/
        stroke-linecap:round;/*square butt 額外的加了一塊長度*/
        stroke-linejoin:round/*bevel,miter  兩個線在相交的時候的狀態(tài)*/
    }

    ploygon{
        fill:transparent;
        stroke:black;
    }
    text{
        stroke:blue;
        stroke-width:3px;
    }
</style>

<svg width='500px' height='500px' style='border: 1px solid'>
<!-- 線段 -->
<line class = 'line1' x1='100' y1='100' x2='200' y2='100'></line>
<line class='line2' x1='200' y1='100' x2='200' y2='200'></line>
<!-- 矩形 -->
<rect heigth='50' width='100' x='0' y='0' rx='10' ry='10'></rect>
<!-- rx和ry就是x和y方向的圓角 -->


<circle r='50' cx='50' cy='220'></circle>
<!-- 圓心在 50,220 處的半徑位50的圓 -->

<ellipse rx='100' ry='30' cx='400' cy='200'></ellipse>

<!-- 默認會連接并填充,需要結(jié)合css控制 -->
<!-- 回到哪就會停到哪 -->
<polyline points='0 0, 50 50, 50 100, 100 100, 100 50'></polyline>

<!-- 多邊形:也是畫折現(xiàn),然后首尾會閉合 -->
<ploygon points='0 0, 50 50, 50 100, 100 100, 100 50'></ploygon>
<!-- 文本 -->
<text x='300' y='50'>TEXT</text>



<!-- path標(biāo)簽:可以做基本的畫線,moveTo到哪個點,lineTo到哪個點...第一個M后面的點表示起點,H表示水平方向的位置,V表示豎直方向的位置 Z表示是否閉合,z對大小寫不敏感 -->
<path d='M 100 100 L 200 100' style='stroke:red;fill:transparent'></path>
<!-- 大寫表示絕對位置,小寫字母為相對位置(基于現(xiàn)在的位置) -->
</svg>

屬性:

  • stroke-opacity:邊框透明度

  • fill-opacity:填充透明度

  • stroke-linecap:線條端點的帽,square,round —>額外加的長度

  • stroke-linejoin:兩個線條在相交的時候的樣式,與canvas相同

path畫弧

兩個點,半徑已知,可以確定兩個圓或橢圓

<path d="M 100 100 A 100 50 0 1 1 150 200"></path>
<!-- A表示弧,第三個參數(shù)表示旋轉(zhuǎn)角度,第四個參數(shù)表示大弧還是小弧(1表示大弧,0表示小弧),第五個參數(shù)表示順時針還是逆時針(0表示逆時針 1表示順時針) -->

svg線性漸變示例,需要提前將漸變定義好,使用的時候用url引入紋理

<svg>
<defs>
    <linearGradient id='bg1' x1=0 y1=0 x2=0 y2=100%> 
    <stop offset=0% style="stop-color:rgb(255, 255, 0)"></stop>
    <stop offset=100% style="stop-color:rgb(255, 0, 0)"></stop>
    </linearGradient>
    <!-- 高斯模糊stdDeviation屬性值越大,看到的越模糊 -->
    <filter id='Guss'>
        <feGaussianBlur in="SourceGraphic" stdDeviation="10"></feGaussianBlur>>
    </filter>
</defs>
<rect x=100 y=100 width=200 height=100 style='fill:url(#bg1);'></rect>
</svg>
  • stroke-dasharray:arr1 px, arr2 px…;

  • stroke-dashoffset:指定填充向左移動一定的距離

  • viewBox:比例尺,表示svg區(qū)域的比例尺,有四個參數(shù),前面兩個參數(shù)表示起點,后面兩個參數(shù)分別表示x方向和y方向的比例,和原來的長寬進行比較
    高德地圖就是使用了svg

audio和video

  • controls

video

  • paused屬性:判斷視頻是否是暫停的

  • play()方法:視頻播放的方法

  • pause()方法:視頻暫停的方法

  • duration屬性:視頻總共的s數(shù)

  • currentTime屬性:視頻當(dāng)前已經(jīng)播放的s數(shù)

  • playbackRate屬性:調(diào)節(jié)速率

  • volume屬性:控制音量 0 ~ 1,默認為1

document.documentElement.requestFullScreen()–>進入全屏模式,相當(dāng)于F11

只有http協(xié)議中視頻帶有Content-Range這個屬性,我們才能設(shè)置時間進行跳轉(zhuǎn),只有content-type和content-length的話,視頻會重新開始播放

“html5中新增加的屬性與元素是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI