63.实现一个拖拽排序

//为了方便借助vue和jquery

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>拖拽排序</title>
    <style>
        ul,
        li {
            list-style: none;
            padding: 0;
            margin: 0;
        }

        ul {
            margin: 0 auto;
            width: 200px;
        }

        .item {
            font-size: 15px;
            border: 1px solid #eee;
            border-radius: 4px;
            padding: 8px 10px;
            margin: 15px 0;

        }

        .item.before {
            margin-top: 45px;
            transition: margin-top 0.15s ease-in;
        }

        .item.after {
            margin-bottom: 45px;
            transition: margin-bottom 0.15s ease-in;
        }
    </style>
</head>

<body>
    <div id="app">
        <ul class="items">
            <li class="item" v-for="i in 5" draggable="true" @dragstart="dragstart($event)">{{i}}</li>
        </ul>
    </div>
    <script src="./libs/jquery.min.js"></script>
    <script src="./libs/vue.js"></script>

    <script>
        new Vue({
            el: ‘#app‘,
            data: {
            },
            methods: {
                dragstart(e) {
                    let dragTarget = $(e.currentTarget);
                    let overTarget = null;
                    let allItems = dragTarget.parent().children(‘.item‘);
                    let x = null, y = null;
                    let overTargetSize = {
                        width: null,
                        height: null,
                    }
                    for (let i = 0; i < allItems.length; i++) {
                        const el = allItems[i];
                        el.ondragenter = function (evt) {
                            overTarget = $(evt.target)
                            return true;
                        }
                        el.ondragover = function (evt) {
                            x = evt.offsetX;
                            y = evt.offsetY;
                            // overTargetSize.width = evt.target.offsetWidth;
                            // overTargetSize.height = evt.target.offsetHeight;
                            $(allItems).removeClass(‘after‘).removeClass(‘before‘)
                            if (y > 19) {
                                $(evt.target).addClass(‘after‘);
                            } else if (y <= 19) {
                                $(evt.target).addClass(‘before‘);
                            }
                        }
                        el.ondragend = function (evt) {

                            if (y > 19) {
                                $(overTarget).after(dragTarget)
                            } else if (y <= 19) {
                                $(overTarget).before(dragTarget)
                            }
                            $(allItems).removeClass(‘after‘).removeClass(‘before‘);
                            x = null, y = null;
                            return false;
                        }

                    }
                },
            }
        })
    </script>
</body>

</html>

  

原文地址:https://www.cnblogs.com/famLiu/p/10872313.html

时间: 2024-08-02 01:12:31

63.实现一个拖拽排序的相关文章

一款优雅的小程序拖拽排序组件实现

前言 最近po主写小程序过程中遇到一个拖拽排序需求. 上网一顿搜索未果, 遂自行实现. 这次就不上效果图了, 直接扫码感受吧. 灵感 首先由于并没有啥现成的小程序案例给我参考. 所以有点无从下手, 那就找个h5的拖拽实现参考参考. 于是在jquery插件网看了几个拖拽排序实现后基本确定了思路. 大概就是用 transform 做变换. 是的, 灵感这种东西就是借鉴过来的-- 确定需求 要能拖拽, 毕竟是拖拽排序嘛, 拖拽肯定是第一位. 要能排序, 先有拖拽后有天 -- 跑偏了, 拖拽完了肯定是要

【原创】js实现一个可随意拖拽排序的菜单导航栏

1.想做这个效果的原因主要是用在UC上看新闻发现他们的导航菜单很有趣.无聊的时候在哪划着玩了很久.所以就干脆自己写一个.原效果如下 2.整体效果如下,在已推荐和未添加里面每个小方块可以触摸移动位置互换.未添加和已添加里面的小方块位置可以拖放. 3.结构分析.整体结构用红线框标出.可以分为三个部分.关注底部拖拽部分.一个div里面嵌套两个div.定位关系如图.本次教程之作一个拖拽框 1.好了,基本情况已经分析清楚先实现页面样式. <div class="wrap"> <

最近写的一个控件——Well Swipe 拖拽排序实现

如图: >删除过渡动画 >拖拽排序

jquery -- 拖拽排序分析

今天应一个朋友的委托,研究一下拖拽排序,我记得我上次写拖拽排序,因为方法太死板,效果我一直不是很满意,一直想再从写一个,一直没机会(懒),这次因为公司部门变动所以有了一些时间(无聊)来写,本来准备使用Vue写,奈何功夫不到家在自定义指令的时候,问题卡住了,研究了一段时间之后,还是决定放弃,研究一下Vue再来写过,所以本次还是用了Jquery来写. 直接上代码 这是CSS部分 1 *{/*Css*/ 2 margin: 0px; 3 padding: 0px; 4 list-style: none

使用knockout-sortable实现对自定义菜单的拖拽排序

在开始之前,照例,我们先看效果和功能实现. 关于自定义菜单的实现,这里就不多说了,需要了解的请访问:http://www.cnblogs.com/codelove/p/4838766.html 这里需要说明的是排序的实现. 我们先来看看关键的页面代码: <div class="row"> <div class="col-lg-12 full-width" id="leftMenus"> <div class=&quo

RecyclerView实现条目Item拖拽排序与滑动删除

RecyclerView实现条目Item拖拽排序与滑动删除 版权声明:转载请注明本文转自严振杰的博客: http://blog.csdn.net/yanzhenjie1003 效果演示 直播视频讲解:[http://pan.baidu.com/s/1miEOtwG1 推荐大家结合我直播的视频看效果更好. 本博客源码传送门. 需求和技术分析 RecyclerView Item拖拽排序::长按RecyclerView的Item或者触摸Item的某个按钮. RecyclerView Item滑动删除:

自定义控件——可拖拽排序的ListView

前言 最经研究了一下拖拽排序的ListView,跟酷狗里的播放列表排序一样,但因为要添加自己特有的功能,所以研究了好长时间.一开始接触的是GitHub的开源项目--DragSortListView,实现的效果和流畅度都很棒.想根据他的代码自己写一个,但代码太多了,实现的好复杂,看别人的代码你懂的了,就去尝试寻找其他办法.最后还是找到了更简单的实现方法,虽然跟开源项目比要差一点,但对我来说可以了,最重要的是完全可以自定义. 实现的效果如下: 主要问题 如何根据触摸的位置确定是哪个条目? ListV

zTree的拖拽排序

ztree本身是可以支持拖拽的,但是却没有找到明确的支持拖拽的排序,也就是说,在拖拽过程中,需要自定义维护拖拽后的顺序并保存至后台. 在这样一个比较常规的需求情况下,网上也有朋友给出了一些解决方案,比如自定义一个tree传入ztree, 不使用ztree的识别字段,而是使用自定义字段,然后当ztree的节点发生变化时,维护这些自定义字段,从而使得整个tree是有序的,并支持拖拽. 上边的这个解决方案,有一个问题,就是使用javascript构造的tree,传入ztree之后,会发生堆栈溢出,初步

ListView列表拖拽排序

ListView列表拖拽排序可以参考Android源代码下的Music播放列表,他是可以拖拽的,源码在[packages/apps/Music下的TouchInterceptor.java下]. 首先是搭建框架,此处的ListView列表类似于QQ消息列表,当然数据只是模拟,为了简单起见,没有把ListView的条目的所有的属性全部写上.首先是消息的实体类Msg.java: package me.chenfuduo.mymsgdrag; public class Msg { private in