位置: IT常识 - 正文

sortablejs的使用实践(sortable js)

编辑:rootadmin
sortablejs的使用实践 文章目录说明基本使用1. 素颜版2. 设置可被拖起的项的样式3. 设置被选中的项的样式4. 设置拖拽时跟随的阴影的样式5. 设置正在被拖拽中的样式6. 设置当前列表容器内是否可以进行拖拽排序7. 设置拖拽的手柄8. 多个列表之间的拖拽 [group]示例1 [name]示例2 [put]示例3 [put function]示例4 [pull]9. 多个拖拽组嵌套学习来源

推荐整理分享sortablejs的使用实践(sortable js),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:sorttablejs 文档,sortable js,sort()js,sorttablejs 文档,sortablejs react,sortablejs原理,sortablejs原理,sortable js,内容如对您有帮助,希望把文章链接给更多的朋友!

sortablejs 是一个强大的JavaScript拖拽库。

说明

在Angular项目中使用sortablejs拖拽库时,我们需要同时使用 ngx-sortablejs 这个二次封装的Angular拖拽库,它封装了 sortablejs 指令 ,并支持以下参数:

@Directive({ selector: "[sortablejs]",})export class SortablejsDirective { // 拖拽列表的数据项 @Input() sortablejs: SortableData; // array or a FormArray // 指定拖拽的容器 @Input() sortablejsContainer: string; // 拖拽相关的配置项 @Input() sortablejsOptions: Options; @Input() sortablejsCloneFunction: (item: any) => any; // 在一个拖拽实例被创建并初始化好之后,会立即emit出这个拖拽实例。 @Output() sortablejsInit = new EventEmitter<Sortable>()}基本使用1. 素颜版<div class="container" [sortablejs]="items" [sortablejsOptions]="draggableOptions"> <div *ngFor="let item of items" class="item"> {{ item.name }} </div></div>import { SortableOptions } from 'sortablejs';draggableOptions: SortableOptions = {};

2. 设置可被拖起的项的样式<div class="container" [sortablejs]="items" [sortablejsOptions]="draggableOptions"> <ng-container *ngFor="let item of items"> <div *ngIf="item.id !== '002'" class="item sortable-item"> {{ item.name }} </div> <div *ngIf="item.id === '002'" class="item"> {{ item.name }},这个项不可被拖起 </div> </ng-container></div>draggableOptions: SortableOptions = { // 允许拖拽的项的类名,只有这个类名的项才可以拖起 draggable: '.sortable-item', };.sortable-item { background-color: antiquewhite;}

3. 设置被选中的项的样式draggableOptions: SortableOptions = { // 拖拽项被选中时的类名 chosenClass: 'sortable-chosen', };.sortable-chosen { background-color: lightblue;}

4. 设置拖拽时跟随的阴影的样式draggableOptions: SortableOptions = { // 项被拖拽的过程中跟随它的那个影子的类名 ghostClass: 'sortable-ghost', };.sortable-ghost { background-color: lightgray;}

5. 设置正在被拖拽中的样式draggableOptions: SortableOptions = { dragClass: 'sortable-drag',};.sortable-drag { background-color: orange; border-bottom: none;}

6. 设置当前列表容器内是否可以进行拖拽排序draggableOptions2: SortableOptions = { sort: false, // 值为false,组内不可拖拽排序 group: { name: 'china', pull: true, // 组内的项可以被拖出去到其它组 }};7. 设置拖拽的手柄<div class="container" [sortablejs]="items" [sortablejsOptions]="draggableOptions"> <div *ngFor="let item of items" class="item sortable-item"> <div class="sortable-handle">手柄</div> {{ item.name }} </div></div>draggableOptions: SortableOptions = { // draggable: '.sortable-item', // 可拖拽项的手柄的类名,只有按住手柄才能拖起。(如果将上面那行注释放开,那就不只有手柄能拖拽了) handle: '.sortable-handle',};sortablejs的使用实践(sortable js)

8. 多个列表之间的拖拽 [group]示例1 [name]

配置项的group属性里的name相同的两个拖拽组之间的项可以互相拖拽。

// 甲组draggableOptions1: SortableOptions = { group: { name: 'wmm', }};// 乙组draggableOptions2: SortableOptions = { group: { name: 'wmm', }};

示例2 [put]

多个拖拽组,name不同时,可以通过 put 指定其它组只有满足条件的项可以拖进当前列表。

// 甲组draggableOptions1: SortableOptions = { group: { name: 'wmm', }};// 乙组draggableOptions2: SortableOptions = { group: { name: 'china', }};// 丙组draggableOptions3: SortableOptions = { group: { name: 'happy', /** * put字段的值可以指定为以下四种: * true: 可以将其它指定组的项拖进本组 * false: 其它任何组的项都不能拖到本组 * ['wmm', 'china']: 只能将甲组和乙组的项拖到本组。['china']: 只能将乙组的项拖到本组。 * function: 自定义函数,可进行复杂逻辑判断,根据返回true或false,来判断当前被拖拽的项是否能往本组里放。 */ put: ['china'], // 指定甲组和乙组的项可以往丙组里面放 }};

示例3 [put function]

多个拖拽组,可以通过指定 put 的值为function,在function里进行复杂判断来确定被拖拽的项是否可以被拖进本组。

<div class="container2" [sortablejs]="items2" [sortablejsOptions]="draggableOptions2"> 乙组 <div *ngFor="let item of items2" class="item sortable-item2" [ngClass]="{ 'can-move-to-happy': item.name.indexOf('乙 5') === -1 }" > {{ item.name }} {{ item.name.indexOf("乙 5") !== -1 ? "--该项不可用被拖进丙组" : "" }} </div></div>// 乙组draggableOptions2: SortableOptions = { group: { name: 'china', }};// 丙组draggableOptions3: SortableOptions = { group: { name: 'happy', /** * put的值可以是一个自定义function,可进行复杂逻辑判断。 * 根据返回true或false,来判断当前被拖拽的项是否能往本组里放。 */ put: ( to: Sortable, from: Sortable, dragEl: HTMLElement, event: SortableEvent ) => { // 判断:只有带有样式类名为'can-move-to-happy'的项,才能被拖进本组。 return dragEl?.classList.contains('can-move-to-happy'); }, }};

示例4 [pull]draggableOptions2: SortableOptions = { group: { name: 'china', /** * 从一个列表中拖动到另一个列表时,是否允许拖动。 默认值:true。 * true:允许拖动 * false:不允许拖动 * 'clone':克隆一个副本拖到其它组 * function:自定义函数,可进行复杂逻辑判断,根据返回true或false,来判断被拖拽的项是否可从本组移出去。 */ pull: ( to: Sortable, from: Sortable, dragEl: HTMLElement, event: SortableEvent ) => { return !dragEl?.classList.contains('can-move-to-happy'); }, },};

此示例就不截图了。

9. 多个拖拽组嵌套<div class="grandpa-container" [sortablejs]="treeItems" [sortablejsOptions]="draggableOptions"> <div *ngFor="let grandpa of treeItems" class="item" [id]="grandpa.id" [ngClass]="{ a: grandpa.name.indexOf('甲') !== -1, b: grandpa.name.indexOf('乙') !== -1, c: grandpa.name.indexOf('丙') !== -1 }" > {{ grandpa?.name }} <ng-container *ngIf="grandpa?.children?.length"> <div class="father-container" [id]="grandpa.id" [sortablejs]="grandpa?.children" [sortablejsOptions]="draggableOptions" > <div *ngFor="let father of grandpa?.children" class="item" [id]="father.id" [ngClass]="{ a: father.name.indexOf('甲') !== -1, b: father.name.indexOf('乙') !== -1, c: father.name.indexOf('丙') !== -1 }" > {{ father?.name }} <ng-container *ngIf="father?.children?.length"> <div class="son-container" [id]="father.id" [sortablejs]="father?.children" [sortablejsOptions]="draggableOptions" > <div *ngFor="let son of father?.children" class="item" [id]="son.id" [ngClass]="{ a: son.name.indexOf('甲') !== -1, b: son.name.indexOf('乙') !== -1, c: son.name.indexOf('丙') !== -1 }" > {{ son?.name }} </div> </div> </ng-container> </div> </div> </ng-container> </div></div>public draggableOptions: SortableOptions = { group: { name: 'wmm', } // 元素 从其它拖拽分组 拖进 本拖拽分组 时触发 onAdd: (event: SortableEvent) => { console.log('onAdd event:', event); console.log('自身id:', event.item.id); console.log('当前所属父id:', event.to.id); console.log('在当前分组中的index:', event.newIndex); }, // 元素在本拖拽分组中的位置发生改变时触发 onUpdate: (event: SortableEvent) => { console.log('onUpdate event:', event); },};public treeItems: { id: string; name: string; children?: any[] = [];} = [];ngOnInit(): void { // 初始化 treeItems for (let i = 0; i < 5; i++) { let grandpa: any = { id: `0${i}`, name: `甲 0${i}`, children: [] }; if (i === 1) { let fathers: any = []; for (let j = 0; j < 5; j++) { const fatherItem: any = { id: `00${j}`, name: `乙 00${j}`, }; if (j === 4) { let sons: any = []; for (let k = 0; k < 5; k++) { const sonItem = { id: `000${k}`, name: `丙 000${k}`, }; sons.push(sonItem); } fatherItem.children = sons; } fathers.push(fatherItem); } grandpa.children = fathers; } this.treeItems.push(grandpa); }}

第一次拖拽:

第二次拖拽:

学习来源

更多配置项及回调方法: http://www.sortablejs.com/options.html 更多示例: http://sortablejs.github.io/Sortable/ Sortable仓库: https://github.com/SortableJS/Sortable ngx-sortablejs仓库 https://github.com/sortablejs/ngx-sortablejs#readme

本文链接地址:https://www.jiuchutong.com/zhishi/298478.html 转载请保留说明!

上一篇:【云原生 | 21】Docker运行Web服务实战之Apache(云原生istio)

下一篇:Anaconda(python,pycharm)半详细安装教程

  • 顺德欧阳氏宗祠(顺德欧科电器)(广东欧阳氏村庄)

    顺德欧阳氏宗祠(顺德欧科电器)(广东欧阳氏村庄)

  • oppo手机怎么改变电池显示形状(oppo手机怎么改时间和日期)

    oppo手机怎么改变电池显示形状(oppo手机怎么改时间和日期)

  • oppo手机微信悬浮窗权限(oppo手机微信悬浮球怎么调出来)

    oppo手机微信悬浮窗权限(oppo手机微信悬浮球怎么调出来)

  • 华为512内存的手机(华为512内存的手机有哪些)

    华为512内存的手机(华为512内存的手机有哪些)

  • oppo如何修改内存(oppo手机如何修改手机内存)

    oppo如何修改内存(oppo手机如何修改手机内存)

  • 32微机中的32指的是什么(32位微机中32是什么)

    32微机中的32指的是什么(32位微机中32是什么)

  • 电脑左下角的图标叫什么(电脑左下角的图标跑到左上角怎么办)

    电脑左下角的图标叫什么(电脑左下角的图标跑到左上角怎么办)

  • 通知栏和状态栏的区别(iqoo下拉通知栏怎么设置)

    通知栏和状态栏的区别(iqoo下拉通知栏怎么设置)

  • 把拼多多好友删了对方显示吗(把拼多多好友删除了他还能偷看的菜吗)

    把拼多多好友删了对方显示吗(把拼多多好友删除了他还能偷看的菜吗)

  • 苹果手机关机后闹钟还可以用吗(苹果手机关机后能查到定位吗)

    苹果手机关机后闹钟还可以用吗(苹果手机关机后能查到定位吗)

  • 微信怎么发长语音(微信怎么发长语音消息)

    微信怎么发长语音(微信怎么发长语音消息)

  • 在excel中文本型数据默认的对齐方式是(在Excel中文本型数据包括)

    在excel中文本型数据默认的对齐方式是(在Excel中文本型数据包括)

  • 什么叫解封环境异常(解封是指什么意思)

    什么叫解封环境异常(解封是指什么意思)

  • 苹果xr掉水里立马拿出来有影响吗(苹果xr掉水里立马拿出来多久能充电)

    苹果xr掉水里立马拿出来有影响吗(苹果xr掉水里立马拿出来多久能充电)

  • 华为13mp是什么型号(华为手机13mp的价格f1.8的价格)

    华为13mp是什么型号(华为手机13mp的价格f1.8的价格)

  • icp备案是什么意思(icp备案有什么用处)

    icp备案是什么意思(icp备案有什么用处)

  • 怎么减少cpu耗电(怎么减低cpu)

    怎么减少cpu耗电(怎么减低cpu)

  • 华为手机的云备份在哪里(华为手机的云备份可以导到别的新安卓机吗)

    华为手机的云备份在哪里(华为手机的云备份可以导到别的新安卓机吗)

  • 手机怎样边看电视边聊天(手机怎么边看电视边直播)

    手机怎样边看电视边聊天(手机怎么边看电视边直播)

  • 快手以前删的视频恢复(快手以前删的视频在哪里)

    快手以前删的视频恢复(快手以前删的视频在哪里)

  • 华为智慧屏75寸什么时候上市(华为智慧屏75寸哪个系列最好用)

    华为智慧屏75寸什么时候上市(华为智慧屏75寸哪个系列最好用)

  • 手机桌面日历怎么设置(手机桌面日历怎么调整大小)

    手机桌面日历怎么设置(手机桌面日历怎么调整大小)

  • 华为plktl01h是什么型(华为plk-ul00)

    华为plktl01h是什么型(华为plk-ul00)

  • 小爱触屏音箱什么时候上市(小爱触屏音箱什么芯片)

    小爱触屏音箱什么时候上市(小爱触屏音箱什么芯片)

  • 小米8se有红外遥控吗(小米8se红外遥控器在哪打开)

    小米8se有红外遥控吗(小米8se红外遥控器在哪打开)

  • 美团商家怎么改手机号(美团商家怎么改地址)

    美团商家怎么改手机号(美团商家怎么改地址)

  • 华米科技和小米什么关系(华米科技和小米手环)

    华米科技和小米什么关系(华米科技和小米手环)

  • 手机远程监控摄像头的安装操作(手机远程监控摄像头掉线怎么连接)

    手机远程监控摄像头的安装操作(手机远程监控摄像头掉线怎么连接)

  • 华为mate50pro配置参数表(华为Mate50Pro配置多少)

    华为mate50pro配置参数表(华为Mate50Pro配置多少)

  • 印花税购销合同包括哪些
  • 增值税发票管理办法
  • 缴纳个人所得税扣除项目
  • 企业所得税弥补亏损年限
  • 政府会计制度固定资产折旧哪个月开始计提
  • 合同印花税用不用计提
  • 个人可支配收入缩写
  • 去年发生的成本但今年9月份才开票付款
  • 未开票收入已缴税额怎么入账
  • 年度纳税申报时间规定
  • 用党委经费买的固定资产如何计提?
  • 收到一笔支付宝转账,如何查看转账人
  • 商品入库时的会计分录
  • 没有股权取得的分红如何交税?
  • 公司发年终奖怎么发朋友圈
  • 建筑行业预收账款
  • 贸易公司购进原材料会计分录
  • 外资企业需要遵守哪些法律
  • 应征增值税不含税销售额(3%征收率)怎么算
  • 风险纳税人原因查询
  • 广告设计公司需要哪些设备
  • 新购进的固定资产可以一次性抵扣
  • 发票认证后失控
  • 1697508432
  • 其他应付款转增股本
  • 在建工程预估转入固定资产怎么做凭证
  • 预缴增值税的情况四种情形汇总表怎么填
  • win10windows资源管理器怎么打开
  • 原材料到半成品分录
  • 小规模纳税人确认收入时要确认税吗
  • 申请出具商标注意事项
  • 监事会职权范围是什么
  • 长期借款利息如何做账
  • 浅谈使用链式管理加强特殊监管场所
  • 年度汇算清缴的企业所得税会计分录
  • ping命令测试结果
  • 工程材料怎么开票
  • 六月雪的养殖方法和浇水时间
  • phpqrcode
  • 处理固定资产怎么交税
  • dpkg -s命令
  • 如何用php操作mysql
  • 操作系统启动流程
  • 收购企业如何看报表
  • 红字发票信息表盖什么章
  • 差旅费可以加计吗
  • phpcms怎么用
  • 织梦自定义模型调用
  • 货款分批付的会计分录
  • 假退库会计分录
  • 暂估入库成本需要冲销吗
  • 所得税费用是属于费用类吗
  • 车辆固定资产的折旧方法
  • 个税手续费发给财务人员 文件
  • 伙食费怎么入账
  • 企业购买的理财产品 亏损了,是否可以税前扣除
  • 对公转账房租如何填写备注
  • 营利性与非营利性的关系
  • 员工工资怎么计提
  • 财务分析与财务管理的共同点
  • 企业网银年服务费怎么做账
  • 交易费用计入何种科目
  • 投资的信托基金有哪些
  • 增值税专用发票查询系统官方网站
  • 主营业务收入净额指的是什么
  • 金蝶旗舰版如何备份账套
  • sql中nullif
  • linux命令总结
  • win7看视频黑屏有声音
  • 新买的读卡器不读卡,提示放入驱动盘
  • linux版本ubuntu
  • linux-c
  • retrorun.exe - retrorun有什么用 是什么进程
  • peafsearch是什么程序
  • 在linux系统中
  • shell脚本 -ne 0
  • 贷款利息收入增值税税率2023
  • 定额发票增值税怎么申报
  • 电脑有网为什么不能用
  • 广东省国家税务总局稽查局局长
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设