zoukankan      html  css  js  c++  java
  • drag

    1、draggable ="true"  元素可以拖拽了

    2、拖拽元素事件:

      dragstart  拖拽前触发

      drag  拖拽前、拖拽结束之间,连续触发

      dragend 拖拽结束触发

    3、目标元素事件:

      dragenter  进入目标元素触发

      dragover  在目标元素移动触发

      dragleave  离开目标元素触发

      drop  在目标元素上释放鼠标触发,必须在dragover中阻止默认事件,drop才会起作用。

    4、执行顺序:

      drop不触发的时候:

        dragstart-->drag[不动也会N次触发]-->dragenter-->(dragover-->drag)[移动就会N次触发dragover-->drag]-->dragleave-->dragend

      drop触发的时候:

        dragstart-->drag[不动也会N次触发]-->dragenter-->(dragover-->drag)[移动就会N次触发dragover-->drag]-->dragover-->drop-->dragend

    5、dataTransfer  对象,在event下。

      1、ev.dataTransfer.setData(key,value) --> ev.dataTransfer.setData('test','abc')   可解决在火狐下的问题

      2、ev.dataTransfer.effectAllowed = 'copy'  光标的样式,(none, copy, copyLink, copyMove, link, linkMove, move, all 和 uninitialized)

      3、ev.dataTranfer.setDragImage(obj,0,0)  设置拖拽时显示的图和位置

    例子:

        <div draggable="true" id="div1"></div>
        <div id="div2"></div>
    
        <script type="text/javascript">
            var oDiv1 = document.getElementById('div1'),
                oDiv2 = document.getElementById('div2');
    
            oDiv1.ondragstart = function(ev){
                var ev = ev || event;
                ev.dataTransfer.setData('test','abc');  //设置后,在火狐中拖拽才有用
                ev.dataTransfer.effectAllowed = 'copy';  //设置目标元素鼠标的样式
                ev.dataTransfer.setDragImage(oDiv2,0,0); //设置拖拽时显示的图和位置
                console.log('开始拖拽');
            };
            oDiv1.ondrag = function(){
                console.log('拖拽过程中....');
            };
            oDiv1.ondragend = function(){
                console.log('拖拽完成');
            };
            oDiv2.ondragenter = function(){
                console.log('拖拽进入放置元素');
            };
            oDiv2.ondragover = function(ev){
                console.log('在放置元素内移动');
                ev.preventDefault();   //必须阻止默认事件,ondrop才会起作用
            };
            oDiv2.ondragleave = function(){
                console.log('拖拽离开放置元素');
            };
            oDiv2.ondrop = function(ev){
                console.log(ev.dataTransfer.getData('test'));
                console.log('释放鼠标');
            };

       4、ev.dataTransfer.files  -->外部文件的集合(列表)

        ev.dataTransfer.files[i] -->第i个文件

        ev.dataTransfer.files.length  -->列表长度

        ev.dataTransfer.files[i].type -->文件类型:image/png、image/jpeg、text/plain等

    6、FileReader 读取文件信息

        var fd = new FileReader();  

        fd.readAsDataURL(文件);  // 文件信息

        fd.onload = function(){  //文件读取成功,触发

          console.log(this.result)   //文件数据

        };

    例子:

            <div id="div1"  draggable="true" >将文件拖拽到此区域</div>
            <script type="text/javascript">
                var oDiv1 = document.getElementById('div1');
                oDiv1.ondragenter = function  () {
                    this.innerHTML = '可以释放了';
                };
                oDiv1.ondragover = function(ev){
                    var ev = ev || event;
                    ev.preventDefault();   //为了drop有效
                };
                oDiv1.ondragleave = function(){
                    this.innerHTML = '将文件拖拽到此区域';
                };
                oDiv1.ondrop = function(ev) {
                    var ev = ev || event;
                    var fs = ev.dataTransfer.files;
                    console.log(fs.length);  //列表长度
                    console.log(fs[0].type); //文件的类型
    
                    for (var i=0;i<fs.length;i++) {
                        if (fs[i].type.indexOf('image') != -1) {  //判断是否是图片?
                            var fd = new FileReader();  
                            fd.readAsDataURL(fs[i]);
                            fd.onload = function(){
    
                                oUl = document.createElement('ul');
                                oLi = document.createElement('li');
                                oImg = document.createElement('img');
                                oImg.src = this.result;  //this.result为文件数据
                                oImg.style.width = '100px';
                                oLi.appendChild(oImg);
                                oUl.appendChild(oLi);
                                document.body.appendChild(oUl);
    
                            };                    
                        } else {
                            alert('不是图片');
                        }                    
                    }
    
    
    
                    ev.preventDefault(); //防止文件拖拽到目标元素时,打开文件
                };
            </script>

        

  • 相关阅读:
    HDU 4320 Arcane Numbers 1(质因子包含)
    BZOJ 3673: 可持久化并查集(可持久化并查集+启发式合并)
    Codeforces Beta Round #65 (Div. 2) C. Round Table Knights
    HDU 4496 D-City(逆向并查集)
    HDU 3047 Zjnu Stadium(带权并查集)
    HDU 4104 Discount(n个数不能构成的最小值)
    hihoCoder 1515 分数调查(带权并查集)
    POJ 1733 Parity game(种类并查集)
    Codeforces Round #107 (Div. 1) B. Quantity of Strings(推算)
    CSU 2005 Nearest Maintenance Point(最短路+bitset)
  • 原文地址:https://www.cnblogs.com/joya0411/p/4461653.html
Copyright © 2011-2022 走看看