托拽API之蓝胖子

作者: 旧丶时候 | 来源:发表于2017-01-29 09:47 被阅读0次

0. 前言

我说的蓝胖子就是想的那个能够帮助大熊解决各种困难的“哆啦A梦”,今天就是是实现用鼠标托拽这个蓝胖子,哈哈,那就开始吧!!!


timg.jpg

1. 简介

HTML5提供专门的拖拽与拖放的API的方法。

2. 相关重点

  1. DataTransfer 对象 : 托拽对象用来传递的媒介,使用一般为Event.dataTransfer || e.dataTransfer。
  2. draggable属性 : draggable默认是true,默认是可以被托拽的,如果我们想要实现托拽,最好是手动设置为true。
  3. ondragstart 事件:当拖拽元素开始被拖拽的时候触发的事件,此事件作用在被拖曳元素上
  4. ondrag 事件 : 当拖拽元素移动的时候持续触发的事件,此事件作用在被拖曳元素上
  5. ondragend 事件:当拖拽完成后触发的事件,此事件作用在被拖曳元素上
  6. ondragover 事件:拖拽元素在目标元素上移动的时候触发的事件,此事件作用在目标元素上
  7. ondragenter 事件:当拖曳元素进入目标元素的时候触发的事件,此事件作用在目标元素上
  8. ondragleave 事件 : 当拖曳元素离开目标元素的时候触发的事件,此事件作用在目标元素上
  9. ondrop 事件:被拖拽的元素在目标元素上同时鼠标放开触发的事件,此事件作用在目标元素上
  10. Event.preventDefault() || e.preventDefault() 方法 : 阻止默认事件的方法,在ondragover中一定要阻止默认事件,否则ondrop事件不会被触发。

3. 代码实现

3.1 静态效果

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>拖拽</title>
        <style type="text/css">
            div{
                width: 300px;
                height: 300px;
                float: left;
                border: 1px dashed red;
            }
        </style>
    </head>
    <body>
        <div id="box1">
            <!-- draggable默认是true,默认是可以被拖拽的,
                如果我们像要实现拖拽,最好手动设置为true
            -->
            <img src="../img/drag.jpg" draggable="true" id="dragImg" />
        </div>
        
        <div id="box2"></div>
    </body>
</html>
图片.png

3.2 实现托拽

        <script type="text/javascript">
            var box1 = document.querySelector("#box1");
            var box2 = document.querySelector("#box2");
            var img = document.querySelector("img");
            
            /**** 拖拽元素相关事件 ****/
            img.ondragstart = function (e) {
                //设置拖拽的标识 (在其他事件对象中就会获取到存储的这个值)
                e.dataTransfer.setData("id", e.target.id);
            }
            /**** 目标元素事件相关 ****/
            box2.ondragover = function (e) {
                //这里需要阻止事件默认行为才能触发ondrop
                e.preventDefault();
            }
            box2.ondrop = function (e) {
                //获取拖拽时存储的拖拽标识
                var imgId = e.dataTransfer.getData("id");
                //获取拖拽元素,并且加入到目标元素
                this.appendChild(document.querySelector("#" + imgId));
            }
        </script>
GIF.gif

3.3 实现反托拽

那么我想把这个蓝胖子从右面拖到左面怎么弄呢?你是不是已经想到了啊?聪明!那就是把box1当做目标元素就ok了啊!!!

box1.ondragover = function (e) {
                e.preventDefault();
            }
            box1.ondrop = function (e) {
                //获取拖拽时存储的拖拽标识
                var imgId = e.dataTransfer.getData("id");
                //获取拖拽元素,并且加入到目标元素
                this.appendChild(document.querySelector("#" + imgId));
            }
GIF.gif

4. 完整代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>拖拽</title>
        <style type="text/css">
            div{
                width: 300px;
                height: 300px;
                float: left;
                border: 1px dashed red;
            }
        </style>
    </head>
    <body>
        <div id="box1">
            <!-- draggable默认是true,默认是可以被拖拽的,
                如果我们像要实现拖拽,最好手动设置为true
            -->
            <img src="../img/drag.jpg" draggable="true" id="dragImg" />
        </div>
        
        <div id="box2"></div>
        
        <script type="text/javascript">
            var box1 = document.querySelector("#box1");
            var box2 = document.querySelector("#box2");
            var img = document.querySelector("img");
            
            /**** 拖拽元素相关事件 ****/
            img.ondragstart = function (e) {
                //设置拖拽的标识 (在其他事件对象中就会获取到存储的这个值)
                e.dataTransfer.setData("id", e.target.id);
            }
            box2.ondragover = function (e) {
                //这里需要阻止事件默认行为才能触发ondrop
                e.preventDefault();
            }
            box2.ondrop = function (e) {
                //获取拖拽时存储的拖拽标识
                var imgId = e.dataTransfer.getData("id");
                //获取拖拽元素,并且加入到目标元素
                this.appendChild(document.querySelector("#" + imgId));
            }
            box1.ondragover = function (e) {
                e.preventDefault();
            }
            box1.ondrop = function (e) {
                //获取拖拽时存储的拖拽标识
                var imgId = e.dataTransfer.getData("id");
                //获取拖拽元素,并且加入到目标元素
                this.appendChild(document.querySelector("#" + imgId));
            }
        </script>
    </body>
</html>

5. 结束语

是不是已经学会了,这回你也可以不应用jQUery啊什么的来做这个托拽的效果了,如果你没看懂也没有关系,希望我写的对你有所帮助,最后,到你们的时间了,点赞吧,分享一下吧!!!

相关文章

  • 托拽API之蓝胖子

    0. 前言 我说的蓝胖子就是想的那个能够帮助大熊解决各种困难的“哆啦A梦”,今天就是是实现用鼠标托拽这个蓝胖子,哈...

  • 铅笔画61

    蓝胖子沦为黑胖子

  • Kendo UI TreeView 针对特定情况取消托拽

    Kendo UI TreeView 可以定义托拽事件,代码如下: 如果在某些情况下,需要取消托拽,可以通过e.se...

  • 蓝胖子♡

    时光兜兜转转,虽有着无处安放的流浪,但在原地却依旧有你。 惹祸的时候,你一脸愠色的说着尖酸刻薄的话,却还是会在...

  • 蓝胖子

  • 蓝胖子。。。

  • 蓝胖子

    想得少,看你一眼,就喜欢得一塌糊涂 现在,想得多 便知道了,不能继续喜欢下去了 再见 夏·哆啦A梦

  • 蓝胖子

    就说十一还是很闲,平时上课了,集中起来画画的时间就少了

  • 蓝胖子

    最爱蓝胖子

  • 蓝胖子

网友评论

    本文标题:托拽API之蓝胖子

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