首頁 > web前端 > H5教程 > HTML5新增屬性之拖曳屬性(介紹)

HTML5新增屬性之拖曳屬性(介紹)

青灯夜游
發布: 2018-10-11 16:21:24
轉載
4465 人瀏覽過

本文介紹HTML5新增屬性中的拖曳屬性,有一定的參考價值,有需要的朋友可以參考一下,希望對你們有幫助。

HTML5新增的許多屬性:

o  檔案類別型宣告(#只有一個類型:

o  新的解析#順SGML

#SGML

o  新的元素:section, video, progress,nav, meter, time, aside, canvas, command, datalist, details , embed, figcaption,figure, footer, header, hgroup, keygen, mark, output, rp, rt, ruby​​, source,summary, wbro  input#元素的新

類別##類型: date,email, url等等。 o  新的屬性:ping(用於aarea,charset#(用於meta##) , async

(用於script)。 o  

全域屬性:id, tabindex, repeato  

新的全域屬性:contenteditable,contextmenu, draggable, dropzone, hidden, spellcheck#。 o  

移除元素:

acronym, applet,basefont, big, center, dir, font, frame, frameset, isindex, noframes , strike,tt下面我們就可是介紹HTML5新增屬性中的拖曳屬性吧。 DataTransfer#:拖曳##對像用來傳遞

的媒介,一般

Event.dataTransfer##Draggable屬性名思#,被拖曳的元素需要

設定draggable=true,否則不會有效果

<p draggable =’true’></p>
登入後複製
#DataTransfer屬性和

類別類型

dropEffect


#effectAllowed

String

 

#files

##FileList

############ ########################mozCursor## ################String#######

 

#mozItemCount

#Unsigned long

 

#mozSourceNode

###節點############################################################# #### ###########mozUserCancelled###################Boolean########################################################################################################### ### # ######################類型##################DOMStringList#### #### ##############################

ondragstart 事件: 當拖曳元素開始被拖曳的候觸事件,此事件作用在被拖曳元素上

ondragenter事件:當拖曳元素#入目 元素候觸#的事件,此事件作用在目標元素上

ondragover事件:當拖曳元素穿過#目標記元素候觸e#事件,此事件作用在目標元素上

ondrop事件:當拖曳元素在目標元素上同時放開滑鼠時觸發的時候,此事件作用在目標元素上

#ondragend##事件:當拖曳完成事件,此事件作用在被拖拽元素上

Event.preventDefault() 方法:阻止預設事件方法等的執行。 ondrop中一定要執行preventDefault,否則ondrop事件不會被觸發。另外,如果是從其他應用軟體或檔案中拖東西進來,尤其是圖片的時候,預設的動作是顯示這個圖片或是相關訊息,並不是真的執行drop。此時需要以document的ondragover事件取代 

Event.effectAllowed 屬性:拖曳效果,取有:

None,copy,copyLink,copyMove,link,linkMove,move,all,uninitialized(default)

##允許copy或者move操作
#值

意思

#None

該項目不允許被drop

copy

#來源專案的複製項目可能會出現在新的位置

copyLink

允許copy或link操作

#copyMove

link

可以在新的地方建立与源的链接

linkMove

允许link或者move操作

move

一个项目可能被移动到新的位置

All

允许所有操作

事件触发顺序

ondragstart->ondragenter->ondragover->ondrop->ondragend

Demo

HTML5新增屬性之拖曳屬性(介紹)

box从右边拖到container中后,box在右边消失,container中添加了被拖拽的box。

右边的box是可排序的。

HTML5新增屬性之拖曳屬性(介紹)

HTML5新增屬性之拖曳屬性(介紹)

代码

<body>
<p class="container">
     container
</p>
<p class="boxList">
    <p class="box" draggable="true">box-1</p>
    <p class="box" draggable="true">box-2</p>
    <p class="box" draggable="true">box-3</p>
    <p class="box" draggable="true">box-4</p>
    <p class="box" draggable="true">box-5</p>
    <p class="box" draggable="true">box-6</p>
    <p class="box" draggable="true">box-7</p>
</p>
<p class="alert"/>

</body>
登入後複製
<script>
    var container = document.getElementsByClassName(&#39;container&#39;)[0];
    var boxList = document.getElementsByClassName(&#39;boxList&#39;)[0];
    var boxes =  document.getElementsByClassName(&#39;box&#39;);
    var listLength = boxes.length;
    var targetDropEle=null;
    (function () {
        for(let i=0;i<listLength;i++){
            boxes[i].ondragstart = function (ev) {
                ev.dataTransfer.effectAllowed = "move";
                ev.dataTransfer.setDragImage(ev.target, 0, 0);
                ev.dataTransfer.setData("Text",i+1);
//                dataTransfer.setData() 方法设置被拖数据的数据类型和值
//                数据类型是text,值是可拖动元素的innerHTML
                targetDropEle = ev.target;
                showAlter("ondragstart")
            }
            boxes[i].ondragend = function(ev) {
                /*拖拽结束*/
                ev.dataTransfer.clearData("Text");
                targetDropEle = null;
                showAlter("ondragend");
                return false
            };
            boxes[i].ondragover = function () {
                /*拖拽元素进入目标元素上移动*/
                showAlter("ondragover");
                event.preventDefault();
//            默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式;

            }
            boxes[i].ondragenter = function (ev) {
                showAlter("ondragenter");
                /*拖拽元素进入目标元素*/
            }
            boxes[i].ondrop = function (ev) {
                /*拖拽元素进入目标元素头上,同时鼠标松开的时候*/
                if(targetDropEle){
                    ev.preventDefault();
//                调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)
                    showAlter("ondrop");
                    ev.target.parentNode.insertBefore(targetDropEle,ev.target);
                }
            }

        }
        container.ondragover = function () {
            /*拖拽元素进入目标元素上移动*/
            showAlter("ondragover");
            event.preventDefault();
//            默认地,无法将数据/元素放置到其他元素中。如果需要设置允许放置,我们必须阻止对元素的默认处理方式;

        }
        container.ondragenter = function (ev) {
            showAlter("ondragenter");
            /*拖拽元素进入目标元素*/
            ev.target.style.opacity=0.5

        }
        container.ondrop = function (ev) {
            /*拖拽元素进入目标元素头上,同时鼠标松开的时候*/
            if(targetDropEle){
                ev.preventDefault();
//                调用 preventDefault() 来避免浏览器对数据的默认处理(drop 事件的默认行为是以链接形式打开)
                showAlter("ondrop");
//                let number=ev.dataTransfer.getData("Text");
//                if(number%2==0){
//                    return false;
//                }
                targetDropEle.parentNode.removeChild(targetDropEle);
                container.appendChild(targetDropEle);
                ev.target.style.opacity=1;
            }
        }
    })();
    function showAlter(content) {
        setTimeout(function () {
            document.getElementsByClassName(&#39;alert&#39;)[0].style.display="none"
        },1000)
        document.getElementsByClassName(&#39;alert&#39;)[0].innerHTML=content;
        document.getElementsByClassName(&#39;alert&#39;)[0].style.display="block"
        console.log(content);
    }
</script>
登入後複製

还看到了一些html5的新属性就写在文章末尾吧

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .userInfo{
            color: red;
        }
        .userInfo :hover{
            color: transparent;
        }
        .userInfo:hover:after{
            content: attr(data-hover-response);
            color: black;
        }
    </style>
</head>
<body>
<!--data-***-->
<!--符合html5的规范-->
<!--js提供dataset方法-->
<!--css提供attr()方法-->

<!--<div userid = "6666" name="hugo"></div>-->
<div id ="user" data-userid="6666" data-hover-response="see I am changed" data-name="hugo" data-date-of-birthday>Fiona</div>

<!--datalist-->
browsers:<input list="browsers">
<datalist id="browsers">
    <option value="chrome"></option>
    <option value="fireFox"></option>
    <option value="IE"></option>
    <option value="Opera"></option>
    <option value="Safari"></option>
</datalist>

<!--download属性:表明资源是让用户下载的而不是立即显示的。download的值就是文件名-->
<div style="margin-top: 20px">
    <a href="1-160F6160T7.jpg"  download="kitty.jpg"> download with download </a>
    <a href="1-160F6160T7.jpg" style="margin-left: 20px"> download without download </a>
</div>

<!--下载动态生成的文件,通bob创建二进制文件,然后用这个属性下载到本地-->

<!--autofocus 页面加载时自动获得焦点,仅对于input, button, textarea等表单元素有效,多个autofocus存在时候,作用与第一个-->
<div style="margin-top: 20px">
    <input>
    <button autofocus="autofocus">click me</button>
    <textarea autofocus="autofocus"></textarea>
    <input autofocus="autofocus">
</div>


<!--placeholder-->
<div style="margin-top: 20px">
<input placeholder="use rname">
</div>
<!--menu目前chrome safari不支持-->
<div>
    <menu type="context" id="mymenu">
        <menuitem label="fresh post"></menuitem>
        <menuitem label="skip to moment"></menuitem>
        <menuitem label="share to...">
            <menuitem label="facebook"></menuitem>
            <menuitem label="twitter"></menuitem>
        </menuitem>
    </menu>
</div>

</body>
<script>
    var user = document.getElementById("user");
    //驼峰的写法
    user.dataset.dateOfBirthday = "1992-04-04"
    user.dataset.englishName = "Fiona"

//    <!--下载动态生成的文件,通bob创建二进制文件,然后用这个属性下载到本地-->
var blob = new Blob(["hello world I am content "]);//文本内容
    var a = document.createElement("a");
    a.href = window.URL.createObjectURL(blob);
    a.download = "hello world.txt";
    a.textContent = "download hello world"
    document.body.appendChild(a)
</script>
</html>
登入後複製

总结:以上就是本篇文的全部内容,希望能对大家的学习有所帮助。更多相关教程请访问Html5视频教程

相关推荐:

php公益培训视频教程

HTML5图文教程

HTML5在线手册

html5特效代码大全

以上是HTML5新增屬性之拖曳屬性(介紹)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板