更新记录

1.0.0(2023-06-21) 下载此版本

完善微信小程序的支持


平台兼容性

Vue2 Vue3
×
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.8.5 × 2.20 × × × ×
钉钉小程序 快手小程序 飞书小程序 京东小程序
× × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × × × × × ×

wei-drag-list

wei-drag-list是一个采用 vue3,wxs,可以自定义的列表可拖拽排序组件,目前支持微信小程序,后期会有更多端的支持

基本使用

/*
传递list的格式,必须填写
list = [{
  name: String,
  icon: url地址
}]
*/
<wei-drag-sort :list="list"></wei-drag-sort>

自定义可推拽列表格式

使用细节可以参考示例

  1. 拷贝uni_modules/components/wei-drag-sort/下的的文件到你自己的组件目录
  2. 重新命名wei-drag-sort.vue,更具自己使用的功能
  3. 自行修改wei-drag-sort.vue的代码
  <view class="wei-drag-sort">
    <view class="shadow-row-box">
      <view class="shadow-row" :style="rowStyle">
        <view class="my-row-body" v-if="shadowData">
          <!-- 推拽时候使用的拖拽中的样式,填写你自己的代码样式和列表项一致 -->
        </view>
      </view>
    </view>

    <scroll-view
      class="drag-scroll-view" 
      :style="scrollViewStyle"
      :scroll-with-animation="scrollAnimation"
      :scroll-top="scrollViewTop"
      :scroll-y="false"
      @scroll="drag.scroll"
    >
      <view class="drag-list">
        <view 
          class="drag-row"
          :style="rowStyle"
          v-for="row in dragList"
          :key="row.weiDragId"
          @touchstart="drag.touchstart"
          @touchmove="drag.touchmove"
          @touchend="drag.touchend"
          :data-sort="row.weiDragSort"
          :data-id="row.weiDragId"
        >
          <view class="my-row-body">
            <!-- 这里写自定义的拖拽列表 -->
          </view>
        </view>
      </view>
    </scroll-view>
  </view>

  <!-- 和wxs进行数据通讯 -->
  <view 
    class="dataView" 
    style="display: none !important;" 
    :prop="wxsDataStr" 
    :change:prop="drag.receiveData">
  </view>
<script>
  import { computed, ref } from 'vue';
  import useDragSort from '@/uni_modules/wei-drag-sort/lib/useDragSort.js';

  const props = defineProps({
    list: {
      type: Array,
      default: () => []
    },
    rowHeight: {
      type: Number,
      default: 44,
    },
    longTouch: {
      value: Boolean,
      default: true
    },
    longTouchTime: {
        value: Number,
        default: 300
    },
    autoScroll: {
      value: Boolean,
      default: false
    },
    listHeight: {
        value: Number,
        default: 0
    },
    feedbackGenerator: {
      value: Boolean,
      default: true
    }
  })
  const emit = defineEmits(['change', 'confirm', 'remove'])
  const listRef = ref(null);

  //所有的关于滑动的功能我都封装在useDragSort()里面
  const { 
    dragList, 
    wxsDataStr, wxsSort, wxsChange, wxsScroll, wxsSetShodowData, wxsVibrate,
    rowStyle, scrollViewStyle, 
    scrollAnimation, scrollViewTop,
    shadowData,
    push, unshift, splice
  } = useDragSort(props, {
    onConfirm,
    onChange
  });

  defineExpose({
    //以下是传递给wxs内调用的事件
    wxsSort,
    wxsChange,
    wxsScroll,
    wxsSetShodowData,
    wxsVibrate,
    push, unshift, splice
  })
</script>
<style lang="scss">
  @import '@/uni_modules/wei-drag-sort/lib/style.scss';

  //写你自己样式
</style>

属性/方法

drag Props

属性名 类型 默认值 说明
list Array [] 推拽的列表,格式{ name: 'xxx', icon: 'url' }
rowHeight Number 44 列表的行高,一定要设置正确,因为会根据此计算滑动的位置
longTouch Boolean true 是否长按列表拖动
longTouchTime Number 300 长按列表可以进行拖拽的时间
autoScroll autoScroll true 推拽到边缘是否自动滚动
listHeight listHeight 0 列表的总高度,当为0, autoScroll=true是,高度为屏幕高度,false时,高度自适应
feedbackGenerator Boolean true 推拽是否产生震动

drag Events

事件名称 说明
@change 推拽位置改变时触发的事件, 在拖拽中就触发
@confirm 推拽结束触发的事件

drag Methods

方法名称 说明
push 加入拖动子项至列表尾,返回加入的子项,模拟数组push的方法
unshift 加入拖动子项至列表头,返回加入的子项,模拟数组unshift的方法
splice 删除指定下标的子项,模拟数组splice方法

后续会增加的功能

  • [ ] renderjs 开发,支持app-vue和h5
  • [ ] 支持grid的模式的拖拽排序
  • [ ] 尝试更高自由度的可扩展

有问题可以下方留言区一起讨论

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问