uni-app 拖拽图片删除功能

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

uni-app 拖拽图片删除功能

功能描述

微信发朋友圈的界面,

功能:

  • 上传图片
  • 拖拽图片删除
1 回复

在实现 uni-app 的拖拽图片删除功能时,我们可以结合 Vue.js 的事件处理机制与 CSS 的样式调整来实现。以下是一个简单的代码示例,展示如何在 uni-app 中实现这一功能。

1. 页面结构(template)

<template>
  <view class="container">
    <view
      v-for="(image, index) in images"
      :key="index"
      class="image-wrapper"
      draggable="true"
      @dragstart="onDragStart(index)"
      @dragover.prevent
      @drop="onDrop(index)"
    >
      <image :src="image" class="image" />
      <view
        v-if="draggingIndex === index"
        class="delete-btn"
        @click="removeImage(index)"
      >
        ❌
      </view>
    </view>
  </view>
</template>

2. 脚本部分(script)

<script>
export default {
  data() {
    return {
      images: [
        'https://example.com/image1.jpg',
        'https://example.com/image2.jpg',
        // 更多图片URL
      ],
      draggingIndex: null,
    };
  },
  methods: {
    onDragStart(index) {
      this.draggingIndex = index;
    },
    onDrop(index) {
      this.draggingIndex = null;
    },
    removeImage(index) {
      this.images.splice(index, 1);
    },
  },
};
</script>

3. 样式部分(style)

<style scoped>
.container {
  display: flex;
  flex-wrap: wrap;
}
.image-wrapper {
  position: relative;
  margin: 10px;
}
.image {
  width: 100px;
  height: 100px;
  object-fit: cover;
}
.delete-btn {
  position: absolute;
  top: 0;
  right: 0;
  background-color: rgba(255, 0, 0, 0.7);
  color: white;
  border: none;
  font-size: 20px;
  cursor: pointer;
  padding: 5px;
  border-radius: 50%;
  display: none; /* 默认隐藏删除按钮 */
}
.image-wrapper:hover .delete-btn,
.image-wrapper.dragging .delete-btn {
  display: block; /* 鼠标悬停或拖拽时显示删除按钮 */
}
</style>

注意:由于 uni-app 在真机环境中对 draggable 属性的支持可能有差异,且拖拽事件在不同平台(如微信小程序)上可能有不同的表现,因此上述代码可能需要根据具体平台进行适当调整。另外,由于 uni-app 并不直接支持 CSS 的 :hover 伪类(特别是在小程序中),删除按钮的显示逻辑可能需要通过 JavaScript 的事件监听来实现更广泛的兼容性。

回到顶部