vuedraggable的使用

news2024/11/14 6:27:09

Draggable为基于Sortable.js的vue组件,用以实现拖拽功能。

特性
支持触摸设备
支持拖拽和选择文本
支持智能滚动
支持不同列表之间的拖拽
不以jQuery为基础
和视图模型同步刷新
和vue2的国度动画兼容
支持撤销操作
当需要完全控制时,可以抛出所有变化
可以和现有的UI组件兼容

工作中使用了基于vue的拖动组件vuedraggable,在这里进行一些总结。

详细的官网案例:https://www.npmjs.com/package/vuedraggable

1.简单的拖动使用

<template>

    <div>

        <draggable @start="start" @end="end">

            <p v-for="d in list" :key="d.id">{{d.name}}</p>

        </draggable>

    </div>

</template>

<script>

import draggable from "vuedraggable";

export default {

    components: {

        draggable

    },

    data() {

        return {

            list: [

                { name: "John", id: 1 },

                { name: "Joao", id: 2 },

                { name: "Jean", id: 3 },

                { name: "Gerard", id: 4 }

            ]

        }

    },

    methods: {

        start (e) {

            console.log(e)

        },

        end (e) {

            console.log(e)

        },

    }

}

</script>

先引用安装好的vuedraggable插件,然后引入到该组件,即可使用draggable标签,那么该标签下的p标签就可以进行拖动排序。

其中的start,end事件是拖动开始和结束事件,需要注意一下几个字段,表示的是拖动开始的下标和结束的下标位置。

可以利用其改动的下标进行排序
  在这里插入图片描述

2.固定其他位,进行某一位排序

在我的工作中需要进行某一位进行拖动排序,而其他不动,代码如下:

<template>

    <div style="border: 1px solid #e8e8e8;width: 300px;">

        <draggable v-model="reportList" @end="endEvent" v-bind="dragOptions">

            <p v-for="r in reportList" :key="r.id" :class="r.active ? 'active' : 'disabled'">{{r.name}}</p>

        </draggable>

    </div>

</template>

<script>

import draggable from "vuedraggable"

export default {

    components: {

        draggable

    },

    data () {

        return {

            dragOptions: {

                animation: 500,

                filter: '.disabled'

            },

            reportList: [

                { id: 1, name: 'javascript', active: true},

                { id: 2, active: false, name:'css' },

                { id: 3, active: false, name: 'typescript' },

                { id: 4, active: false, name: 'vue.js' },

                { id: 5, active: false, name: 'nodejs' }

            ]

        }

    },

    methods: {

        endEvent () {

            console.log(this.reportList) // 自动更新reportList

        }

    }

}

</script>

在这里插入图片描述
此时,只有javascript那一栏可以拖动,其他栏为禁止状态,由dragOption中的filter实现过滤,并添加动画效果

同时我还发现,其拖动结束后打印的list,竟然是排序后的结果,这样真的很方便

3.复制拖动

在这里插入图片描述
初始状态如上所示,我现在需要的是将左侧按钮内容拖动到右侧,且左侧依旧存在。代码如下:

<template>

  <div style="height: 1000px;">

    <div style="float:left;width: 300px;">

    <!-- 左侧按钮 -->

      <draggable

        v-model="list1"

        draggable=".c-item"

        v-bind="dragOptions"

        :options="{sort: false, group: {name: 'field', pull:'clone',put: false}}"

      >

        <div v-for="d in list1" :key="d.id" class="item c-item">{{d.name}}</div>

      </draggable>

    </div>

    <div style="float:right;width: 300px;">

    <!-- 右侧按钮 -->

      <draggable group="field" :list="list2" v-bind="dragOptions" @change="toChange">

        <div v-for="d in list2" :key="d.id" class="item">{{d.name}}</div>

      </draggable>

    </div>

  </div>

</template>

<script>

import draggable from "vuedraggable";

export default {

  components: {

    draggable

  },

  data() {

    return {

      dragOptions: { animation: 500 },

      list1: [

        { name: "John", id: 1 },

        { name: "Joao", id: 2 },

        { name: "Jean", id: 3 },

        { name: "Gerard", id: 4 }

      ],

      list2: [

        { name: "Juan", id: 5 },

        { name: "Edgard", id: 6 },

        { name: "Johnson", id: 7 }

      ]

    };

  },

  methods: {

    toChange(e) {<br>     console.log(e)

        if (e.added) {

            console.log(this.list2)

        }

 

    }

  }

};

</script>

左侧的draggable标签添加了options配置项,

sort:false 表示拖动时禁止其进行排序操作

group: {name: ‘field’, pull: ‘clone’, put: false} 表示进行克隆拖动操作,并且该name和拖动的目标位置group名称一致,如右侧draggable标签的group同样为field

draggable=“.item” 将可拖动属性下放到每一个按钮下

右侧接收的draggable标签添加标识:group=“field”,同时含有change事件,可以返回添加各种事件,有兴趣的可以查看官网。我这边是添加事件

如下图所示,拖动后返回add事件,并且打印的list 是排好序的list
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/400069.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【国际化】vue2+uniapp实现国际化

文章目录前言一、什么是国际化&#xff1f;二、使用步骤1.创建locale文件夹2.创建国际化JSON文件3.引入国际化总结前言 国际化其实是拓展你的应用的受众人群的一种方式&#xff0c;有利于你的项目应用范围更广&#xff0c;uniapp和vue官方文档都有针对于国际化有专门的文档&am…

WIFI电子标签参数

一、4.2寸WIFI电子标签参数 型号 PW42R_V1 尺寸(mm) 104.95*95.93*15.2mm 显示技术 3色墨水屏显示技术 可视区域(mm) 84.6*63.4 分辨率(像素) 400*300 像素尺寸(mm) 0.212*0.212 单点颜色 黑/白/红 视角 180 工作温度 0 - 40℃ 重量 150g 电池 CR2477*6 …

Nginx同一端口部署多个前后端分离的vue项目

要用nginx容器部署多个前端项目可以采用监听端口&#xff0c;和基于location配置两种方法&#xff0c; 我的nginx是使用docker部署的&#xff0c;启动的时候没有开多余的端口&#xff0c;所以采用location配置 一个server下根据根路径不同分别代理访问不同项目。 下面操练起来&…

什么是响应式编程

简称RP&#xff08;Reactive Programming&#xff09; 定义一 响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流&#xff0c;而相关的计算模型会自动将变化的值通过数据流进行传播。 变化传播&#xff1a;主动/自动将…

2023/03/09 - Vue学习笔记 - 【组件通信】 vuex的使用和讲解—$store

官网&#xff1a;https://vuex.vuejs.org/zh/ 1 Vuex存在的意义 概念&#xff1a;专门在 Vue 中实现集中式状态&#xff08;数据&#xff09;管理的一个 Vue 插件&#xff0c;对 vue 应用中多个组件的共享状态进行集中式的管理&#xff08;读/写&#xff09;&#xff0c;也是…

Kafka入门(七)

下面聊聊Kafka的配置参数&#xff0c;包括生产者的配置参数、Broker的配置参数、消费者的配置参数。 1、生产者配置参数 acks 该参数控制了生产者的消息发送确认机制&#xff0c;用于指定分区中必须有多少个副本成功接收到消息后生产者才会认为这条消息写入是成功的&#xff0c…

问题解决:利用GeoFabrik下载OSM数据

问题描述由于OpenStreetMap数据常常是.osmnx格式&#xff0c;需要在Linix系统上进行格式转换&#xff0c;比较不方便。GeoFabrik 下载平台提供了一个很好的直接下载.shp数据格式的途径&#xff0c;链接如下&#xff1a;【无需梯子】Geofabrik Download Server具体下载方法以Nep…

QT-项目创建

项目创建 注意: 项目创建&#xff0c;名称和路径不能包含中文路径。 创建窗口三大基类 QWidhetQMainWindowQDialog 1.1 项目文件介绍 mian.cpp 介绍 #include "mywidget.h" #include <QApplication> // QApplication 应用程序类// 程序入口 命令行变量数量 …

Zabbix6.2利用模板和自定义监控项监控华为AR3260路由器

1&#xff1a;登录路由器的WEB管理控制台。在系统管理中找到SNMP然后开启SNMP代理&#xff0c;SNMP的版本可以只选择v2c都选择也无所谓&#xff0c;然后点击新建一个团体。 2&#xff1a;团体名称输入默认的public即可&#xff0c;在WEB端显示的是乱码&#xff0c;但是不影响使…

SQL执行过程详解

1 、用户在客户端执行 SQL 语句时&#xff0c;客户端把这条 SQL 语句发送给服务端&#xff0c;服务端的进程&#xff0c;会处理这条客户端的SQL语句。 2 、服务端进程收集到SQL信息后&#xff0c;会在进程全局区PGA 中分配所需内存&#xff0c;存储相关的登录信息等。 3 、客…

国外SEO策略指南:确保你的网站排名第一!

如果你想在谷歌等搜索引擎中获得更高的排名并吸引更多的流量和潜在客户&#xff0c;那么你需要了解一些国外SEO策略。 下面是一些可以帮助你提高谷歌排名的关键策略。 网站结构和内容优化 谷歌的搜索算法会考虑网站的结构和内容。 因此&#xff0c;你需要优化网站结构&…

2379. 得到 K 个黑块的最少涂色次数

2379. 得到 K 个黑块的最少涂色次数 难度简单 给你一个长度为 n 下标从 0 开始的字符串 blocks &#xff0c;blocks[i] 要么是 W 要么是 B &#xff0c;表示第 i 块的颜色。字符 W 和 B 分别表示白色和黑色。 给你一个整数 k &#xff0c;表示想要 连续 黑色块的数目。 每一…

Python数据结构与算法篇(二)-- 数组常见题型与解题技巧

数组和链表代表着计算机最基本的两种存储形式&#xff1a;顺序存储和链式存储&#xff0c;所以他俩可以算是最基本的数据结构。数组是一种基础数据结构&#xff0c;可以用来处理常见的排序和二分搜索问题&#xff0c;典型的处理技巧包括对双指针、滑动窗口等&#xff0c;数组是…

想要将多个视频拼接在一起?如何把三个视频合成一个视频

从事短视频创作行业以来&#xff0c;总是存在着各种挑战。最开始&#xff0c;因为主要负责视频素材的搜集&#xff0c;所以每天虽忙但充实&#xff0c;最近逐步开始学习视频的剪辑工作&#xff0c;可把我难到了&#xff01;想要将多个视频拼接在一起&#xff1f;如何把三个视频…

「 Java 8 新特性 」Stream 中的 map、peek、foreach 方法的区别

「 Java 8 新特性 」Stream 中的 map、peek、foreach 方法的区别 文章参考&#xff1a; 面试官问&#xff1a;Stream 中的 map、peek、foreach 方法的区别&#xff1f;傻傻分不清楚。。 stream中的map,peek,foreach的区别 一、概述 在学习java 8的stream api时&#xff0c;我们…

Java【数据结构入门OJ题33道】——力扣刷题记录1

文章目录第一天存在重复元素最大子数组和第二天两数之和合并两个有序数组第三天两个数组的交集买卖股票最佳时机第四天重塑矩阵杨辉三角第五天有效的数独矩阵置零第六天字符串中第一个唯一字符救赎金第七天判断链表是否有环合并两个有序链表移除链表元素第八天反转链表删除重复…

c++面试技巧-高级应用篇

1.面试官&#xff1a;什么是文件流&#xff1f; 应聘者&#xff1a;写入文件或者从文件读出的数据流称之为文件流。 2.面试官&#xff1a;文件流的类时如何划分的&#xff1f; 应聘者&#xff1a;当C对文件进行处理时&#xff0c;需要包括头文件iostream和fstream。fstream头…

游戏逆向之游戏技能分析

角色的当前技能列表往往都是从系统的技能库中进行筛选而组成的&#xff0c;而这个筛选的过程大多非常的复杂&#xff0c;经过的代码和临时结构体的传递也非常的多&#xff0c;所以在分析技能对象来源的时候常常要将OD和CE配合来使用。下面我们来分析下《天堂2》的技能列表。 首…

拼多多存在多种重大风险

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 中国电子商务市场发展迅速 拼多多&#xff08;PDD&#xff09;目前已经成为了在中国发展最快的电子商务平台之一。随着拼多多、阿里巴巴(BABA)和京东(JD)等市场主要参与者的竞争&#xff0c;中国电子商务正在迅速发展。 由…

安装SceneBuilder时出现Verify that you have access to that directory报错,解决方法之一

1、问题描述 安装SceneBuilder时出现Error writing to file...Verify that you have access to that directory报错&#xff0c;如图 2、解决步骤 1&#xff09;SceneBuilder-19.0.0.msi可从参考教程链接1获取&#xff0c;下载到文件夹D:\LcSceneBuilder\SceneBuilder-19.0.0…