HTML5(二)新特性

1、HTML5新特性的瀏覽器支持情況
        http://www.caniuse.com/#index
2、新的選擇器
 (1)querySelector

<script>
//document.getElementById();
//document.getElementsByTagName();

//$('#div1')   $('.box')   $('ul li')

window.onload = function(){

        //var oDiv = document.querySelector('[title=hello]');

        var oDiv = document.querySelector('.box'); //只能選擇一組中的第一個元素

        //alert( oDiv.length );

        oDiv.style.background  = 'red';
};
</script>

 (2)querySelectorAll

<script>
//document.getElementById();
//document.getElementsByTagName();

//$('#div1')   $('.box')   $('ul li')

window.onload = function(){

        var aDiv = document.querySelectorAll('.box');   //獲取一組元素

        alert( aDiv.length );
};
</script>

 (3)getElementsByClassName

<script>
window.onload = function(){
        var aDiv = document.getElementsByClassName('box');
        alert( aDiv.length );
};
</script>

3、獲取class列表屬性    classList
        ——length:class的長度
        ——add():添加class的方法
        ——remove():刪除class的方法
        ——toggle():切換class的方法

<script>
window.onload = function(){
        var oDiv = document.getElementById('div1');

        //alert( oDiv.classList );  //類似與數組的對象

        //alert( oDiv.classList.length );  //3

        //oDiv.classList.add('box4');

        //oDiv.classList.remove('box2');

        oDiv.classList.toggle('box2');
};
</script>

4、JOSN的新方法
          ——parse():把字符串轉換爲json,字符串中的屬性嚴格的加上引號
          ——stringify():把json轉化爲字符串,會自動的把雙引號加上
          ——新方法與eval的區別
//eval : 可以解析任何字符串變成JS
//parse : 只能解析JSON形式的字符串變成JS  (安全性要高一些)
var str = '{"name":"hello"}';   //一定是嚴格的JSON形式
var json = JSON.parse(str);
alert( json.name );
          ——新方法的應用:深度克隆新對象
          ——如何與其他瀏覽器做兼容            http://www.json.org/ 去下載json2.js
5、data自定義屬性
             ——dataset       data-name:dataset.name
                     data-name-first:dataset.nameFirst            
          ——Data數據在jquery mobile中有重要的作用

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>無標題文檔</title>
<script>
window.onload = function(){
        var oDiv = document.getElementById('div1');
        //alert( oDiv.dataset.miaov );
        alert( oDiv.dataset.miaovAll );
};
</script>
</head>
<body>
<div id="div1" data-miaov="妙味" data-miaov-all="妙味課堂">div</div>
</body>
</html>

6、延遲加載JS   
            ——JS的加載會影響後面的內容加載,很多瀏覽器都採用了並行加載JS,但還是會影響其他內容
            ——Html5的defer和async
               defer:延遲加載,會按順序執行,在onload執行前被觸發
                  async:異步加載,加載完就觸發,有順序問題

<!--<script src="a.js" defer="defer"></script>
<script src="b.js" defer="defer"></script>
<script src="c.js" defer="defer"></script>-->

<script src="a.js" async ="async"></script>
<script src="b.js" async ="async"></script>
<script src="c.js" async ="async"></script>

7、歷史管理
        ——onhashchange:改變hash值來管理
        ——history:        服務器下運行
                pushState事件:有三個參數     數據   標題(都沒實現)    地址(可選)
                popState事件:讀取數據   event.state
      注意:網址是虛假的,需要在服務器指定對應頁面,不然刷新找不到頁面
隨機選彩票

window.onload = function(){
        var oInput = document.getElementById('input1');
        var oDiv = document.getElementById('div1');
        var json = {};

        oInput.onclick = function(){
                var num = Math.random();
                var arr = randomNum(35,7);
                json[num] = arr;
                oDiv.innerHTML = arr;
                window.location.hash = num;
        };
        window.onhashchange = function(){
                oDiv.innerHTML = json[window.location.hash.substring(1)];
        };
        
        function randomNum(iAll,iNow){
                var arr = [];
                var newArr = [];
                for(var i=1;i<=iAll;i++){
                        arr.push(i);
                }
                for(var i=0;i<iNow;i++){
                        newArr.push( arr.splice( Math.floor(Math.random()*arr.length) ,1) );
                }
                return newArr;
        }
};
</script>
<body>
        <input type="button" value="隨機選擇" id="input1">
        <div id="div1"></div>
</body>
window.onload = function(){
        var oInput = document.getElementById('input1');
        var oDiv = document.getElementById('div1');

        oInput.onclick = function(){
                var arr = randomNum(35,7);
                history.pushState(arr,'',arr);
                oDiv.innerHTML = arr;
        };

        window.onpopstate = function(ev){
                oDiv.innerHTML = ev.state;
        };

        function randomNum(iAll,iNow){
                var arr = [];
                var newArr = [];
                for(var i=1;i<=iAll;i++){
                        arr.push(i);
                }

                for(var i=0;i<iNow;i++){
                        newArr.push( arr.splice( Math.floor(Math.random()*arr.length) ,1) );
                }
                return newArr;
        }
};

8、拖放事件
        ——draggable:設置爲true時,元素就可以拖拽了
        —— 拖拽元素事件:事件對象爲被拖拽元素
         dragstart:拖拽前觸發;drag:拖拽前、拖拽結束之間,連續觸發;dragend:拖拽結束觸發

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>無標題文檔</title>
<style>
li{ list-style:none; width:100px; height:30px; background:yellow; margin:10px;}
#div1{ width:100px; height:100px; background:red; margin:200px;}
</style>
<script>
window.onload = function(){
        var aLi = document.getElementsByTagName('li');
        var oDiv = document.getElementById('div1');
        var i = 0;

        for(var i=0;i<aLi.length;i++){
                aLi[i].ondragstart = function(){
                        this.style.background = 'green';
                };

                /*aLi[i].ondrag = function(){  //開始與結束連續觸發
                        document.title = i++;
                };*/

                aLi[i].ondragend = function(){
                        this.style.background = 'yellow';
                };
        }

        oDiv.ondragenter = function(){
                this.style.background = 'blue';
        };

        oDiv.ondragover = function(ev){
                //enter和leave之間連續觸發
                //要想觸發drop事件,就 必須在dragover當中阻止默認事件
                //document.title = i++;
                ev.preventDefault();
        };

        oDiv.ondragleave = function(){
                this.style.background = 'red';
        };
        oDiv.ondrop = function(){
                alert(123);
        };
};
</script>
</head>
<body>
<ul>
        <li draggable="true">a</li>
        <li draggable="true">b</li>
        <li draggable="true">c</li>
</ul>
<div id="div1"></div>
</body>
</html>

  ——effectAllowed:設置光標樣式(none,copy,copyLink,copyMove,link,linkMove,move,all和uninitialized)
     ——setDragImage:三個參數:指定的元素,座標X,座標Y

window.onload = function(){
        var oUl = document.getElementsByTagName('ul')[0];
        var aLi = oUl.getElementsByTagName('li');
        var oDiv = document.getElementById('div1');
        var oImg = document.getElementById('img1');
        var i = 0;

        for(var i=0;i<aLi.length;i++){
                aLi[i].ondragstart = function(ev){
                        var ev = ev || window.event;
                        ev.dataTransfer.setData('name','hello');
                        ev.dataTransfer.effectAllowed = 'link';
                        ev.dataTransfer.setDragImage(oImg,0,0);
                };
                aLi[i].ondragend = function(){
                        this.style.background = 'yellow';
                };
        }
};

      ——files:獲取外部拖拽的文件,返回一個fileList列表;fileList下有個type屬性,返回文件的類型
      FileReader(讀取文件信息)
        ——readAsDataURL:參數爲要讀取的文件對象,將文件讀取爲DataUrl
        ——onload:當讀取文件成功完成的時候觸發此事件;this.result來獲取讀取的文件數據,如果是圖片,返回base64格式的圖片數據

window.onload = function(){
        var oDiv = document.getElementById('div1');
        oDiv.ondragenter = function(){
                this.innerHTML = '可以釋放啦';
        };
        oDiv.ondragover = function(ev){
                ev.preventDefault();
        };
        oDiv.ondragleave = function(){
                this.innerHTML = '將文件拖拽到此區域';
        };
        oDiv.ondrop = function(ev){
                ev.preventDefault();
                var fs = ev.dataTransfer.files;
                //alert(fs.length);
                //alert( fs[0].type );
                var fd = new FileReader();
                fd.readAsDataURL( fs[0] );
                fd.onload = function(){
                        alert( this.result );
                };
        };
};

案例:
(1)上傳圖片預覽

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>無標題文檔</title>
<style>

#div1{ width:200px; height:200px; background:red; margin:100px;}
</style>
<script>
window.onload = function(){
        var oDiv = document.getElementById('div1');
        var oUl = document.getElementById('ul1');
        oDiv.ondragenter = function(){
               this.innerHTML = '可以釋放啦';
        }
        oDiv.ondragover = function(ev){
                ev.preventDefault();
        }
        oDiv.ondragleave = function(){
                this.innerHTML = '將文件拖拽到此區域';
        }
        oDiv.ondrop = function(ev){
                ev.preventDefault();
                var fs = ev.dataTransfer.files;
                //alert(fs.length);
                //alert( fs[0].type );
                /*if(fs[0].type.indexOf('image')!=-1){
                        var fd = new FileReader();
                        fd.readAsDataURL( fs[0] );
                        fd.onload = function(){
                                var oLi = document.createElement('li');
                                var oImg = document.createElement('img');
                                oImg.src = this.result;
                                oLi.appendChild(oImg);
                                oUl.appendChild(oLi);
                        };
                }
                else{
                        alert('親,請上傳圖片類型');
                }*/

                for(var i=0;i<fs.length;i++){
                        if(fs[i].type.indexOf('image')!=-1){
                                var fd = new FileReader();
                                fd.readAsDataURL( fs[i] );
                                fd.onload = function(){
                                        var oLi = document.createElement('li');
                                        var oImg = document.createElement('img');
                                        oImg.src = this.result;
                                        oLi.appendChild(oImg);
                                        oUl.appendChild(oLi);
                                };
                        }
                        else{
                                alert('親,請上傳圖片類型');
                        }
                }
        };
};
</script>
</head>
<body>
<div id="div1">將文件拖拽到此區域</div>
<ul id="ul1">
</ul>
</body>
</html>

(2)拖拽購物車

<!DOCTYPE>
<html>
<head>
<meta charset="utf-8" />
<title>無標題文檔</title>
<style>
*{ margin:0; padding:0;}
li{ list-style:none;}
li{ float:left; width:200px; border:1px #000 solid; margin:10px;}
li img{ width:200px;}
p{ height:20px; border-bottom:1px #333 dashed;}
#div1{ width:600px; border:1px #000 solid; height:300px; clear:both;}
.box1{ float:left; width:200px;}
.box2{ float:left; width:200px;}
.box3{ float:left; width:200px;}
#allMoney{ float:right;}
</style>
<script>
window.onload = function(){
        var aLi = document.getElementsByTagName('li');
        var oDiv = document.getElementById('div1');
        var obj = {};
        var iNum = 0;
        var allMoney = null;

        for(var i=0;i<aLi.length;i++){
                aLi[i].ondragstart = function(ev){
                       var aP = this.getElementsByTagName('p');
                        ev.dataTransfer.setData('title',aP[0].innerHTML);
                        ev.dataTransfer.setData('money',aP[1].innerHTML);
                        ev.dataTransfer.setDragImage(this,0,0);

                };
        }

        oDiv.ondragover = function(ev){
                ev.preventDefault();
        };

        oDiv.ondrop = function(ev){
                ev.preventDefault();
                var sTitle = ev.dataTransfer.getData('title');
                var sMoney = ev.dataTransfer.getData('money');
                if( !obj[sTitle] ){
                        var oP = document.createElement('p');
                        var oSpan = document.createElement('span');
                        oSpan.className = 'box1';
                        oSpan.innerHTML = 1;
                        oP.appendChild( oSpan );
                        var oSpan = document.createElement('span');
                        oSpan.className = 'box2';
                        oSpan.innerHTML = sTitle;
                        oP.appendChild( oSpan );
                        var oSpan = document.createElement('span');
                        oSpan.className = 'box3';
                        oSpan.innerHTML = sMoney;
                        oP.appendChild( oSpan );
                        oDiv.appendChild( oP );
                        obj[sTitle] = 1;
                }
                else{
                        var box1 = document.getElementsByClassName('box1');
                        var box2 = document.getElementsByClassName('box2');
                        for(var i=0;i<box2.length;i++){
                                if(box2[i].innerHTML == sTitle){
                                        box1[i].innerHTML = parseInt(box1[i].innerHTML) + 1;
                                }
                        }
                }
                if(!allMoney){
                        allMoney = document.createElement('div');
                        allMoney.id = 'allMoney';
                }
                iNum += parseInt(sMoney);
                allMoney.innerHTML = iNum + '¥';
                oDiv.appendChild( allMoney );
        };
};
</script>
</head>
<body>
<ul>
        <li draggable="true">
            <img src="img1.jpg" />
        <p>javascript語言精粹</p>
        <p>40¥</p>
    </li>
    <li draggable="true">
            <img src="img2.jpg" />
        <p>javascript權威指南</p>
        <p>120¥</p>
    </li>
    <li draggable="true">
            <img src="img3.jpg" />
        <p>精通javascript</p>
        <p>35¥</p>
    </li>
    <li draggable="true">
            <img src="img4.jpg" />
        <p>DOM編程藝術</p>
        <p>45¥</p>
    </li>
</ul>
<div id="div1">
        <!--<p>
            <span class="box1">1</span>
        <span class="box2">DOM編程藝術</span>
        <span class="box3">45¥</span>
    </p>
    <p>
            <span class="box1">1</span>
        <span class="box2">DOM編程藝術</span>
        <span class="box3">45¥</span>
    </p>
    <div id="allMoney">90¥</div>-->
</div>
</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章