zoukankan      html  css  js  c++  java
  • html5 拖拽的简要介绍

    1,首先,你要告诉计算机那个元素可以拖动,或者是一张图,或者是一个盒子,在标签里面加上 draggable="true" 

    2,然后,监听该元素被拖动的函数 ondragstart="drag(event)"

    3,drag 里面告诉计算机是那个元素被拖动的 ev.dataTransfer.setData("Text",ev.target.id);

    4,接下来将拖动的元素放到哪个盒子,(或者是经过那个盒子,经过某个盒子的时候触法 ondragover 函数 )当然了,这个盒子要告诉计算机,我是个盒子,可以把东西放我这里   ev.preventDefault(); 这句的意思就是说计算机别限制我“禁止”拖动

    5,当鼠标松开的时候 触发事件 ondrop="drop(event)" , 这个函数里面 介绍是谁被拖动的ev.dataTransfer.getData("Text");,放到了哪里ev.target ,就把被拖动的元素插入这个盒子里面,ev.target.appendChild(document.getElementById(data));   效果就实现了。

    6,这个是我自己的理解,有不对的欢迎指正。

    下面,是简单的源码

    <!DOCTYPE HTML>
    <html>
    <head>
    <style type="text/css">
    #div1 {width:488px;height:370px;padding:10px;border:1px solid #aaaaaa;}
    #div2 {width:488px;height:370px;padding:10px;border:1px solid #aaaaaa;}
    </style>
    <script type="text/javascript">
    
    function allowDrop(ev){
        ev.preventDefault();
           
        }
    
    function drag(ev){
        ev.dataTransfer.setData("Text",ev.target.id);
        }
    function drop(ev){
        ev.preventDefault();
        var data = ev.dataTransfer.getData("Text");
        ev.target.appendChild(document.getElementById(data));    
    }
    </script>
    <meta charset="utf-8">
    </head>
    <body>
    
    <p>请把 W3School 的图片拖放到矩形中:</p>
    
    <div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
    
    <br />
    
    
    <img id="drag2" src="images/001(2)_01.jpg" draggable="true" ondragstart="drag(event)"  width="460" height="221" />
    
    </body>
    </html>

     上面这个是基本的这种功能,其实拖放有很强大的功能,本吊也仅仅知道其中的一小部分,下面贴一个稍微复杂点的应用

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    
    <style>
    *{ margin:0; padding:0}
    .mask { position:fixed; width:100%; height:100%; background-color:rgba(0,0,0,.4); top:0px; left:0px;}
    .mask_footer { width:300px; height:220px; position:relative; left:50%; top:50%; background-color:#fff; border:solid 1px  #ccc ; margin-left:-150px; margin-top:-100px;}
    .title {
        background-color: #960;
        color: #fff;
        height:30px; line-height:30px;
        cursor:move;
    }
    .close { width:20px; height:20px; font-size:18px; position:absolute; right:5px; top:5px; cursor:pointer;}
    .close:hover { color:#fff;}
    #but { width:200px; height:40px;}
    </style>
    </head>
    
    <body>
    
    <button type="button" value="test" id="but" >test</button>
    
    <div class="mask" ondrop="drop(event)" ondragover="allowDrop(event)">
      <div class="mask_footer" id="testid" >
              <span class="close">×</span>
            <h3 class="title" draggable="true" draggable="true"  ondragstart="drag(event)" >点击我可以移动位置</h3>
            <div>文本内容》。。。、</div>
      </div>
    </div>
    
    <script>
    var but =document.getElementById("but");
    var mask = document.getElementsByClassName("mask")[0];
    var clos = document.getElementsByClassName("close")[0];
    but.addEventListener("click",show);
    clos.addEventListener("click",hide);
    var nowx , nowy ;
    function show(){
        
        mask.style.display = "block ";    
    }
    function hide (){
        mask.style.display = "none";    
        
        }
    function allowDrop(ev){
        ev.preventDefault();
           
        }
    function drag(ev){
        var dragId = ev.target.parentNode.id;
        var dragImg = document.getElementById(dragId);
        ev.target.offsetX;
        var yuanX =  ev.target.parentNode.offsetLeft ;
        var yuanY =  ev.target.parentNode.offsetTop ;
        nowx =ev.clientX ;
        nowy =ev.clientY ;
        nowx = nowx - yuanX ;
        nowy = nowy - yuanY;
        ev.dataTransfer.setData("Text",dragId);
        ev.dataTransfer.setDragImage(dragImg,nowx,nowy);
        }
    function drop(ev){
        ev.preventDefault();
        var data = ev.dataTransfer.getData("Text");
        
        var dX = ev.clientX -nowx;
        var dY = ev.clientY -nowy ;
        var ele = document.getElementById(data);
        ele.style.left = dX +"px";
        ele.style.top = dY +"px";
        ele.style.marginLeft=  "0px";
        ele.style.marginTop = "0px";
    }
    
    </script>
    </body>
    </html>

    这个是模仿百度登陆框做的一个功能,当然了,也很普通。

  • 相关阅读:
    Excel 相对引用与绝对引用
    SQL Update 巧用
    Delphi 多步操作产生错误,请检查每一步的状态值
    cxGrid 增加序号 (非数据库绑定模式) (测试通过)
    delphi cxgrid 使用方法
    如何使满足条件的数据显示不同的颜色
    Delphi中Format与FormatDateTime函数详解
    常用的日期时间函数
    100m和1000m网线的常见制作方法
    基于请求的分布式互斥算法
  • 原文地址:https://www.cnblogs.com/xiaotian747/p/3758384.html
Copyright © 2011-2022 走看看