vue实现页面div盒子拖拽排序功能

 更新时间:2021年10月21日 16:21:00   作者:bug爱好者  
本文主要介绍了vue实现页面div盒子拖拽排序功能,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

vue 实现页面div盒子拖拽排序功能前言:目前市面上有很多实现拖拽排序功能的插件和方法,本节不过多累述,只讲一种:css3的transition-group方法

效果图:

1. DOM中使用:

    <transition-group class="container" name="sort">
        <div class="app-item" v-for="app in customApps" :key="app.id" :draggable="true"
            @dragstart="dragstart(app)"
            @dragenter="dragenter(app,$event)"
            @dragend="getDragend(customApps, 'customer', $event)">
            <div>
                <img class="icon_a" v-if="app.logo" :src="app.logo" >
                <div class="ellipsis" >{{app.name}}</div>
            </div>
        </div>
    </transition-group>

2. data中定义数据

    import { APi } from '@/api/enterpriseAPi'
    <script>
        export default {
            data() {
                return {
                    oldData: [],
                    newData: [],
                    customApps: [],
                    dragStartId: '',
                    dragEndId: ''
                }
            }
        }
    </script>

3. methods方法中使用

    dragstart(value) {
        this.oldData = value
        this.dragStartId = value.id
    },
    dragenter(value) {
        this.newData = value
        this.dragEndId = value.id
    },
    getDragend(listData, type) {
            if (this.oldData !== this.newData) {
                let oldIndex = listData.indexOf(this.oldData)
                let newIndex = listData.indexOf(this.newData)
                let newItems = [...listData]
                // 删除之前DOM节点
                newItems.splice(oldIndex, 1)
                // 在拖拽结束目标位置增加新的DOM节点
                newItems.splice(newIndex, 0, this.oldData)
                // 每次拖拽结束后,将拖拽处理完成的数据,赋值原数组,使DOM视图更新,页面显示拖拽动画
                this.customApps = newItems
                // 每次拖拽结束后调用接口时时保存数据
               Api(this.dragStartId, this.dragEndId).then((res) => {})
            }
        },

拖拽完成动画样式:

    <style lang="scss" scoped>
        .sort-move {
            transition: transform 1s;
        }
    </style>

到此这篇关于vue实现页面div盒子拖拽排序功能的文章就介绍到这了,更多相关vue div盒子拖拽排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用canvas实现一个vue弹幕组件功能

    使用canvas实现一个vue弹幕组件功能

    这篇文章主要介绍了使用canvas实现一个vue弹幕组件功能,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-11-11
  • vue项目使用axios封装request请求的过程

    vue项目使用axios封装request请求的过程

    这篇文章主要介绍了vue项目使用axios封装request请求,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • vue项目网站全局置灰功能实现示例详解

    vue项目网站全局置灰功能实现示例详解

    这篇文章主要为大家介绍了vue项目网站全局置灰功能实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例

    Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例

    这篇文章主要介绍了Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例,帮助大家更好的理解和学习vue,感兴趣的朋友可以了解下
    2020-11-11
  • vue项目不能使用localhost访问的解决

    vue项目不能使用localhost访问的解决

    这篇文章主要介绍了vue项目不能使用localhost访问的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Vue监听属性和计算属性

    Vue监听属性和计算属性

    这篇文章主要介绍了Vue监听属性和计算属性,基本用法添加watch属性,值为一个对象。对象的属性名就是要监视的数据,属性值为回调函数,每当这个属性名对应的值发生变化,就会触发该回调函数执行,下面来看详细内容,需要的朋友也可以参考一下
    2021-12-12
  • vue3中unplugin-auto-import自动引入示例代码

    vue3中unplugin-auto-import自动引入示例代码

    unplugin-auto-import 这个插件是为了解决在开发中的导入问题,下面这篇文章主要给大家介绍了关于vue3中unplugin-auto-import自动引入的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • vue中的ref和$refs的使用

    vue中的ref和$refs的使用

    这篇文章主要介绍了vue中的ref和$refs的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • 详解Vue + Vuex 如何使用 vm.$nextTick

    详解Vue + Vuex 如何使用 vm.$nextTick

    这篇文章主要介绍了详解Vue + Vuex 如何使用 vm.$nextTick,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • axios请求二次封装之避免重复发送请求

    axios请求二次封装之避免重复发送请求

    在做vue中大型项目的时候,官方推荐使用axios,但是原生的axios可能对项目的适配不友好,所以在工程开始的来封装一下axios,下面这篇文章主要给大家介绍了关于axios请求二次封装之避免重复发送请求的相关资料,需要的朋友可以参考下
    2022-10-10

最新评论