uniapp怎么实现左滑删除商品功能

1. 什么是uniapp?

uniapp是一款基于Vue.js框架的跨平台应用开发框架,可以用同一套代码,同时开发出可以在多个平台上运行的原生应用程序。

uniapp支持编译成微信小程序、支付宝小程序、H5、App以及其他平台,可以极大地提升开发效率。

2. 左滑删除商品功能实现思路

2.1 页面结构

我们可以首先定义一个商品列表页面,每个商品右边添加一个删除按钮,用户可以通过左滑的方式来显示删除按钮,并删除相应的商品。

<template>

<div class="product-list">

<div class="product-item" v-for="(product,index) in productList" :key="product.id">

{{product.name}}

<div class="delete-btn">删除</div>

</div>

</div>

</template>

2.2 左滑展示删除按钮

实现左滑展示删除按钮的方式比较多,可以通过原生js写自己的滑动组件,也可以引入第三方库完成此功能。接下来我们以引入第三方组件的方式来进行讲解。

我们将引入一个名为Mescroll-uni的组件库,该组件库包含了常见的下拉刷新、上拉加载、左滑删除等功能。

npm install --save mescroll-uni

在商品列表页面中,我们需要引入Mescroll-uni组件,并进行配置,例如进行下拉刷新操作和左滑删除操作。

<template>

<mescroll-uni ref="mescrollRef" @down="downCallback">

<div class="product-list">

<div class="product-item" v-for="(product,index) in productList" :key="product.id">

{{product.name}}

<div class="delete-btn">删除</div>

</div>

</div>

</mescroll-uni>

</template>

import MescrollUni from "@/uni_modules/mescroll-uni/mescroll-uni.vue";

export default {

components: {

MescrollUni

},

data() {

return {

productList: [], // 商品列表数据

mescrollOption: {

down: {

callback: this.downCallback // 下拉刷新回调函数

}

}

};

},

methods: {

downCallback() {

// 下拉刷新回调函数

}

}

};

在执行下拉刷新操作时,需要将商品列表数据重新渲染到页面上,可以通过接口来获取数据。下面我们来编写一个下拉刷新回调函数,其中当下拉刷新状态结束时,需要触发完成下拉刷新的操作。

downCallback() {

// 请求商品列表数据

Api.getProductList().then(

res => {

this.productList = res.data;

this.$refs.mescrollRef.$mescroll.endSuccess();

},

err => {

this.$refs.mescrollRef.$mescroll.endErr();

}

);

}

2.3 左滑删除操作

在左滑删除商品时,我们可以通过手势事件和动画效果来实现,下面具体来讲解。

首先,在Mescroll-uni组件中,我们可以通过配置left属性来进行左滑删除的操作。在商品列表中,我们需要将left属性设置为删除按钮的宽度,通过触发唤醒和关闭事件来展示/隐藏删除按钮。

<template>

<mescroll-uni ref="mescrollRef" :left="80" @down="downCallback">

<div class="product-list">

<div class="product-item" v-for="(product,index) in productList" :key="product.id" @touchstart="touchstart(index)" @touchmove="touchmove(index)" @touchend="touchend(index)">

{{product.name}}

<div class="delete-btn" :class="{show: product.showDelete}" @click="deleteProduct(index)">删除</div>

</div>

</div>

</mescroll-uni>

</template>

在上面的代码中,我们监听了商品列表的touchstart、touchmove、touchend事件,并绑定了三个方法。其中touchstart方法用于初始化滑动起始位置,touchmove方法用于控制滑动过程和展开/隐藏删除按钮,touchend方法用于判断最后滑动完成后,删除按钮是否需要展示。

touchstart(index) {

this.startX = this.moveX = event.touches[0].clientX;

this.startY = this.moveY = event.touches[0].clientY;

this.touchIndex = index;

},

touchmove(index) {

if (index != this.touchIndex) {

return;

}

let deltaX = event.touches[0].clientX - this.moveX;

let deltaY = event.touches[0].clientY - this.moveY;

if (Math.abs(deltaX) > Math.abs(deltaY)) {

event.preventDefault();

let product = this.productList[index];

if (deltaX > 0 && product.showDelete === true) {

product.showDelete = false;

return;

}

if (deltaX < 0) {

product.showDelete = true;

}

this.moveX = event.touches[0].clientX;

}

},

touchend(index) {

if (index != this.touchIndex) {

return;

}

let deltaX = event.changedTouches[0].clientX - this.startX;

let deltaY = event.changedTouches[0].clientY - this.startY;

if (Math.abs(deltaX) < 10 || Math.abs(deltaY) > 10) {

return;

}

this.moveIndex = index;

let product = this.productList[index];

if (deltaX > 0 && product.showDelete === true) {

product.showDelete = false;

return;

}

if (deltaX < 0 && product.showDelete === false) {

product.showDelete = true;

// 关闭其它已经展开的按钮

this.productList.forEach(

(item, i) =>

i !== index && item.showDelete === true && (item.showDelete = false)

);

return;

}

this.moveIndex = -1;

}

在上面的代码中,我们定义了全局变量startX、moveX、startY、moveY、touchIndex和moveIndex,分别用于记录左滑起始位置、滑动过程中的位置、垂直滑动的起始位置、滑动过程中的位置、触摸的商品索引和滑动的商品索引。

具体来说,当touchstart事件被触发时,我们记录了当前触摸的位置,并记录了触摸的商品索引。当touchmove事件被触发时,我们通过计算触摸点的位置来决定商品是否需要展开删除按钮,同时阻止了默认行为。当touchend事件被触发时,我们通过计算滑动的偏移量和方向来决定展开/隐藏删除按钮或删除商品,同时还需要确保滑动的距离小于10,并且滑动的方向与垂直方向的夹角小于10度。

deleteProduct(index) {

let product = this.productList[index];

// 发送请求删除商品

Api.deleteProduct(product.id).then(

res => {

// 商品删除成功后,将其从列表中删除

this.productList.splice(index, 1);

},

err => {

// 商品删除失败

}

);

}

在删除商品的回调函数中,我们需要通过发送请求将商品从数据库中删除,并在删除成功后,将商品从页面上移除,添加删除动画效果。

3. 总结

本篇文章主要介绍了如何通过uniapp来实现左滑删除商品的功能。我们首先定义了商品列表页面的结构,然后引入了Mescroll-uni组件库,来完成下拉刷新和左滑删除的操作。具体来说,我们通过监听touch相关的事件来实现商品的左滑展示和删除操作,并配合触摸事件的坐标计算,添加了动画效果,提升了用户体验。

通过本文的讲解,相信大家可以更加深入地了解uniapp开发,掌握实现基本功能的技巧,为自己的应用开发之路打下坚实的基础。