>  기사  >  웹 프론트엔드  >  uniapp은 왼쪽 스와이프로 제품 삭제 기능을 어떻게 구현하나요?

uniapp은 왼쪽 스와이프로 제품 삭제 기능을 어떻게 구현하나요?

PHPz
PHPz원래의
2023-04-17 14:16:001261검색

모바일 인터넷의 발전으로 전자상거래 앱이 점점 더 대중화되고 쇼핑이 더욱 편리해지고 있습니다. 일부 전자상거래 앱에서는 사용자가 왼쪽으로 스와이프하여 제품을 삭제하는 등 슬라이딩 인터페이스를 통해 제품을 조작할 수 있습니다. 그렇다면 uniapp에서 상품을 삭제하기 위해 왼쪽 스와이프를 구현하는 방법은 무엇일까요? 이번 글에서는 이에 대해 자세히 소개하겠습니다.

  1. 먼저 uniapp은 Vue.js 기반 개발 프레임워크이므로 우리의 구성 요소 구현은 Vue.js 기반이 될 것이라는 점을 분명히 해야 합니다. Vue.js에서는 일반적으로 동적 렌더링을 위해 v-for 명령과 배열을 사용하므로 유사한 방법을 사용하여 uniapp에서 제품 목록을 렌더링할 수도 있습니다.
  2. 다음으로 왼쪽으로 스와이프하여 상품을 삭제하는 기능을 구현해야 합니다. uni-app에서 제공하는 movable-view 컴포넌트를 사용할 수 있습니다. 이 구성 요소는 x축에 드래그 효과를 구현할 수 있습니다. movable-view 컴포넌트에서는 movable-view 컴포넌트의 다음 속성을 설정해야 합니다:
<movable-view 
  class="swiper-item" 
  x="{{item.x}}" 
  animation="true" 
  direction="horizontal" 
  damping="80" 
  friction="2" 
 ></movable-view>

여기서 x는 movable-view 컴포넌트의 위치이고 단위는 rpx입니다. 제품 목록에서 각 제품은 이동 가능한 뷰 구성 요소여야 합니다.

  1. 이동 뷰 컴포넌트에 삭제 버튼을 추가해야 합니다. 이 버튼은 이동 뷰 컴포넌트가 특정 거리 이상 왼쪽으로 슬라이드할 때 표시되어야 합니다. vue.js에서는 v-if 지시문을 사용하여 요소의 표시 및 숨기기를 동적으로 제어할 수 있으며, uniapp에서는 이를 달성하기 위해 조건부 렌더링을 사용할 수도 있습니다.
  2. 사용자가 삭제 버튼을 클릭하면 현재 제품을 제거해야 합니다. Vue.js에서는 배열의 splice 메소드를 통해 이를 달성할 수 있습니다. 마찬가지로 이 메소드는 uniapp에서도 사용할 수 있습니다. 사용자 정의 이벤트를 사용하여 삭제 버튼의 클릭 이벤트를 수신하고 하위 구성 요소에서 이벤트를 트리거하여 현재 제품을 삭제할 수 있습니다. 특정 작업에 대해서는 다음 샘플 코드를 참조하세요.
<!-- 让商品列表动态渲染 -->
<view v-for="(item, index) in list" :key="index">
   <!-- 判断商品是否被选中,选中时改变背景颜色 -->
   <movable-view 
     :class="{
        &#39;swiper-item-active&#39;: item.active
      }" 
     @change="handleChange(index, $event)" 
     @touchend="handleTouchEnd(index, $event)" 
     x="{{item.x}}" 
     animation="true" 
     direction="horizontal" 
     damping="80" 
     friction="2" 
     :style="{left: item.active ? &#39;-200rpx&#39; : 0}"
   >
     <view class="swiper-wrapper">
       <view class="image-wrapper">
         <image :src="item.image"></image>
       </view>
       <view class="content-wrapper">
         <view class="title">{{item.title}}</view>
         <view class="price">{{item.price}}</view>
         <view class="number">{{item.number}}</view>
       </view>
       <!-- 绑定删除操作 -->
       <view 
         class="delete-btn" 
         v-if="item.active" 
         @click="$emit(&#39;delete&#39;, index)"
       >删除</view>
     </view>
   </movable-view>
 </view>
 
<script>
  export default {
    data() {
      return {
        list: [
          {
            title: '商品1',
            image: '',
            price: 100,
            number: 1,
            active: false,
            x: 0
          },
          {
            title: '商品2',
            image: '',
            price: 200,
            number: 1,
            active: false,
            x: 0
          }
        ]
      }
    },
    methods: {
      // 左滑删除商品
      handleChange(index, event) {
        // 获取movable-view组件的位置信息
        const { detail } = event;
        const x = detail.x;
        this.list[index].x = x;
        // 当移动距离超过200rpx时,显示删除按钮
        if (x <= -200) {
          this.list[index].active = true;
        } else {
          this.list[index].active = false;
        }
      },
      // 停止触摸事件
      handleTouchEnd(index, event) {
        const { detail } = event;
        const x = detail.x;
        // 当用户放手时,如果movable-view组件位置小于-200rpx,则直接删除该商品
        if (x <= -200) {
          this.list.splice(index, 1);
        } else {
          // 否则,商品位置复位
          this.list[index].x = 0;
        }
        // 删除操作完成后,将所有商品的选中状态重置
        this.list.forEach((item) => {
          item.active = false;
        });
      }
    }
  }
</script>

위 샘플 코드를 통해 uniapp에서 왼쪽 스와이프로 제품 삭제 기능을 구현할 수 있습니다. 여기서 제품 목록은 단지 예일 뿐이라는 점에 유의해야 합니다. 실제 상황에서는 API에서 제품 목록을 가져와 동적으로 렌더링해야 합니다. 동시에 삭제 작업을 비동기 작업으로 전환해야 합니다. 즉, 항목을 삭제할 때 서버에 요청을 보내야 합니다. 여기서는 uniapp의 기본 동작만을 소개하며, 구체적인 구현은 추가적인 개선이 필요합니다.

위 내용은 uniapp은 왼쪽 스와이프로 제품 삭제 기능을 어떻게 구현하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.