当前位置: 首页 > 知识库问答 >
问题:

harmonyos - 如何实现拖拽时列表项占位动画的效果?

白学
2024-01-18

如何实现拖拽时列表项占位动画的效果

共有1个答案

程正阳
2024-01-18

解决措施

Grid拖拽时,列表项默认为占位动画效果。具体实现步骤如下:

  1. 在Grid组件下设置属性editMode(true)设置Grid是否进入编辑模式,进入编辑模式可以拖拽Grid组件内部GridItem。
  2. 在onItemDragStart回调中设置拖拽过程中显示的图片。
  3. 在onItemDrop中获取拖拽起始位置,和拖拽插入位置,在onDrag回调中完成交换数组位置逻辑。

代码示例

@Entry @Component struct GridExample {   @State numbers: String[] = [];   scroller: Scroller = new Scroller();   @State text: string = 'drag';    @Builder   pixelMapBuilder() {     Column() {       Text(this.text)         .fontSize(16)         .backgroundColor(0xF9CF93)         .width(80)         .height(80)         .textAlign(TextAlign.Center)     }   }    aboutToAppear() {     for (let i = 1; i <= 15; i++) {       this.numbers.push(i + '');     }   }    changeIndex(index1: number, index2: number) {     // 交换数组位置     let temp = this.numbers[index1];     this.numbers[index1] = this.numbers[index2];     this.numbers[index2] = temp;   }    build() {     Column({ space: 5 }) {       Grid(this.scroller) {         ForEach(this.numbers, (day: string) => {           GridItem() {             Text(day)               .fontSize(16)               .backgroundColor(0xF9CF93)               .width(80)               .height(80)               .textAlign(TextAlign.Center)               .onTouch((event: TouchEvent) => {                 if (event.type === TouchType.Up) {                   this.text = day;                 }               })           }         })       }       .columnsTemplate('1fr 1fr 1fr')       .columnsGap(10)       .rowsGap(10)       .onScrollIndex((first: number) => {         console.info(first.toString());       })       .width('90%')       .backgroundColor(0xFAEEE0)       .height(300)       .editMode(true) // 设置Grid是否进入编辑模式,进入编辑模式可以拖拽Grid组件内部GridItem       .onItemDragStart((event: ItemDragInfo, itemIndex: number) => { // 第一次拖拽此事件绑定的组件时,触发回调。         return this.pixelMapBuilder(); //设置拖拽过程中显示的图片。       })       // 绑定此事件的组件可作为拖拽释放目标,当在本组件范围内停止拖拽行为时,触发回调。       .onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => {         // itemIndex拖拽起始位置,insertIndex拖拽插入位置         this.changeIndex(itemIndex, insertIndex)       })     }.width('100%').margin({ top: 5 })   } }
 类似资料:
  • 本文向大家介绍JS HTML5实现拖拽移动列表效果,包括了JS HTML5实现拖拽移动列表效果的使用技巧和注意事项,需要的朋友参考一下 练习HTML5中的拖放API,实现列表拖拽移动!参考文章:JS HTML5拖拽上传图片预览 HTML5拖拽移动列表实现思路:  1.循环设置每个子项的draggable属性,以及设置拖动标记(不会多个或全部子项都移动)  2.每次进入投放区,则检测时候有拖放标记,

  • 本文向大家介绍Vue.Draggable实现拖拽效果,包括了Vue.Draggable实现拖拽效果的使用技巧和注意事项,需要的朋友参考一下 快速实现Vue.Draggable的拖拽效果,供大家参考,具体内容如下 1.下载包:npm install vuedraggable 配置:package.json 2.在你的组件中引进依赖: 3.注册:draggable这个组件 4.使用html模板中使用该

  • 本文向大家介绍vue实现拖拽效果,包括了vue实现拖拽效果的使用技巧和注意事项,需要的朋友参考一下 vue中实现拖拽效果,供大家参考,具体内容如下 首先要搞明白分清clientY pageY screenY layerY offsetY的区别 作用3(事件对象中记录的鼠标位置) 语法 解释 evt.screenX 相对于屏幕的左上角为原点 evt.screenY evt.clientX 相对于浏览

  • 本文向大家介绍BootStrap table实现表格行拖拽效果,包括了BootStrap table实现表格行拖拽效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了BootStrap table实现表格行拖拽的具体代码,供大家参考,具体内容如下 不上图了 首先还是得添加三个文件,自己上网搜搜就行 前台,加在Bootstrap Table 属性里面   后台代码Controller

  • 本文向大家介绍vue.draggable实现表格拖拽排序效果,包括了vue.draggable实现表格拖拽排序效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了vue.draggable实现表格拖拽排序效果展示的具体代码,供大家参考,具体内容如下 主要使用vuedraggable和sortablejs两个组件。 1、安装组件 2、引入组件 3、HTML 我的例子是给表格排序,项目整

  • 本文向大家介绍JS实现盒子拖拽效果,包括了JS实现盒子拖拽效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了JS实现盒子拖拽效果的具体代码,供大家参考,具体内容如下 效果: html代码: css代码: js代码: 关于事件的用法,官方用到了object.addEventListener("dragover", myScript)和event.target.id 以上就是本文的全部