当前位置: 代码网 > it编程>编程语言>Javascript > 使用JavaScript轻松实现拖拽功能

使用JavaScript轻松实现拖拽功能

2024年07月05日 Javascript 我要评论
效果展示实现要实现该效果需要运用 html5 的 dragstart 拖放操作事件通过去开启dragstart监听拖放操作事件就能实现图片的拖动<div class="empty">

效果展示

实现

要实现该效果需要运用 html5 的 dragstart 拖放操作事件

通过去开启dragstart监听拖放操作事件就能实现图片的拖动

<div class="empty">
      <div class="fill" draggable="true"></div>
</div>

本例子中我们对fill盒子开启了draggable事件,fill盒子是用来存照片的

但是这样并不能形成一个反馈,只有单纯的拖动效果,效果如下图所示

如果想要实现在拖动了图片后有一个反馈效果,我们就需要使用javascript去监听draggable的开始拖动和结束拖动事件

.hold {
        border: 5px solid #00ff00;
      }
const fill = document.queryselector(".fill");
      // 拖拽开始事件
      fill.addeventlistener("dragstart", dragstart);
      function dragstart(e) {
        this.classlist.add("hold");
      }
      // 拖拽结束事件
      fill.addeventlistener("dragend", dragend);
      function dragend(e) {
        this.classlist.remove("hold");
      }

通过在拖动时给他添加边框,结束时取消以实现一个反馈的效果

最后去监听empty盒子的即可根据不同事件触发时,实现不同的效果

const empty = document.queryselectorall(".empty");
      empty.foreach((item) => {
        // 经过事件
        item.addeventlistener("dragover", dragover);
        // 进入事件
        item.addeventlistener("dragenter", dragenter);
        // 离开事件
        item.addeventlistener("dragleave", dragleave);
        // 拖拽结束事件
        item.addeventlistener("drop", drop);
      })

首先通过类名获取所有的 .empty 元素

然后对每个获取到的元素分别添加了一系列的事件监听:

  • item.addeventlistener("dragover", dragover);:当元素上发生拖曳经过事件时,执行 dragover 函数。
  • item.addeventlistener("dragenter", dragenter);:当元素上发生拖曳进入事件时,执行 dragenter 函数。
  • item.addeventlistener("dragleave", dragleave);:当元素上发生拖曳离开事件时,执行 dragleave 函数。
  • item.addeventlistener("drop", drop);:当元素上发生拖曳放下事件时,执行 drop 函数。

具体思路就是在拖曳进入时给一个反馈,当拖曳放下时将元素放入

// 拖拽经过事件
      function dragover(e) {
        // 阻止默认事件
        e.preventdefault();
        console.log("拖拽经过");
      }
      // 拖拽进入事件
      function dragenter(e) {
        console.log("拖拽进入");
        this.classlist.add("hovered");
      }
      // 拖拽离开事件
      function dragleave(e) {
        console.log("拖拽离开");
        this.classlist.remove("hovered");
      }
      // 拖拽结束事件
      function drop(e) {
        console.log("拖拽结束");
        this.classname = "empty";
        this.append(fill);
      }
  • dragover 函数:

    • 通过 e.preventdefault() 阻止了默认行为,以确保拖放操作按照预期进行
  • dragenter 函数:

    • 通过 this.classlist.add("hovered") 为当前元素添加了一个名为“hovered”的类,用于进行反馈
  • dragleave 函数:

    • 通过 this.classlist.remove("hovered") 移除了之前添加的“hovered”类。
  • drop 函数:

    • 通过 this.classname = "empty" 将当前元素的类名重置为“empty”,接着通过 this.append(fill) 将 fill 元素添加到当前元素中

最终就能实现效果了

完整代码

<!-- html5特征:<!doctype html> -->
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>拖拽效果</title>

    <style>
      body {
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100vh;
      }
      .empty {
        width: 150px;
        height: 150px;
        border: 3px solid #ffcccc;
        margin-left: 10px;
        background: #dafada;
        position: relative;
      }
      .fill {
        width: 140px;
        height: 140px;
        cursor: pointer;
        background-image: url(./image.png);
        background-size: cover;
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
      }
      .hold {
        border: 5px solid #00ff00;
      }
      .hovered{
        border: 3px solid #ff0000;
      }
    </style>
  </head>
  <body>
    <div class="empty">
      <div class="fill" draggable="true"></div>
    </div>
    <div class="empty"></div>
    <div class="empty"></div>
    <div class="empty"></div>
    <div class="empty"></div>

    <script>
      const fill = document.queryselector(".fill");
      // 拖拽开始事件
      fill.addeventlistener("dragstart", dragstart);
      function dragstart(e) {
        this.classlist.add("hold");
      }
      // 拖拽结束事件
      fill.addeventlistener("dragend", dragend);
      function dragend(e) {
        this.classlist.remove("hold");
      }

      const empty = document.queryselectorall(".empty");
      empty.foreach((item) => {
        // 经过事件
        item.addeventlistener("dragover", dragover);
        // 进入事件
        item.addeventlistener("dragenter", dragenter);
        // 离开事件
        item.addeventlistener("dragleave", dragleave);
        // 拖拽结束事件
        item.addeventlistener("drop", drop);
      })
      // 拖拽经过事件
      function dragover(e) {
        // 阻止默认事件
        e.preventdefault();
        console.log("拖拽经过");
      }
      // 拖拽进入事件
      function dragenter(e) {
        console.log("拖拽进入");
        this.classlist.add("hovered");
      }
      // 拖拽离开事件
      function dragleave(e) {
        console.log("拖拽离开");
        this.classlist.remove("hovered");
      }
      // 拖拽结束事件
      function drop(e) {
        console.log("拖拽结束");
        this.classname = "empty";
        this.append(fill);
      }
    </script>
  </body>
</html>

到此这篇关于使用javascript轻松实现拖拽功能的文章就介绍到这了,更多相关javascript拖拽功能内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com