html5 -- 拖放

首先,先了解一下拖放事件,运行以下代码,并结合控制台,你可以理解拖、放事件。

<!DOCTYPE HTML>
<html>

<head>
    <style type="text/css">
        #div1 {
            width: 530px;
            height: 300px;
            padding: 10px;
            border: 1px solid #aaaaaa;
        }
    </style>
</head>

<body>

    <p>请把图片拖放到矩形中:</p>

    <div id="div1"></div>
    <br />
    <img id="mydiv" src="这里随便添加一张图片" draggable="true"/>

    <script type="text/javascript">
        // 拖事件
        var mydiv = document.getElementById('mydiv');
        mydiv.ondragstart = function () {
            console.log('开始拖');
        }

        mydiv.ondrag = function () {
            console.log('正在拖');
        }

        mydiv.ondragend = function () {
            console.log('结束拖');
        }

        // 放事件
        var div1 = document.getElementById('div1');
        div1.ondragenter = function () {
            console.log('放入了');  //当鼠标带着要放的图片 进入容器盒子时,触发 dragenter 事件 
        }
        
        div1.ondragover = function (e) {
            console.log('放在上面'); //当鼠标带着要放的图片 进入盒子的区域,持续触发 dragover 事件
            e.preventDefault(); //阻止默认事件
        }

        // div1.ondragover = function () {
        //     console.log('放在上面');
        //     return false;
        // }

        div1.ondragleave = function () {
            console.log('出去了');  //当鼠标带着要放的图片  离开盒子的区域时,触发 dragleave 事件
        }

        div1.ondrop = function () {
            console.log('放下了');  //需要dragover 阻止默认事件,见注释
        }
    </script>
</body>
</html>

上面只是了解什么是拖、放事件,下面将实现真正的效果

<!DOCTYPE HTML>
<html>

<head>
    <style type="text/css">
        #div1 {
            width: 530px;
            height: 300px;
            padding: 10px;
            border: 1px solid #aaaaaa;
        }
    </style>
</head>

<body>

    <p>请把图片拖放到矩形中:</p>

    <div id="div1"></div>
    <br />
    <img id="mydiv" src="随便放一张图片" draggable="true"/>

    <script type="text/javascript">
        var mydiv = document.getElementById('mydiv');
        var div1 = document.getElementById('div1');

        div1.ondragover = function (e) {
            e.preventDefault();
        }
        
        div1.ondrop = function () {
            this.appendChild(mydiv);
        }
    </script>
</body>
</html>

以上代码实现了简单的拖放,但是对于这种只能拖放一个,因为ondrop事件写死了,只能放 mydiv,所以有如下的代码

<!DOCTYPE HTML>
<html>

<head>
    <style type="text/css">
        #big {
            width: 530px;
            height: 300px;
            padding: 10px;
            border: 1px solid #aaaaaa;
        }

        .mydiv {
            width: 50px;
            height: 50px;
            background-color: skyblue;
        }
    </style>
</head>

<body>
    <div id="big"></div>
    <div id="div1" class="mydiv" draggable="true">1</div>
    <div id="div2" class="mydiv" draggable="true">2</div>
    <div id="div3" class="mydiv" draggable="true">3</div>
    <div id="div4" class="mydiv" draggable="true">4</div>
    <div id="div5" class="mydiv" draggable="true">5</div>

    <script>
        var mydivs = document.getElementsByClassName('mydiv');
        var big = document.getElementById('big');

        for(var i = 0; i < mydivs.length; i ++){
            mydivs[i].ondragstart = function (e) {
                // console.log(e.dataTransfer);  
                //每个拖拽事件都有dataTransfer 的属性,包含一些方法

                //拖的瞬间,存储id
                e.dataTransfer.setData('id',this.id)
            }
        }

        big.ondragover = function (e) {
            e.preventDefault(); //取消默认事件
        }

        big.ondrop = function (e) {
            // 获取之前存储的id
            var id = e.dataTransfer.getData('id')
            //根据id获取节点,然后添加进 big 
            var node = document.getElementById(id);
            this.appendChild(node)
        }
    </script>
</body>
</html>

动动手操作,你就能发现五个小方块,每个都能放进大盒子里面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值