JS拖拽插件实现步骤

JS拖拽插件实现步骤:

  1. 监听拖拽事件;

在拖拽开始时,需要给拖拽元素添加监听拖拽开始事件,即 dragstart 事件。在拖拽结束时,需要给拖拽元素的父元素添加监听拖拽结束事件,即 drop 事件和 dragover 事件。代码示例:

// 拖拽开始
document.getElementById('drag-elem').addEventListener('dragstart', function(e) {
  e.dataTransfer.setData('text', e.target.id);
});

// 拖拽结束
document.getElementById('drop-elem').addEventListener('drop', function(e) {
  e.preventDefault();
  var data = e.dataTransfer.getData('text');
  e.target.appendChild(document.getElementById(data));
});

document.getElementById('drop-elem').addEventListener('dragover', function(e) {
  e.preventDefault();
});
  1. 设置拖拽元素的 draggable 属性为 true

需要将需要拖拽的元素的 draggable 属性设置为 true。代码示例:

<div id="drag-elem" draggable="true">拖拽元素</div>
  1. 设置放置区域的 dropzone 属性为 copymove

需要将可放置的区域添加 dropzone 属性并设置为 copymove,表示可复制或移动拖拽元素到该区域。代码示例:

<div id="drop-elem" dropzone="copy">放置区域</div>
  1. 获取拖拽数据并进行相应处理;

在拖拽结束时获取拖拽数据,通常是拖拽元素的 id 值,然后可以对该数据进行相应的处理,如在放置区域创建一个新的元素,并把拖拽数据传递给该元素。

示例一:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>JS拖拽插件示例一</title>
    <style>
      #drag-elem {
        width: 100px;
        height: 100px;
        background-color: red;
        color: #fff;
        text-align: center;
        line-height: 100px;
        cursor: move;
      }

      #drop-elem {
        width: 200px;
        height: 200px;
        background-color: #ccc;
        margin-top: 20px;
      }
    </style>
  </head>
  <body>
    <div id="drag-elem" draggable="true">拖拽元素</div>
    <div id="drop-elem" dropzone="copy">放置区域</div>

    <script>
      document.getElementById('drag-elem').addEventListener('dragstart', function(e) {
        e.dataTransfer.setData('text', e.target.id);
      });

      document.getElementById('drop-elem').addEventListener('drop', function(e) {
        e.preventDefault();
        var data = e.dataTransfer.getData('text');
        var clone = document.createElement('div');
        clone.innerHTML = document.getElementById(data).innerHTML;
        e.target.appendChild(clone);
      });

      document.getElementById('drop-elem').addEventListener('dragover', function(e) {
        e.preventDefault();
      });
    </script>
  </body>
</html>

示例二:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>JS拖拽插件示例二</title>
    <style>
      .drag-elem {
        width: 100px;
        height: 100px;
        background-color: red;
        color: #fff;
        text-align: center;
        line-height: 100px;
        margin-right: 10px;
        cursor: move;
      }

      .drop-elem {
        display: flex;
        flex-wrap: wrap;
        width: 500px;
        height: 200px;
        background-color: #ccc;
        margin-top: 20px;
        padding: 10px;
      }

      .new-elem {
        width: 100px;
        height: 100px;
        background-color: blue;
        color: #fff;
        text-align: center;
        line-height: 100px;
        margin-right: 10px;
      }
    </style>
  </head>
  <body>
    <div class="drag-elem" draggable="true">拖拽元素一</div>
    <div class="drag-elem" draggable="true">拖拽元素二</div>
    <div class="drag-elem" draggable="true">拖拽元素三</div>
    <div class="drag-elem" draggable="true">拖拽元素四</div>
    <div class="drag-elem" draggable="true">拖拽元素五</div>

    <div class="drop-elem" dropzone="copy">放置区域</div>

    <script>
      var dragElems = document.querySelectorAll('.drag-elem');
      var dropElem = document.querySelector('.drop-elem');

      [].forEach.call(dragElems, function(elem) {
        elem.addEventListener('dragstart', function(e) {
          e.dataTransfer.setData('text', e.target.outerHTML);
        });
      });

      dropElem.addEventListener('drop', function(e) {
        e.preventDefault();
        var data = e.dataTransfer.getData('text');
        var clone = document.createElement('div');
        clone.classList.add('new-elem');
        clone.innerHTML = data;
        e.target.appendChild(clone);
      });

      dropElem.addEventListener('dragover', function(e) {
        e.preventDefault();
      });
    </script>
  </body>
</html>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS拖拽插件实现步骤 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码

    easyui datebox 时间限制 如果需要限制easyui datebox可选择的时间范围,可以使用min和max属性或者disabledDates和disabledDays属性达到目的。 min和max属性: <!– 输入框前端代码 –> <input id="DateBox" class="eas…

    jquery 2023年5月28日
    00
  • jQWidgets jqxPasswordInput val() 方法

    以下是关于 jQWidgets jqxPasswordInput 组件中 val() 方法的详细攻略。 jQWidgets jqxPasswordInput val() 方法 jQWidgets jqxPasswordInput 组件的 val 方法用于获取或设置密码输入框的值。 语法 // 获取密码输入框的值 var password = $(‘#pass…

    jquery 2023年5月12日
    00
  • jQuery UI 实例讲解 – 日期选择器(Datepicker)

    下面我就来详细讲解“jQuery UI 实例讲解 – 日期选择器(Datepicker)”的完整攻略。 一、什么是日期选择器(Datepicker)? 日期选择器(Datepicker)是 jQuery UI 中的一个插件,可以让用户更方便地选择日期,并且可以自定义日期的格式。它不仅可以用于网站上的日期选择,也可以用于任何需要选择日期的环境中。 二、如何使用…

    jquery 2023年5月28日
    00
  • jQWidgets jqxLayout 主题属性

    jQWidgets jqxLayout 主题属性攻略 简介 jQWidgets 是一个基于 jQuery 的 UI 组件库,提供了丰富的 UI 组件和工具,可于创建代化应程序。jqxLayout局组用于灵的布局,可用于构建复杂的用户界面。本攻略将详细介绍 jqxLayout 的主题属性,包括如何设置主题和如何自定义主题。 设置主题 jqxLayout 组件的…

    jquery 2023年5月10日
    00
  • jquery 按键盘上的enter事件

    jQuery是一种快速、简洁的JavaScript框架,可以方便地对网页进行操作,包括事件注册。下面是jQuery中如何按键盘上的Enter事件的完整攻略。 步骤 1. 在HTML文件中引入jQuery库 在head标签中加入以下代码: <script src="https://cdn.bootcss.com/jquery/3.3.1/jqu…

    jquery 2023年5月28日
    00
  • jquery 模板的应用示例

    让我们来详细讲解“jquery 模板的应用示例”的完整攻略。 1. jQuery模板介绍 jQuery模板是一种基于JavaScript模板引擎的技术,它可以让程序员通过模板定义出数据的展示格式,并将数据与模板相结合,生成HTML字符串。它可以使动态页面的开发变得更为方便和快捷。 2. jQuery模板的使用方法 jQuery模板有两个主要的函数,$.tem…

    jquery 2023年5月28日
    00
  • jQuery 性能优化手册 推荐

    前言 本手册汇总 jQuery 的性能优化技巧,旨在帮助开发者提高前端性能,减小页面对浏览器的负担,提高用户体验。本文将按照优化流程的时间顺序,从 HTML 结构优化、CSS 选择器优化、JavaScript 优化、Ajax 优化以及其他方面分别进行讲解。 一、HTML 结构优化 减少 DOM 操作 尽量减少对 DOM 的操作次数,因为这会涉及到渲染时间和重…

    jquery 2023年5月28日
    00
  • jquery弹出框的用法示例(一)

    对于jquery弹出框的用法示例(一),我们需要首先了解什么是jquery弹出框以及其用法。 什么是jquery弹出框? jquery弹出框是一款轻量级的javascript插件,它可以用于在网页中添加弹出框功能,常用于消息提示、询问确认等操作。 jquery弹出框的用法 引入jquery弹出框插件 首先,我们需要引入jquery和jquery弹出框插件的j…

    jquery 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部