iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue实现图片拖动排序
  • 219
分享到

vue实现图片拖动排序

2024-04-02 19:04:59 219人浏览 独家记忆
摘要

本文实例为大家分享了Vue实现图片拖动排序的具体代码,供大家参考,具体内容如下 原理:现有一个图片的列表,拖动其中一个图片(触发dragstart),当拖动的图片移动到其他图片的位置

本文实例为大家分享了Vue实现图片拖动排序的具体代码,供大家参考,具体内容如下

原理:现有一个图片的列表,拖动其中一个图片(触发dragstart),当拖动的图片移动到其他图片的位置(触发draGover),则将拖动的图片从原位置移动到该位置(触发dragend)。

dragstart:当用户开始拖动一个元素或者一个选择文本的时候 dragstart 事件就会触发。

dragover:当元素或者选择的文本被拖拽到一个有效的放置目标上时,触发 dragover 事件(每几百毫秒触发一次)。

dragend:拖放事件在拖放操作结束时触发。(我们这里可以不用)

(1)图片列表HTML结构。给需要拖动的元素添加属性draggable。这里要注意:模板for循环的key值需要唯一,因为vue在渲染的时候会采用就地复用的方式,如果key值唯一,重新排序后渲染的列表节点不会复用,这样可以避免一些问题。(我们在插入的时候会根据序号向数组中插入某个数据)


 <ul class="drag-container" 
            @dragstart="onDragStart"
            @dragover="onDragOver"
            @dragend="onDragEnd"
            ref="imgList">
            <li 
            v-for="(item,idx) in list" 
            :key='item.path'
            class="drag-list" 
            draggable="true" 
            >
                <img :src="item.path" alt="" />
            </li>
</ul>

(2)事件: dragstart、dragover绑定事件onDragStart、onDragOver

onDragStart:识别需要拖动的元素,保存到状态中,供拖动过程中dragover的绑定事件使用。 


onDragStart(event){
            console.log("start");
            this.draging = event.target;
        }, 

onDragOver:拖动过程中处于有效目标上的时候触发事件,识别的是目标元素,而不是拖动的元素。首先识别目标元素是否是我们需要的目标元素,我们例子判断是否是li元素,并判断图片是否与拖动的相同,则进行插入拖动元素的操作。
识别拖动元素与目标元素的位置序号,将拖动元素插入到目标元素前,再将拖动元素原位置的数据删除,在vue中,则只需要进行数据操作即可。


onDragOver(event){
            console.log('drag move')
            event.preventDefault();
            let target = event.target;
                //因为dragover会发生在ul上,所以要判断是不是li
            if (target.nodeName === "LI" && 
                target.childNodes[0].src !== this.draging.childNodes[0].src) {
                let idx_drag = this._index(this.draging)
                let idx_target = this._index(target)
                let _list = this.list
                let _drag = this.list[idx_drag]
                if(idx_drag>idx_target){
                    _list.splice(idx_target,0,_list[idx_drag]);
                    _list.splice(idx_drag+1,1)
                }else{
                    _list.splice(idx_target+1,0,_list[idx_drag]);
                    _list.splice(idx_drag,1)
                }
                console.log(_list[0].path)
                this.$emit("change", _list)
            }
        },

完整代码如下:


<template>
    <div class="image-list" v-if="list && list.length">
        <ul class="drag-container" 
        @dragstart="onDragStart"
        @dragover="onDragOver"
        @dragend="onDragEnd"
        ref="imgList">
            <li 
            v-for="(item,idx) in list" 
            :key='item.path'
            class="drag-list" 
            draggable="true" 
            >
                <img :src="item.path" alt="" />
            </li>
        </ul>
    </div>
</template>
<script>
export default {
    name:"drag-image-list",
    props:{
        list: Array,
    },
    data(){
        return {
            draging:null,//被拖拽的对象
        }
    },
    methods:{
        onDragStart(event){
            console.log("start");
            this.draging = event.target;
        },   
        onDragOver(event){
            console.log('drag move')
            event.preventDefault();
            let target = event.target;
                //因为dragover会发生在ul上,所以要判断是不是li
            if (target.nodeName === "LI" && target.childNodes[0].src !== this.draging.childNodes[0].src) {
                let idx_drag = this._index(this.draging)
                let idx_target = this._index(target)
                let _list = this.list
                let _drag = this.list[idx_drag]
                if(idx_drag>idx_target){
                    _list.splice(idx_target,0,_list[idx_drag]);
                    _list.splice(idx_drag+1,1)
                }else{
                    _list.splice(idx_target+1,0,_list[idx_drag]);
                    _list.splice(idx_drag,1)
                }
                console.log(_list[0].path)
            }
        },
        onDragEnd(event){
            console.log('end event')
        },
        _index(el){
            var index = 0;
            if (!el || !el.parentNode) {
                return -1;
            }
            while (el && (el = el.previousElementSibling)) {
                index++;
            }
            return index;
        },
    }
}
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: vue实现图片拖动排序

本文链接: https://www.lsjlt.com/news/155094.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue实现图片拖动排序
    本文实例为大家分享了vue实现图片拖动排序的具体代码,供大家参考,具体内容如下 原理:现有一个图片的列表,拖动其中一个图片(触发dragstart),当拖动的图片移动到其他图片的位置...
    99+
    2024-04-02
  • vue如何实现拖动图片进行排序Vue.Draggable
    目录拖动图片进行排序Vue.Draggable下面是实现过程 项目draggable拖拽移动图片顺序第一步、导入第二步、组件引入第三步、定义组件第四步、页面中使用拖动图片进...
    99+
    2024-04-02
  • vue怎么实现拖动图片进行排序Vue.Draggable
    这篇文章主要介绍了vue怎么实现拖动图片进行排序Vue.Draggable的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue怎么实现拖动图片进行排序Vue.Draggable文章都会有所收获,下面我们一起来看...
    99+
    2023-06-30
  • 微信小程序图片上传组件实现图片拖拽排序
    目录引言首先来看效果组件设计使用方式总结引言 图片上传组件是一个组件库目前来看必不可少的功能了。笔者近日给自己开源的toy工具库也添加了这一功能。相比原生和大部分组件库来说,它不仅支...
    99+
    2024-04-02
  • 微信小程序怎么实现图片拖拽排序
    这篇文章主要介绍“微信小程序怎么实现图片拖拽排序”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么实现图片拖拽排序”文章能帮助大家解决问题。首先来看效果对于组件内部来说。笔者提供了一个参数...
    99+
    2023-06-29
  • 使用element+vuedraggable实现图片上传拖拽排序
    本文实例为大家分享了用element+vuedraggable实现图片上传拖拽排序的具体代码,供大家参考,具体内容如下 <template>     <div cl...
    99+
    2024-04-02
  • vue实现拖拽排序效果
    本文实例为大家分享了vue实现拖拽排序效果的具体代码,供大家参考,具体内容如下 效果预览 组件 drag.vue <template>   <Transition...
    99+
    2024-04-02
  • vue实现图片拖拽功能
    本文实例为大家分享了vue实现图片拖拽功能的具体代码,供大家参考,具体内容如下 1、主要涉及到的元素知识,示意图: 2、js代码部分: directives: { dr...
    99+
    2024-04-02
  • 怎么使用element+vuedraggable实现图片上传拖拽排序
    这篇文章主要介绍了怎么使用element+vuedraggable实现图片上传拖拽排序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用element+vuedraggable实现图片上传拖拽排序文章都会有...
    99+
    2023-06-29
  • Vue中使用elementui与Sortable.js实现列表拖动排序
    本文实例为大家分享了使用elementui与Sortable.js实现列表拖动排序的具体代码,供大家参考,具体内容如下 一、安装使用Sortable.js 1、安装 cnpm ins...
    99+
    2024-04-02
  • jquery实现表格行拖动排序
    本文实例为大家分享了jquery实现表格行拖动排序的具体代码,供大家参考,具体内容如下 引入JS <script src="jquery.min.js"></scr...
    99+
    2024-04-02
  • vue怎么实现图片拖拽功能
    本篇内容介绍了“vue怎么实现图片拖拽功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!主要涉及到的元素知识,示意图:js代码部分:dire...
    99+
    2023-06-25
  • 小程序拖动区域实现排序效果
    小程序拖动区域进行排序的具体代码,供大家参考,具体内容如下 需求:点击蓝色圆圈图标,所有区域进行展开或者收起切换,当所有区域收起时,点击区域头部文字或者空白处可进行拖动排序,效果如下...
    99+
    2024-04-02
  • jquery+css实现移动端元素拖动排序
    本文实例为大家分享了jquery+css实现移动端元素拖动排序的具体代码,供大家参考,具体内容如下 1.近期需要实现一个选项进行拖动排序的页面,页面如下: 2.JSP页面代码:...
    99+
    2024-04-02
  • vue实现拖拽或点击上传图片
    本文实例为大家分享了vue实现拖拽或点击上传图片的具体代码,供大家参考,具体内容如下 一、预览图 二、实现 点击上传思路:将input的type设置为“file”类型即可上传文件...
    99+
    2024-04-02
  • jquery如何实现表格行拖动排序
    这篇文章主要介绍了jquery如何实现表格行拖动排序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下引入JS<script src="jq...
    99+
    2023-06-29
  • Vue实用功能之实现拖拽元素、列表拖拽排序
    目录Vue实现拖拽元素、列表拖拽排序组件使用补充:排序动画总结Vue实现拖拽元素、列表拖拽排序 需求:    1、左右两个容器,左边和右边的元素可以拖动...
    99+
    2022-11-13
    vue列表拖拽排序 vue实现拖拽功能 vue实现组件拖拽
  • vue怎么实现列表拖拽排序效果
    这篇文章主要介绍“vue怎么实现列表拖拽排序效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue怎么实现列表拖拽排序效果”文章能帮助大家解决问题。效果如下:<template>&nb...
    99+
    2023-06-29
  • Vue怎么实现拖动截图功能
    本篇内容介绍了“Vue怎么实现拖动截图功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、安装html2canvas、vue-croppe...
    99+
    2023-06-20
  • 实现vue图片缩放方式-拖拽组件
    目录实现效果如下父组件如下子组件imgbox.vue如下实现效果如下 这几天做了个没做过的组件,以此记录下,需要的效果是在一个dom内,缩放拖拽图片。 封装的子组件imgbox.V...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作