美文网首页
HTML5新功能_拖拽API

HTML5新功能_拖拽API

作者: 小懒豆 | 来源:发表于2018-07-05 20:05 被阅读19次

    一、拖拽API

    设置对象可以拖动

    <img draggable="true" />
    

    事件

    dragover有一个默认行为!!!那就是当dragover触发时,drop会失效!!!!

        source.addEventListener('dragstart',function(ev){   
            console.log('源对象开始被拖动');
        },false)
       source.addEventListener('drag',function(ev){   
            console.log('源对象被拖动过程中(鼠标可能在移动也可能未移动)');
        },false)
       source.addEventListener('dragend',function(ev){   
            console.log('源对象被拖动结束');
        },false)
    
        process.addEventListener('dragenter',function(ev){  
            console.log('目标对象被源对象拖动着进入');
        },false)
        process.addEventListener('dragleave',function(ev){ 
            console.log('源对象拖动着离开了目标对象');
        },false)
       process.addEventListener('dragover',function(ev){  
            console.log('目标对象被源对象拖动着悬停在上方');
        },false)
    
        target.addEventListener('drop',function(ev){        // drop事件由c元素产生
            console.log('源对象拖动着在目标对象上方释放/松手');
            ev.preventDefault();
        },false)
        document.ondragover = function(e){e.preventDefault();}
    

    dataTransfer 对象

    • 在所有拖放事件中提供了一个数据传递对象 dataTransfer,用于在源对象和目标对象间传递数据。

    setData()
    该方法向 dataTransfer 对象中存入数据。接收两个参数,第一个表示要存入数据种类的字符串,现在支持有以下几种:

    text/plain:文本文字。
    text/html:HTML文字。
    text/xml:XML文字。
    text/uri-list:URL列表,每个URL为一行。
    第二个参数为要存入的数据。例如:

    event.dataTransfer.setData('text/plain','Hello World');
    

    getData()
    该方法从 dataTransfer 对象中读取数据。参数为在 setData 中指定的数据种类。例如:

    event.dataTransfer.getData('text/plain');
    

    clearData()
    该方法清除 dataTransfer 对象中存放的数据。参数可选,为数据种类。若参数为空,则清空所有种类的数据。例如:

    event.dataTransfer.clearData();
    

    setDragImage()
    该方法通过用img元素来设置拖放图标。接收三个参数,第一个为图标元素,第二个为图标元素离鼠标指针的X轴位移量,第三个为图标元素离鼠标指针的Y轴位移量。例如:

    var source = document.getElementById('source'),
        icon = document.createElement('img');
    
    icon.src = 'img.png';
    
    source.addEventListener('dragstart',function(ev){
        ev.dataTransfer.setDragImage(icon,-10,-10)
    },false)
    
    属性 描述
    dropEffect 表示拖放操作的视觉效果,允许对其进行值的设定。该效果必须在用effectAllowed属性指定的允许的视觉效果范围内,允许指定的值有:none、copy、link、move。
    effectAllowed 用来指定当元素被拖放时所允许的视觉效果。可以指定的值有:none、copy、copyLink、copyMove、link、linkMove、all、uninitialize。
    files 返回表示被拖拽文件的 FileList。
    types 存入数据的MIME类型。如果任意文件被拖拽,那么其中一个类型将会是字符串”Files”。

    图片拖拽到网页中并读取

    container.ondrop = function(e){
          console.log('客户端拖动着一张图片释放了...')
          //当前的目标对象读取拖放源对象存储的数据
          //console.log(e.dataTransfer); //显示有问题
          //console.log(e.dataTransfer.files.length); //拖进来的图片的数量
          var f0 = e.dataTransfer.files[0];
          //console.log(f0); //文件对象 File
     
          //从文件对象中读取数据
          var fr = new FileReader();
          //fr.readAsText(f0); //从文件中读取文本字符串
          fr.readAsDataURL(f0); //从文件中读取URL数据
          fr.onload = function(){
            console.log('读取文件完成')
            console.log(fr.result);
            var img = new Image();
            img.src = fr.result; //URL数据
            container.appendChild(img);
          }
        }
    

    相关文章

      网友评论

          本文标题:HTML5新功能_拖拽API

          本文链接:https://www.haomeiwen.com/subject/dgepuftx.html