h5内容初探

h5简介:

 h5新特性

h5新增标签

article  和  section 的区别相当于 div  和  p标签的区别

1—6都是块级元素

h5新增属性

拖放

拖动事件

<style> 
      div {
          100px;
          height:100px;
          background:red;
           }
</style>
</head>
<body>
     <div draggable="true" id="demo"></div>
     <script>
        var demo = document.getElementById('demo');
        demo.ondragstart = function(e){
             console.log('start',e)
        }
        demo.ondrag = function(e){
             console.log('drag',e)
        }
        demo.ondragend = function(e){
            console.log('end',e)
        }
     </script>

释放区事件

   <style> 
      #demo {
          100px;
          height:100px;
          background:red;
      }
      #demo1{
          100px;
          height:100px;
          background:yellowgreen;
      }
      #demo2{
          100px;
          height:100px;
          background:blueviolet;
      }
      .wrapper{
          400px;
          height:300px;
          border:1px solid #000;
      }
    </style>
</head>
<body>
     <div class="demo">
         <div draggable="true" id="demo"></div>
         <div draggable="true" id="demo1"></div>
         <div draggable="true" id="demo2"></div>
     </div>
     <div class="wrapper"></div>
       <script>        
        var demo = document.getElementsByClassName('demo')[0];
        var wrapper = document.getElementsByClassName('wrapper')[0];
        id = null;
        demo.ondragstart = function (e){
            console.log('start',e.target);
            id = e.target.id;
        }
        wrapper.ondragenter = function (e){
            console.log('enter');
        }
        wrapper.ondragover = function (e){
            e.preventDefault(); //调用 preventDefault() 来避免浏览器对数据的默认处理
            console.log('over');
        }

ondragover 事件规定在何处放置被拖动的数据,默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式。

这要通过调用 ondragover 事件的 event.preventDefault() 方法:
        wrapper.ondragleave = function (e){
            console.log('leave');
        }
        wrapper.ondrop = function (e){
            console.log('drop');
            var oDiv = document.getElementById(id).cloneNode(true);
            this.appendChild(oDiv);
        }
     </script>
</body>

dataTransfer: 返回用于传输数据到释放区的对象      (还可传输对象)

名称                                                   说明                                       返回

types                                           返回数据的格式                        字符串数组

getData(<format>)                      返回指定格式的数据                  字符串

setData(<format> , <data>)        设置指定格式的数据                  void

clearData(<format>)                    移除指定格式的数据                 void

files                                              返回已被拖动文件的列表          fileList

上面的代码改成:
var demo = document.getElementsByClassName('demo')[0];
        var wrapper = document.getElementsByClassName('wrapper')[0];
        // id = null;
        demo.ondragstart = function (e){
            console.log('start',e.target);
            e.dataTransfer.setData('id',e.target.id);
            // id = e.target.id;
        }
        wrapper.ondragenter = function (e){
            console.log('enter');
        }
        wrapper.ondragover = function (e){
            e.preventDefault();
            console.log('over');
        }
        wrapper.ondragleave = function (e){
            console.log('leave');
        }
        wrapper.ondrop = function (e){
            console.log('drop');
            var oDiv = document.getElementById(e.dataTransfer.getData('id')).cloneNode(true);
            this.appendChild(oDiv);
        }
     </script>
原文地址:https://www.cnblogs.com/tianya-guoke/p/10259663.html