前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >jQuery ui中sortable draggable droppable的使用

jQuery ui中sortable draggable droppable的使用

作者头像
Daotin
发布于 2020-07-25 10:37:44
发布于 2020-07-25 10:37:44
2.4K00
代码可运行
举报
运行总次数:0
代码可运行

最近工作中用到了jQuery UI中排序和拖拽功能,花了大概一天的时间,搞清楚了大概的参数配置,以及遇到的一些问题,总结如下。

sortable

简单的配置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$('#subs-box').sortable({
    axis: 'y',
    cursor: 'ns-resize',
    placeholder: "ui-state-highlight", // 排序过程中占位符的class样式设置
    forcePlaceholderSize: true, // 强迫占位符有一个尺寸大小。
    handle:'.sort-at', // 在对象内指定的元素上开始拖动,而不是整个元素都可以拖动
    distance: 10,
    opacity: 0.8,
    containment:'parent', // 元素可以拖动排序的范围
    // helper: 'clone', // 是否clone一个元素进行拖动
    items: '.subject',  // 指定哪些元素可以排序
    stop: function (e, ui) {
        // 排序后元素的顺序(前提每个元素都需要有id属性)
        let newSubArr = $("#subs-box").sortable('toArray'); 
        console.log(newSubArr);
    },
}).disableSelection(); // 拖动时禁止选中元素

还有一些排序时候的事件和方法,都在参考链接的文档里面。

draggable

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dragInit() {
    let me = this;
    let selector = '.ptype-'+me.selectedSubType;
    
    // 题目拖动
    $('#subs-box .subject').draggable({
        // appendTo: ".ptype-item.radio", // 当进行拖动时,拖动组件助手应该被添加到的元素。
        // connectToSortable: "#subs-box", // 允许draggable被拖拽到指定的sortables中。
        
        // 拖动时使用的是clone的元素。如果值设置为"clone", 那么该元素将会被复制,并且被复制的元素将被拖动。
        // 之所以不使用 helper: 'clone', 是因为clone的元素没有样式,所以我们需要自定义样式,所以使用了自定义函数。
        helper: function() {
            let helper = $(this).clone();
            helper.css({'width': $(this).width(), 'background': '#fff'}); // 设置clone元素的样式
            return helper;
        },
        handle: ".drag-at", // 指定在特定的元素上触发鼠标按下事件时,才可以拖动。
        cursor: 'move',
        // containment: '.sub-box', // 可以限制draggable只能在指定的元素或区域的边界以内进行拖动。
        revert: 'invalid', // 如果设置为true,当拖动停止时,元素位置将被重置。
        revertDuration: 200,
        distance: 10,
        opacity: 0.8,
        zIndex: 10000,
        refreshPositions: true, // 所有的可拖动位置在每次鼠标移动时都会被计算。(设置该值使得drop的位置更加精确)
        start(event, ui) {
            $(selector).addClass('allow'); // 元素拖拽的时候,设置可放置元素的样式,示意你可以拖拽到那里去
            // 开始拖拽的时候,初始化drop
            me.$nextTick(()=>{
                me.dropInit();
            });
        },
        stop(event, ui) {
            $(selector).removeClass('allow');
            // 拖拽停止的时候,销毁drop函数。
            me.dropDestory();
        }
    }).disableSelection();

},

注意事项: 每次dropInit函数初始化后,如果需要再次初始化,需要先销毁之前的放置对象。否则第一次初始化后,比如某个地方A可以放置拖拽的元素,但是第二次初始化后,地方A就不可以放置了。然而实际上,如果你不把第一次初始化的dropInit函数销毁掉,地方A在第二次初始化后还是可以放置的。所以需要在拖拽停止的时候,销毁上一次的dropInit对象。

dropable

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dropInit() {
    let me = this;
    // 题目放置(设置题目根据不同类型可以放置不同的分页)
    // selector是可变的,也就是每次可拖拽元素可放置的元素是不同的。所以需要每次拖拽后清除之前dropInit对象。
    let selector = '.ptype-'+me.selectedSubType;

    $(selector).droppable({
        // accept: selector,
        // accept: function(d) {
        //     if($(this).hasClass('ptype'+me.selectedSubType)){
        //         console.log('d>>>>>>',$(this)[0]);
        //         return true;
        //     }
        // },
        // hoverClass: "drop-hover",
        tolerance: 'pointer', // 指定使用那种模式来测试一个拖动(draggable)元素"经过"一个放置(droppable)对象
        drop: function( event, ui ) {
            // $(this) 填充到的元素
            // ui.draggable.context 填充的元素
            let dragId = $(ui.draggable.context).attr('id');
            let dropId = $(this).attr('id');

            // 移动到新的分页
            if(dropId === 'newpage') {
                me.moveAddPage(dragId);
            } else { // 移动题目到另一个分页
                if(dropId === me.selectedPage.id) { // 移动到自己的分组,不做处理

                } else {
                    let index = me.selectedPage.subs.indexOf(dragId);
                    if(index > -1) {
                        me.selectedPage.subs.splice(index, 1);

                        me.pages.forEach(page=>{
                            if(page.id === dropId) {
                                page.subs.push(dragId);
                            }
                        });

                        me.$openNotice('移动成功');
                        
                        // 其他操作...
                    }
                }
            }

            $(this).removeClass('allow-hover');
        },
        over(event, ui) {
            $(this).addClass('allow-hover'); // 当拖拽元素进入可放元素时,可放置元素本身的样式
        },
        out() {
            $(this).removeClass('allow-hover'); // 设置拖拽元素离开可放元素时,清除可放置元素本身的样式
        }
    });
},
dropDestory() {
    let selector = '.ptype-'+me.selectedSubType;
    $(selector).droppable("destroy");
},

参考链接

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue.Draggable 文档总结
Vue.Draggable学习总结 Draggable为基于Sortable.js的vue组件,用以实现拖拽功能。
莫问今朝
2018/12/06
9.9K0
【JS】1724- 重学 JavaScript API - Drag and Drop API
❝前期回顾: 1. Page Visibility API 2. Broadcast Channel API 3. Beacon API 4. Resize Observer API 5. Clipboard API 6. Fetch API 7. Performance API 8. WebStorage API 9. WebSockets API 10. Fullscreen API 11. Geolocation API ❞
pingan8787
2023/09/01
4480
【JS】1724- 重学 JavaScript API - Drag and Drop API
treetable php,jQuery树型表格插件jQuery treetable
插件描述:jQuery-treetable是一个jQuery插件。有了这个插件,你可以在一个HTML表格中显示树,即目录结构或嵌套列表。它使你的HTML文件干净的,展现出树状表格插件,你只需要每一行数据添加特定的数据属性。
全栈程序员站长
2022/08/18
2K0
treetable php,jQuery树型表格插件jQuery treetable
React 拖拽排序组件 Draggable Sortable
拖拽排序(Draggable Sortable)是现代Web应用中常见的交互功能之一,尤其是在需要用户对列表项进行顺序调整的场景下。React作为流行的前端框架,提供了丰富的工具和库来实现这一功能。本文将由浅入深地介绍React中拖拽排序组件的常见问题、易错点及如何避免,并通过代码案例进行解释。
Jimaks
2025/01/18
2840
使用jQuery UI的draggable和droppable完成拖拽功能--介绍
第一部分--拖拽介绍 在https://code.csdn.net/2013ossurvey中最后一个开源项目就是zTree,一方面是因为自己看到有项目中使用了zTree,而已大家表示还不错。另外一方面,自己需要实现一个zTree不支持的复杂逻辑的拖拽功能。总体来说,我要实现的是一个可以拖拽的树形列表。当然最新版zTree也支持多课树之间的数据交互。当然一般的企业开发或者web开发中,使用到2个或3个数就足够了。太多了树形结构对于用户来说,也非常复杂。个人推荐不是非常复杂的需求都可以考虑使用zTree,因为
八哥
2018/01/18
2.3K0
使用jQuery UI的draggable和droppable完成拖拽功能--介绍
前端里的拖拖拽拽了解一下?
拖拽交互常见于各种前端编辑器里,而“编辑器”是一个集成前端技术能力的综合性工程,其中就会涉及到各种形式的拖拽交互,因为“拖拽”是提升用户体验的重要交互方式,所以需要对拖拽的交互效果做各种定制化,作为开发者理应熟练掌握“拖拽”的使用!
小东同学
2022/07/29
5.2K1
前端里的拖拖拽拽了解一下?
(长文预警) 你还在烦工作中碰到的拖拽问题?一个框架jiejue
Sortable —是一个JavaScript库,用于在现代浏览器和触摸设备上对拖放列表进行重新排序。无需jQuery。支持Meteor,AngularJS,React,Polymer,Vue,Ember,Knockout和任何CSS库,例如Bootstrap
公众号---人生代码
2020/08/04
7.3K0
(长文预警) 你还在烦工作中碰到的拖拽问题?一个框架jiejue
《刚刚问世》系列初窥篇-Java+Playwright自动化测试-20- 操作鼠标拖拽 - 上篇(详细教程)
本文主要介绍两个在测试过程中可能会用到的功能:在selenium中宏哥介绍了Actions类中的拖拽操作和Actions类中的划取字段操作。例如:需要在一堆log字符中随机划取一段文字,然后右键选择摘取功能。playwright同样可以实现元素的拖拽和释放的操作。
北京-宏哥
2025/01/26
1450
draggable的用法_draggable
通过前面几节学习,大家应该都知道了,一个div对象是可以通过拖拉来改变大小,也可以通过拖动来改变其位置的。如何改变大小已经讲解过了,那么怎么实现拖动改变位置呢?现在就开始讲解如何实现拖动 — Draggable。
全栈程序员站长
2022/09/20
1.1K0
jQuery基础(五)一Ajax应用与常用插件-imooc
本章介绍jQuery中支持Ajax的各种方法和函数,阐述通过Ajax交互的过程与常用方法,重点介绍核心方法$.ajax()的运用技巧。通过ajax全局事件的介绍,进一步巩固前面所学基础内容。
chenchenchen
2023/01/30
16.9K0
【实战技巧】VUE3.0实现简易的可拖放列表排序
---- 项目地址 项目地址👉👉点击进入,可以直接设置为浏览器主页或者桌面快捷方式进行使用,本人在用,长期维护。 源码地址 完全开源,大家可以随意研究,二次开发。当然还是十分欢迎大家点个Star⭐⭐⭐ 👉👉源码链接(gitee)       👉👉源码链接(github) 需求介绍 上面是我一个开源的用来收藏网站的小项目,但是现阶段只能一个一个的按顺序添加网址,这样就产生了一个问题,那就是后添加的一定在下面,而我如果新添加了一个比较常用的网站,而列表
一尾流莺
2022/12/10
2.2K0
【实战技巧】VUE3.0实现简易的可拖放列表排序
《最新出炉》系列初窥篇-Python+Playwright自动化测试-18-处理鼠标拖拽-上篇
本文主要介绍两个在测试过程中可能会用到的功能:在selenium中宏哥介绍了Actions类中的拖拽操作和Actions类中的划取字段操作。例如:需要在一堆log字符中随机划取一段文字,然后右键选择摘取功能。playwright同样可以实现元素的拖拽和释放的操作。
北京-宏哥
2023/10/07
10.7K1
JavaScript学习笔记(五)——Ajax
jQuery插件就是开发爱好者自己利用jQuery制作的特效,然后打包成js文件,发布到网上供大家使用的脚本集合。
wsuo
2020/07/31
2.1K0
使用jQuery Draggable和Droppable实现拖拽功能
上篇博客中已经介绍了web开发中基本拖放原理,现在给出需要完成的功能。最后运行的效果如下图所示: 主要功能需求说明: 1.左侧的元素结构最后会通过Ajax call服务器的数据来生成,能支持多级元素。
八哥
2018/01/18
3K0
使用jQuery Draggable和Droppable实现拖拽功能
使用 React-DnD 打造简易低代码平台
2016年起,低代码概念开始在国内兴起,当年该行业总共有 10 起融资事件,之后低代码行业融资笔数整体呈上升趋势,并在2020年增长至14起,其中亿元以上融资有13起。
狂奔滴小马
2022/01/20
6.3K0
使用 React-DnD 打造简易低代码平台
JavaScript进阶之实现拖拽
如果不设置这段代码,会发生奇怪的现象,这是因为浏览器有自己的对图片和一些其他元素的拖放处理,会在我们拖放时自动运行,这与我们的拖放处理产生了冲突。
落落落洛克
2021/01/08
2.8K0
JavaScript进阶之实现拖拽
基于jsplumb构建的流程设计器
最近在准备开发工作流引擎相关模块,完成表结构设计后开始着手流程设计器的技术选型,调研了众多开源项目后决定基于jsplumb.js开源库进行自研开发,保证定制化的便捷性,相关效果图及项目地址如下
code2roc
2023/07/19
5430
基于jsplumb构建的流程设计器
jQuery插件jQueryUI
jQuery UI是一个功能丰富的jQuery插件集合,提供了一系列用户界面组件和效果,可用于创建交互性强、视觉效果丰富的网页应用程序。
堕落飞鸟
2023/05/18
3.1K0
基于jQuery UI CSS Framework开发Widget
jQuery UI CSS Framework是jQuery UI中的一个样式框架,可以利用jQuery Theme roller 来生成自己想要的css样式效果。我们可以利用jQuery UI的一些框架来开发出基于jQuery UI CSS Framework效果的插件来。 jQuery UI中两大核心的css文件是ui.core.css和ui.theme.css.这两个css样式贯穿整个基于jQuery ui的界面上,并且可以通过jQuery ui ThemeRoller来生成自己的样式。 .ui-he
葡萄城控件
2018/01/10
1.8K0
WEB入门之十九 UI
jQuery本身注重于​​后台​​,没有漂亮的界面,而jQuery UI的出现则补充了前者的不足,它提供了诸多的组件和华丽的界面,使用方便、灵活。
张哥编程
2024/12/17
4020
相关推荐
Vue.Draggable 文档总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验