html5新特性

1.htm5新特性

1.語義化標簽

1.1.htm5新特性

Paste_Image.png

注意:這里只列出主要標簽,還有許多其他的語音花標簽

1.2.新選著器###

Paste_Image.png

1.3 獲取class列表屬性 : 獲取對象的className的集合###

classList

  • length : class的長度
  • add() : 添加class方法
  • remove() : 刪除class方法
  • toggle() : 切換class方法
    案例:
<div class="a b"></div> alert(document.querySelector('#div').classList)

1.4 data自定義數據###

  1. -dataset :是data-的集合
  • data-name : dataset.name
  • data-name-first : dataset.nameFirst

案例:

     <div id="box" data-name="zhangsan" data-user-sex="nan"></div>
      var obj=document.querySelector('#box');
     console.log(obj.dataset.name)
    console.log(obj.dataset.userSex)

1.5 JSON的新方法###

  • parse() : 把字符串轉成json, 類似eval()方法
  • stringify() : 把json轉化成字符串

案例:

//以往的方法
var a={"name":"zhangsan"};
var b=a;
b.name="lisi";
alert(a.name); //lisi
 
//html5 -json新方法
var a={"name":"zhangsan"};
var str=JSON.stringify(a); //轉換成字符串
var b=JSON.parse(str); //轉換成對象
b.name="lisi";
alert(a.name); //zhangsan

1.6、延遲加載JS

  • defer : 延遲加載,會按順序執行,在onload執行前被觸發(或者簡單理解為是在頁面加載完時執行,會按順序)
  • async : 異步加載,加載完就觸發,有順序問題(并行加載,而且不會按照順序加載)
    ** defer和async的區別:**
  • defer:用于開啟新的線程下載腳本文件,并使腳本在文檔解析完成后執行。
  • async:HTML5新增屬性,用于異步下載腳本文件,下載完畢立即解釋執行代碼。
    注意:Labjs庫:(第三方插件:最大化提高性能,即能異步,也能延遲)

1.7 歷史管理###

**onhashchange : **改變hash值來管理 如:改變hash方法window.location.hash=”cont”;
監聽hash根據hash改變現實內容:html事件 onhashchange 案例:

<ul class="nav">
    <li data-hash="index">首頁</li>
    <li data-hash="news">新聞</li>
    <li data-hash="sports">體育</li>
</ul>
<div class="cont">
    <div data-content="index">首頁內容</div>
    <div data-content="news">新聞內容</div>
    <div data-content="sports">體育內容</div>
</div>
<script>
//知識點 querySelector querySelectorAll選擇器
//substring截取字符串
//onhashchange html5的監聽事件
window.onload=function(){
    var oLi=document.querySelectorAll('li');
    var oCont=document.querySelector('.cont').querySelectorAll('div');
    for (var i = 0; i < oLi.length; i++) {
        oLi[i].onclick=function(){
            window.location.hash=this.dataset.hash;
        }
    };
    function changeCont(){//根據hash改變內容
        var hash=window.location.hash.substring(1);
        for(var i=0;i<oCont.length;i++){
            if(hash==oCont[i].dataset.content){
                oCont[i].style.display="block";
            }else{
                oCont[i].style.display="none";
            }   
        }
    }
    changeCont();
    window.onhashchange=function(){
        changeCont();
    }
}

history :服務器下運行

  • pushState : 三個參數 :數據 標題(都沒實現) 地址(可選)
  • popstate事件 : 讀取數據 event.state
<ul class="nav">
    <li data-hash="index">首頁</li>
    <li data-hash="news">新聞</li>
    <li data-hash="sports">體育</li>
</ul>
<div class="cont">
    <div data-content="index">首頁內容</div>
    <div data-content="news">新聞內容</div>
    <div data-content="sports">體育內容</div>
</div>
<script>
window.onload=function(){
    var oLi=document.querySelectorAll('li');
    var oCont=document.querySelector('.cont').querySelectorAll('div');
    var iNow=0;
    for (var i = 0; i < oLi.length; i++) {
        oLi[i].onclick=function(){
            var hash=this.dataset.hash;
            history.pushState(hash,'',iNow++);//第二個參數是標題很多瀏覽器沒實現便可不寫,加上第三個參數便可以改變網址,但是是虛假的網址刷新就沒有了,所以得配合后端使用
            changeCont(hash);
        }
    };
    function changeCont(hash){//根據hash改變內容
        for(var i=0;i<oCont.length;i++){
            if(hash==oCont[i].dataset.content){
                oCont[i].style.display="block";
            }else{
                oCont[i].style.display="none";
            }   
        }
    }
    window.onpopstate=function(ev){
        console.log(1);
        changeCont(event.state);
    }
    
}
</script>

1.8 .拖放事件##

draggable :設置為true,元素就可以拖拽了 (如單獨設置draggable為true,前臺拖拽的時候只是有拖拽的拖影,而不是整個元素都能拖動)

  • dragstart , 拖拽前觸發
  • drag ,拖拽前、拖拽結束之間,連續觸發
  • dragend , 拖拽結束觸發
<style>
    #box{height:100px;width:100px;border:1px solid #999;}
</style>
<div id="box" draggable="true"></div>
<script>
    window.onload=function(){
        var oDrag =document.querySelector('#box');
        oDrag.ondragstart=function(){
            console.log("拖拽前");
        }
        oDrag.ondrag=function(){
            console.log("拖拽進行中");
        }
        oDrag.ondragend=function(){
            console.log("結束");
        }
    }
</script>

目標元素事件 :

事件對象為目標元素(目標元素通常是被拖拽元素,碰撞到最終的元素,如拖拽上傳,上傳框就是目標元素)

  • dragenter , 進入目標元素觸發,相當于mouseover (元素進入不會觸發,一定是鼠標進入才觸發)
  • dragover ,進入目標、離開目標之間,連續觸發
  • dragleave , 離開目標元素觸發,相當于mouseout
  • drop , 在目標元素上釋放鼠標觸發 (需要在dragover事件中設置阻止默認事件,不然拖動的時候鼠標移至都是禁止的狀態,就無法釋放,也就不能觸發drop事件)
<style>
    #box,#mubiao{height:100px;width:100px;border:1px solid #999;}
</style>
<div id="box" draggable="true"></div>
<div id="mubiao"></div>
<script>
    window.onload=function(){
        var index=0;
        var oMubiao =document.querySelector('#mubiao');
        oMubiao.ondragenter=function(){
            this.style.background="#000";
        }
        oMubiao.ondragleave=function(){
            this.style.background="#999";
        }
        oMubiao.ondragover=function(ev){
            ev.preventDefault();
            console.log(index++);
        }
        oMubiao.ondrop=function(){
            alert("鼠標放開了");
        }
    }
</script>

注意:
事件的執行順序 :drop不觸發的時候
dragstart > drag > dragenter > dragover > dragleave > dragend
事件的執行順序 :drop觸發的時候(dragover的時候阻止默認事件)
dragstart > drag > dragenter > dragover > drop > dragend
不能釋放的光標和能釋放的光標不一樣,需要觸發drop釋放事件,在上例中

問題:(火狐不設置的話只支持dragstart事件其他都不支持)
必須設置dataTransfer對象才可以拖拽除圖片外的其他標簽
案例:如在dragstart的event對象中設置dataTransfer.setData 設置一個參數

dataTransfer對象(屬于event事件對象)

  • setData() : 設置數據 key和value(必須是字符串)
  • getData() : 獲取數據,根據key值,獲取對應的value
  • effectAllowed : 設置光標樣式(none, copy, copyLink, copyMove, link, linkMove, move, all 和 uninitialized)
  • setDragImage (設置鼠標的位置)
    - 三個參數:指定的元素,坐標X,坐標Y
  • files
    - 獲取外部拖拽的文件,返回一個filesList列表
    - filesList下有個type屬性,返回文件的類型
<style>
    #box,#mubiao{height:100px;width:100px;border:1px solid #999;}
</style>
<div id="box" draggable="true"></div>
<div id="mubiao"></div>
![](http://upload-images.jianshu.io/upload_images/2906565-d35812825c905a64.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
<script>
    window.onload=function(){
        var index=0;
        var oDrag =document.querySelector('#box');
        var oMubiao =document.querySelector('#mubiao');
        oDrag.ondragstart=function(ev){
            var oImg=document.querySelector('#img');
            console.log("拖拽前");
            ev.dataTransfer.setData('name','demo');
            ev.dataTransfer.effectAllowed="link";
            ev.dataTransfer.setDragImage(this,50,50);
            //此處this可以是其他對象,也可以試圖片對象比如換
            //ev.dataTransfer.setDragImage(oImg,50,50);
            // 擴展拖拽排序,百度音樂播放器,拖拽排列歌曲列表
        }
        oDrag.ondrag=function(){
            console.log("拖拽進行中");
        }
        oDrag.ondragend=function(){
            console.log("結束");
        }
        oMubiao.ondragenter=function(){
            this.style.background="#000";
        }
        oMubiao.ondragleave=function(){
            this.style.background="#999";
        }
        oMubiao.ondragover=function(ev){
            ev.preventDefault();
            console.log(index++);
        }
        oMubiao.ondrop=function(ev){
            alert(ev.dataTransfer.getData('name'));
        }
    }
</script>     

1.9 FileReader(讀取文件信息)##

readAsDataURL:參數為要讀取的文件對象,將文件讀取為DataUrl
onload:當讀取文件成功完成的時候觸發此事件this. result , 來獲取讀取的文件數據,如果是圖片,將返回base64格式的圖片數據
實例

  • 拖拽刪除列表
  • 拖拽購物車
  • 上傳圖片預覽功能
<style>
    #mubiao{height:200px;width:200px;border:1px solid #999;}
</style>
<div id="mubiao"></div>
<img src="" id="img" alt="">
<script>
    window.onload=function(){
        var oImg=document.querySelector('#img');
        var oMubiao =document.querySelector('#mubiao');
        oMubiao.ondragenter=function(){
            this.innerHTML = '可以釋放啦';
        }
        oMubiao.ondragleave=function(ev){
            this.innerHTML = '請在此區域釋放鼠標';
        }
        oMubiao.ondragover=function(ev){
            ev.preventDefault();
            
        }
        oMubiao.ondrop=function(ev){
            ev.preventDefault();
            var fs=ev.dataTransfer.files;  //獲取文件對象
            console.dir(fs[0]);
            var fr=new FileReader(); //實例化讀取文件信息對象
            fr.readAsDataURL(fs[0]); //將文件讀取為dataUrl格式
            fr.onload=function(){ //讀取文件成功后事件
                //alert(this.result);
                oImg.src=this.result; //假如上傳的是圖片可以復制給一個圖片對象
            }
 
            
        }
    }
</script>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容