本篇內(nèi)容介紹了“html5中新增加的屬性與元素是什么”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)網(wǎng)站設(shè)計(jì),為客戶量身定制各類網(wǎng)站建設(shè)業(yè)務(wù),包括企業(yè)型、電子商務(wù)型、成都響應(yīng)式網(wǎng)站建設(shè)公司、行業(yè)門戶型等各類網(wǎng)站,實(shí)戰(zhàn)經(jīng)驗(yàn)豐富,成功案例眾多。以客戶利益為出發(fā)點(diǎn),創(chuàng)新互聯(lián)網(wǎng)站制作為客戶規(guī)劃、定制網(wǎng)站符合企業(yè)需求、帶有營銷價(jià)值的網(wǎng)絡(luò)建站方案認(rèn)真對待每一個(gè)客戶,我們不用口頭的語言來吹擂我們的優(yōu)秀,近1000家的成功案例見證著我們的成長。
html5中新增加的屬性有placeholder、calendar、date、time、email、url、search、Hidden等;新增加的元素有header、footer、nav、article、canvas、svg、video等。
本教程操作環(huán)境:windows7系統(tǒng)、HTML5版、Dell G3電腦。
新增的屬性
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(也算是一個(gè)畫板)
audio(聲音播放)
video(視頻播放)—html5之前一般都用flash–現(xiàn)在flash使用比較少,現(xiàn)在adobe停止維護(hù)
API
a. 定位(需要地理位置的功能)
b. 重力感應(yīng)(手機(jī)中要有陀螺儀)
c. request-animation-frame(動畫優(yōu)化)
d. History(控制當(dāng)前頁面的瀏覽記錄)
e. LocalStorage–一直存在,SessionStorage(存儲信息,比如歷史最高記錄,聊天記錄-存在本地)–>頁面關(guān)了就沒了
f. websocket–用來做通信的(可用于在線聊天,聊天室)
g. fillReader(文件讀取和預(yù)覽)
h. webWorker(文件的異步處理–用來提升性能,提升交互體驗(yàn))
i. fetch(傳說中要替代AJAX的東西,兼容性不太好,使用的公司不多)
placeholder
calendar類
細(xì)節(jié):該屬性只填寫一個(gè)contenteditable也可以起作用,但是后面的draggable就不行,只可以寫成draggable='true’這樣的形式
以前沒有這個(gè)屬性的時(shí)候要修改div里面的內(nèi)容需要給div添加點(diǎn)擊事件,當(dāng)被點(diǎn)擊之后,將該標(biāo)簽變?yōu)閕nput輸入框,然后填完替換
ddd
該屬性可以繼承,如果自己沒有設(shè)置,會看父級有無contenteditable
細(xì)節(jié):雖說沒有寫該屬性無法編輯,然后如果里面嵌套了其他元素,然后里面元素設(shè)置的屬性值為false,只是代表該元素內(nèi)容無法修改,然后它其實(shí)可以和他的元素名作為一個(gè)整體被刪除;
姓名:monkey
性別:
可拖拽的—拖拽的還是虛擬的,并不會改變元素的位置(可以自己實(shí)現(xiàn),用后面兩個(gè)拖拽事件)
兼容性:只有chrome和safari可以正常使用,F(xiàn)irefox下不好使
a標(biāo)簽 img標(biāo)簽 默認(rèn)是可拖拽的
既然可以拖拽,那就有拖拽事件
拖拽的生命周期
從按下到開始拖拽叫做拖拽開始,然后拖拽進(jìn)行,當(dāng)松開的那一刻,拖拽結(jié)束
拖拽開始
拖拽進(jìn)行中
拖拽結(jié)束
拖拽的組成
被拖拽的物體
目標(biāo)區(qū)域
被拖拽的物體以及其生命周期
通過下面三個(gè)事件可以隨時(shí)的知道元素的位置
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é)束時(shí)觸發(fā) oDragDiv.ondragend = function (e) { console.log(e); }
所有的標(biāo)簽元素,當(dāng)拖拽周期結(jié)束時(shí),默認(rèn)事件是回到原處;
事件是由行為觸發(fā)的,但是一個(gè)行為可以不止觸發(fā)一個(gè)事件
比如鍵盤鼠標(biāo)抬起既觸發(fā)了onclick 又觸發(fā)了onmouseup
拖拽事件松開的瞬間,觸發(fā)了ondragover ondrop
但是默認(rèn)的ondragover執(zhí)行完后,默認(rèn)事件是回到原處,故不會觸發(fā)ondrop事件
ondragover -> 回到原處
-> 執(zhí)行drop事件
責(zé)任鏈模式:
A -> B(阻止) ->默認(rèn)事件
阻止默認(rèn)事件,e.preventDefault();
被拖拽物體的目標(biāo)區(qū)域(結(jié)束元素)
// 1. 由圖形剛進(jìn)入到目標(biāo)區(qū)域后觸發(fā)的事件, 該事件一開始觸發(fā)一次 oDragTarget.ondragenter = function (e) { // 不是元素的圖形進(jìn)入就觸發(fā)的,而是拖拽的鼠標(biāo)進(jìn)入觸發(fā),如果說組件里有那種圖形一進(jìn)入就觸發(fā)的,是經(jīng)過計(jì)算算出來的,一開始我們可以知道鼠標(biāo)相對圖形邊緣的距離,然后這樣計(jì)算 console.log(e); } // 不斷的觸發(fā) // 2.當(dāng)圖形進(jìn)入目標(biāo)區(qū)域之后,只要坐標(biāo)有變化會不斷的觸發(fā), 和ondrag事件有點(diǎn)像 oDragTarget.ondragover = function (e) { console.log(e); } // 3.該事件表示圖形進(jìn)入目標(biāo)區(qū)域后,一離開觸發(fā)的事件 oDragTarget.ondragleave = function (e) { console.log(e); } //4. 拖拽 放下(一松手)的時(shí)候觸發(fā)的事件() // 由于所有的ondragover默認(rèn)當(dāng)拖拽周期結(jié)束時(shí)(松手的時(shí)候),會觸發(fā)默認(rèn)事件-回到原處 ,所有在使用ondrop 事件的時(shí)候需要在ondragover事件中阻止默認(rèn)事件 e.preventDefault() oDragTarget.ondrop = function (e) { console.log(e); } // 該拖拽事件發(fā)生在ondragend之前
小demo練習(xí)
拖拽的時(shí)候和進(jìn)入目標(biāo)區(qū)域的時(shí)候,指針是會變化
這個(gè)屬性不常用,原因是兼容性不好,只有在chrome中支持
繼承自O(shè)bject MOuseEvent對象 —> 鼠標(biāo)事件
其實(shí)就是多了個(gè)屬性
e.dataTransfer
該屬性必須在ondragevent中設(shè)置,但是顯示的時(shí)候是在進(jìn)入目標(biāo)區(qū)域后指針改變
e.dataTransfer.effectAllowed = ‘link’
該屬性只能在ondrop中使用
e.dataTransfer.dropEffect = ‘link’
type為link copy move copyMove linkMove all
使用標(biāo)簽時(shí)盡量的更加語義化
h6新增了很多語義化標(biāo)簽
以下這些標(biāo)簽只是有語義,本質(zhì)上和p沒有區(qū)別
header
頁面頂部
footer
頁面底部
nav
導(dǎo)航條
article
文章—可以直接被引用拿走的,比如一個(gè)博客文章內(nèi)容
section
段落結(jié)構(gòu)–不是一個(gè)完整
實(shí)際開發(fā)中section 和 article區(qū)分的沒有特別仔細(xì)
aside
側(cè)邊欄–正文旁邊的地方
特點(diǎn):要想給定畫板的大小,必須在行間加樣式而不是用css渲染樣式
canvas是用js操縱畫東西的 canvas元素本身就是一塊畫布,需要結(jié)合js來畫畫
規(guī)范,建議在每開始畫一筆之前都加上ctx.beginPath(),也就是在每一次ctx.moveTo(x, y)之前加上ctx.beginPath()
1、畫筆
var ctx = canvas.getContext(‘2d’)
a. 規(guī)劃路徑
起點(diǎn):ctx.moveTo(x, y);
從哪畫到哪:ctx.lineTo(x, y);
b. 描線
ctx.stroke();
c. 方法
ctx.closePath();
閉合路徑,回到起點(diǎn)–只針對一筆畫出來的圖形
ctx.fill();
填充區(qū)域,不需要stroke,fill自動會stroke,默認(rèn)是起始點(diǎn)到終止點(diǎn)的連線(畫個(gè)圓弧很容易觀察出來)
改變畫筆線條的粗細(xì),改為numpx
ctx.lineWidth = num;
同一筆畫下來的圖形粗細(xì)是相同的
重新開啟一個(gè)路徑
ctx.beginPath()
然后開始新的moveTo和lineTo
2、畫矩形
注意:以下畫法不需要使用moveTo()來表明起點(diǎn),因?yàn)閞ect()方法的startX, startY已經(jīng)表明了起點(diǎn)
畫法1
空矩形
ctx.rect(startX, startY, length, height);
ctx.stroke()
畫法2
空心矩形
ctx.strokeRect(startX, startY, length, height);
畫法3
實(shí)心矩形
ctx.fillRect(startX, startY, length, height)
ctx.clearRect(startX, startY, length, height);//清除指定區(qū)域的圖形
3、畫圓(圓弧)
圓心(x, y), 半徑?, 弧度(起始弧度, 結(jié)束弧度), 方向(順逆時(shí)針)
順時(shí)針填0,逆時(shí)針填1;
canvas的0度角在和數(shù)學(xué)中的一樣
起止弧度的大小默認(rèn)以順時(shí)針的計(jì)算為準(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)然可以用四條線 + 四個(gè)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ī)定起點(diǎn)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)和縮放
默認(rèn)根據(jù)畫布的圓點(diǎn)進(jìn)行旋轉(zhuǎn)
可以根據(jù)can.translate()進(jìn)行坐標(biāo)系的平移
can.translate(x, y)
然后旋轉(zhuǎn)的話會根據(jù)新的圓心(x, y)進(jìn)行旋轉(zhuǎn)
can.translate(x, y);//全局起作用 can.rotate(旋轉(zhuǎn)弧度);//全局起作用 can.scale(橫向縮放, 縱向縮放) // 計(jì)算方法:每一個(gè)坐標(biāo)點(diǎn)的x, y都乘以了相應(yīng)的縮放值
因?yàn)樽鴺?biāo)系的平移和形狀的旋轉(zhuǎn)是全局起作用的,所以設(shè)置了一次之后,新畫的圖形都會按照改變了坐標(biāo)系以及旋轉(zhuǎn)形狀之后的條件 stroke,如果后面畫的圖形在stroke的時(shí)候還想按照原來的那樣,就需要在改變坐標(biāo)系以及旋轉(zhuǎn)之前保存以下,后面再恢復(fù),就像中斷一樣,保護(hù)現(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 () { }
圖片默認(rèn)是以canvas框的坐標(biāo)系原點(diǎn)開始填充的,想要改變背景圖片的位置的話需要使用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');//第一個(gè)數(shù)字只能從0~1, 是百分比的概念 can.fillStyle = bg; // 輻射漸變---在chrome收藏夾中找 var bg = ctx.createRadialGradient(x1, y1, r1, x2, y2, r2); // 從起始圓的邊向結(jié)束圓的邊漸變輻射 // 起始圓和結(jié)束圓可以是不同的圓心 起始圓大于結(jié)束圓的時(shí)候,外界的顏色就都是起始圓的顏色,結(jié)束圓大于起始圓的時(shí)候,外界的顏色就是結(jié)束圓的顏色
9、陰影
注意這個(gè)陰影是一邊一半的;
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
實(shí)心字用strokeText, 空心字用fillText
11、線端樣式
ctx.beginPath(); ctx.lineWidth = '30'; ctx.moveTo(100, 100); ctx.lineTo(200, 200) ctx.lineCap = 'butt' //butt是默認(rèn)的,square(方塊帽子), round(半圓帽子) // 線段與線段交會時(shí)的設(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:矢量圖(放大不會失真,適合大面積的貼圖,通常動畫較少或者較簡單)–用元素和css畫
canvas:適合用于小面積的繪圖,適合動畫-用js畫
所有閉合的圖形在svg中默認(rèn)都是天生充滿并且有效果的
ployline默認(rèn)填充,如果去掉填充,不會首尾相連;
ploygon也默認(rèn)填充,如果去掉填充,會首尾相連
屬性:
stroke-opacity:邊框透明度
fill-opacity:填充透明度
stroke-linecap:線條端點(diǎn)的帽,square,round —>額外加的長度
stroke-linejoin:兩個(gè)線條在相交的時(shí)候的樣式,與canvas相同
兩個(gè)點(diǎn),半徑已知,可以確定兩個(gè)圓或橢圓
svg線性漸變示例,需要提前將漸變定義好,使用的時(shí)候用url引入紋理
stroke-dasharray:arr1 px, arr2 px…;
stroke-dashoffset:指定填充向左移動一定的距離
viewBox:比例尺,表示svg區(qū)域的比例尺,有四個(gè)參數(shù),前面兩個(gè)參數(shù)表示起點(diǎn),后面兩個(gè)參數(shù)分別表示x方向和y方向的比例,和原來的長寬進(jìn)行比較
高德地圖就是使用了svg
controls
paused屬性:判斷視頻是否是暫停的
play()方法:視頻播放的方法
pause()方法:視頻暫停的方法
duration屬性:視頻總共的s數(shù)
currentTime屬性:視頻當(dāng)前已經(jīng)播放的s數(shù)
playbackRate屬性:調(diào)節(jié)速率
volume屬性:控制音量 0 ~ 1,默認(rèn)為1
document.documentElement.requestFullScreen()–>進(jìn)入全屏模式,相當(dāng)于F11
只有http協(xié)議中視頻帶有Content-Range這個(gè)屬性,我們才能設(shè)置時(shí)間進(jìn)行跳轉(zhuǎn),只有content-type和content-length的話,視頻會重新開始播放
“html5中新增加的屬性與元素是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!