• 技术文章 >web前端 >H5教程

    HTML5新增属性之拖拽属性(介绍)

    青灯夜游青灯夜游2018-10-11 16:21:24转载2417
    本文给大家介绍HTML5新增属性中的拖拽属性,有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

    HTML5新增的许多属性:

    o 文件型声明(<!DOCTYPE>有一型:<!DOCTYPE HTML>

    o 新的解析序:不再基于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, wbr

    o input元素的新型:date,email, url等等。

    o 新的属性:ping(用于aarea,charset(用于meta, async(用于script)。

    o 全域属性:id, tabindex, repeat

    o 新的全域属性: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

    String


    effectAllowed

    String

    files

    FileList

    mozCursor

    String

    mozItemCount

    Unsigned long

    mozSourceNode

    Node

    mozUserCancelled

    Boolean

    types

    DOMStringList

    ondragstart 事件: 当拖拽元素开始被拖拽的候触事件,此事件作用在被拖拽元素上

    ondragenter事件:当拖拽元素入目元素候触事件,此事件作用在目标元素上

    ondragover事件:当拖拽元素穿过元素候触事件,此事件作用在目标元素上

    ondrop事件:当拖拽元素在目标元素上同时放开鼠标时触发的时候,此事件作用在目标元素上

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

    Event.preventDefault() 方法:阻止默认事件方法等的执行。在ondrop中一定要执行preventDefault,否则ondrop事件不会被触发。另外,如果是从其他应用软件或者文件中拖东西进来,尤其是图片的时候,默认的动作是显示这个图片或者是相关信息,并不是真的执行drop。此时需要用document的ondragover事件替代

    Event.effectAllowed 属性:拖拽效果,取有:

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

    含义

    None

    该项目不允许被drop

    copy

    源项目的复制项可能会出现在新的位置

    copyLink

    允许copy或者link操作

    copyMove

    允许copy或者move操作

    link

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

    linkMove

    允许link或者move操作

    move

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

    All

    允许所有操作

    事件触发顺序

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

    Demo

    1.jpg

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

    右边的box是可排序的。

    3.jpg

    代码

    <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('container')[0];
        var boxList = document.getElementsByClassName('boxList')[0];
        var boxes =  document.getElementsByClassName('box');
        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('alert')[0].style.display="none"
            },1000)
            document.getElementsByClassName('alert')[0].innerHTML=content;
            document.getElementsByClassName('alert')[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,如有侵犯,请联系admin@php.cn删除
    专题推荐:HTML5 Drag 拖拽属性
    上一篇:web/html5调用摄像头实现二维码扫描效果(代码实例) 下一篇:H5上滑跳转页面的实现(代码实例)
    PHP编程就业班

    相关文章推荐

    • javascript拖拽效果延伸学习_javascript技巧• javascript拖拽应用实例_javascript技巧• jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)_jquery• jQuery实现div拖拽效果实例分析_jquery• jQuery实现元素拖拽并cookie保存顺序的方法_jquery

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网