uni-app 急需拖拽组件

发布于 1周前 作者 phonegap100 来自 Uni-App

uni-app 急需拖拽组件

类似九宫格的一个布局,每个格子的view可以随意拖拽排序,最外层是一个大view 里面自定义多少个格子

2 回复

有这样的东西,QQ 583069500


在uni-app中实现拖拽组件的功能,可以通过自定义组件结合触摸事件(touchstart、touchmove、touchend)来实现。以下是一个简单的拖拽组件实现案例:

  1. 创建拖拽组件 Draggable.vue
<template>
  <view 
    class="draggable" 
    :style="{ top: position.top + 'px', left: position.left + 'px' }"
    @touchstart="onTouchStart" 
    @touchmove="onTouchMove" 
    @touchend="onTouchEnd"
  >
    <slot></slot>
  </view>
</template>

<script>
export default {
  data() {
    return {
      position: { top: 0, left: 0 },
      start: { x: 0, y: 0 },
      dragging: false,
    };
  },
  methods: {
    onTouchStart(e) {
      this.dragging = true;
      this.start.x = e.touches[0].clientX - this.position.left;
      this.start.y = e.touches[0].clientY - this.position.top;
    },
    onTouchMove(e) {
      if (this.dragging) {
        this.position.left = e.touches[0].clientX - this.start.x;
        this.position.top = e.touches[0].clientY - this.start.y;
      }
    },
    onTouchEnd() {
      this.dragging = false;
    },
  },
};
</script>

<style>
.draggable {
  position: absolute;
  touch-action: none; /* 禁止默认的触摸行为 */
}
</style>
  1. 使用拖拽组件

在你的页面组件中引入并使用 Draggable.vue 组件:

<template>
  <view class="container">
    <Draggable>
      <view class="draggable-content">Drag me</view>
    </Draggable>
  </view>
</template>

<script>
import Draggable from '@/components/Draggable.vue';

export default {
  components: {
    Draggable,
  },
};
</script>

<style>
.container {
  position: relative;
  width: 100%;
  height: 100%;
}
.draggable-content {
  width: 100px;
  height: 100px;
  background-color: #3498db;
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 10px;
}
</style>

以上代码展示了如何在uni-app中创建一个简单的拖拽组件。Draggable.vue组件通过监听触摸事件来更新元素的位置,从而实现了拖拽功能。在实际使用中,你可能需要根据具体需求对组件进行进一步的优化和增强,比如添加边界限制、处理多个拖拽元素等。

回到顶部