• H5拖拽删除文件


    在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。

    全局属性draggable :标签设置draggable=true后,就能够被拖拽:

    <img src="touxiang.jpg" draggable="true">

    单纯地给元素加上draggable属性,也只能在鼠标按住、拖拽、放开时看到特效,它仅仅证明该元素是可以被拖拽的。

    要实现真正的拖拽删除文件,拖拽上传文件等等效果,必须结合Drag & Drop API开发。HTML5提供专门的拖拽与拖放的API

    举个栗子

    在实现网页拖拽丢弃的特效的话,首先要学习Drag and Drop API提供的1个对象和4个事件

    DataTransfer对象用来保存,通过拖放动作,拖动到浏览器的数据。

    提供setData方法为一个给定的类型设置数据;getData方法根据指定的类型检索数据。

    先来做个小练习,熟悉DataTransfer对象怎么结合拖拽事件使用

    <img id="drag1" src="touxiang.jpg" draggable="true" ondragstart="drag(event)" width="200" height="200">
    function drag(ev) {
        ev.dataTransfer.setData("text", ev.target.id);
    }

    已设置一张图片为被拖拽元素,设置被拖数据的数据类型为“text”、值是被拖拽元素的id-->"drag1"

    图片可以拖拽了,但是将它安放何处呢?

    <div id="div1" ondrop="drop(event)"></div>
     function drop(ev) {
        ev.preventDefault();
        var data = ev.dataTransfer.getData("text");
        ev.target.appendChild(document.getElementById(data));
    }

    将id为div1的元素绑定ondrop事件,使用getData方法获取刚才存储在dataTransfer中的对象,然后将其追加在div中。至此,一个简单拖拽效果就完成啦!

    但是,当你复制以上两段代码打开浏览器运行时,发现并没有什么luan用~~~看看上面总结了4个事件的用法,刚才的代码中只用到2个,呵~就知道事情没这么简单。

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

    此时,需要在div1上再绑定ondragover事件

    function allowDrop(ev) {
        ev.preventDefault(); //阻止浏览器默认行为
    }
    <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

    如何使用H5+Darg and Drop API开发完成拖拽效果已经学会了,现在来完成刚才举的栗子吧:

    奉上完整代码:

    ……省略HTML……
    //定义变量
    var eleDustbin = document.getElementById('dustbin'),//垃圾桶
        eleDrags = document.getElementsByClassName('draglist'),//待丢弃垃圾
        eleRemind = document.getElementById('dragremind'),//提示语
        eleDrag = null;
    for (var i=0; i<eleDrags.length; i++) {
        //拖拽开始
        eleDrags[i].ondragstart = function(ev) {
            ev.dataTransfer.setData("text", ev.target.id);
            eleDrag = ev.target;
            //return true;
        };
        //拖拽结束
        eleDrags[i].ondragend = function(ev) {
            ev.dataTransfer.clearData("text");
            eleDrag = null;
            //return false
        };
    }
    //拖拽元素在目标元素头上移动的时候
    eleDustbin.ondragover = function(ev) {
        ev.preventDefault();
        //return true;
    };
    //拖拽元素进入目标元素头上,同时鼠标松开的时候
    eleDustbin.ondrop = function(ev) {
        if (eleDrag) {
            eleRemind.innerHTML += '<b>"' + eleDrag.childNodes[0].alt+ '"</b>被扔进了垃圾箱<br/>';
            eleDrag.parentNode.removeChild(eleDrag);
        }
        return false;   //避免触发浏览器自带的事件
    };

    过去在网页中基本上都是使用DOM事件模型中的mousedown、mousemove、mouseup监听来模拟拖拽效果,

    这种方式存在代码冗长,性能低下等问题,因为不停地修改元素位置会导致页面reflow。

  • 相关阅读:
    微服务常见安全认证方案Session token cookie跨域
    谈谈基于OAuth 2.0的第三方认证 [上篇]
    Kerberos安全体系详解---Kerberos的简单实现
    kerberos认证原理---讲的非常细致,易懂
    重放攻击(Replay Attacks)
    HTTP
    Cookie/Session机制详解
    cookie和session的区别与联系
    基于Token的WEB后台认证机制
    如何用phpmyadmin导入大容量.sql文件,直接使用cmd命令进行导入
  • 原文地址:https://www.cnblogs.com/laoli-note/p/11343548.html
Copyright © 2020-2023  润新知