中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

小程序如何實現左滑刪除效果

發布時間:2020-10-27 18:54:32 來源:億速云 閱讀:284 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關小程序如何實現左滑刪除效果,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

實現小程序滑動刪除有幾種方式,文章會簡單列舉兩種實現,先看效果。

小程序如何實現左滑刪除效果

一、使用movable-view實現滑動

先看官方文檔

小程序如何實現左滑刪除效果

簡單解讀一下movable-area標簽的基本概念。movable-area標簽就是定義了一個可移動的視圖容器,支持在頁面中拖拽滑動,跟普通的view容器是一樣的,但是也有不同之處,movable-area必須設置width和height屬性,不設置默認為10px;movable-view 默認為絕對定位,top和left屬性為0px。

 <movable-area>
  <movable-view out-of-bounds="true" direction="horizontal" inertia="true">
  </movable-view>
  </movable-area>

我們需要用的一些屬性out-of-bounds,給他定義true,讓我們的容器超過可移動區域后,movable-view還可以移動,direction屬性是定義我們滑動的方向,vertical是垂直滑動,horizontal是水平滑動。

二、使用Touch事件實現滑動

1.bindtouchstart 函數,手指觸摸動作開始
2.bindtouchmove 函數,手指觸摸后移動
3.bindtouchend 函數,手指觸摸動作結束

實現思路:
1.頁面上的容器分為上下兩層,上面一層顯示正常加載無動作的內容,下面一層顯示容器觸發事件后展示的內容,例如刪除、置頂、標為未讀等按鈕。
2.每個容器上面那一層容器我們通過css使用定位來固定,通過操縱事件來實現向需要移動的方向移動。
3.通過官方文檔提供的API來實現容器隨著方向移動。

完整代碼如下

1.wxml

<view class="">
 <view class="containerTitle">使用movable-view實現左滑</view>
 <view class="list">
 <view class="product-item" wx:for="{{productList}}" wx:for-index="index" wx:key="{{item.id}}" >
  <movable-area>
  <movable-view out-of-bounds="true" direction="horizontal" x="{{item.xmove}}"
   inertia="true"
   data-productIndex="{{index}}"
   bindtouchstart="handleTouchStart"
   bindtouchend="handleTouchEnd"
   bindchange="handleMovableChange">
   <view class="product-item-wrap">
   <view class="product-movable-item">
    <view class="product-movable-item-name">{{item.name}}</view>
    <view class="product-movable-item-code">{{item.code}}</view>
   </view>
   <view class="product-movable-item product-movable-item-amount">
    <text class="amount">{{item.amount}}</text>
    <text class="unit">萬</text>
   </view>
   </view>
  </movable-view>
  </movable-area>
  <view class="delete-btn" data-id="{{item.id}}" bindtap="handleDeleteProduct">刪除</view>
 </view>
 </view>
 <view class="containerTitle">使用Touch事件實現左滑</view>
 <view class="list">
 <view class="product-item" wx:for="{{slideProductList}}" wx:for-index="index" wx:key="{{item.id}}">
  <slide-delete pid="{{item.id}}" bindaction="handleSlideDelete" wx:key="{{item.id}}">
  <view class="product-item-wrap">
   <view class="product-movable-item">
   <view class="product-movable-item-name">{{item.name}}</view>
   <view class="product-movable-item-code">{{item.code}}</view>
   </view>
   <view class="product-movable-item product-movable-item-amount">
   <text class="amount">{{item.amount}}</text>
   <text class="unit">萬</text>
   </view>
  </view>
  </slide-delete>
 </view>
 </view>
</view>

2.wxss

.containerTitle {
 margin: 60rpx 0 30rpx;
 font-size: 40rpx;
 text-align: center;
 font-weight: bold;
 color: #383A3D;
}

.list .product-item {
 position: relative;
 width: 100vw;
 border-bottom: 2rpx solid #E9E9E9;
 box-sizing: border-box;
 background: #fff;
 z-index: 999;
}

.slide-product-list .slide-product-item {
 position: relative;
 width: 100vw;
 border-bottom: 2rpx solid #E9E9E9;
 box-sizing: border-box;
 background: #fff;
 z-index: 999;
}

.list .product-item movable-area {
 height: 120rpx;
 width: calc(100vw - 120rpx);
}

.list .product-item movable-view {
 height: 120rpx;
 width: 100vw;
 background: #fff;
 z-index: 999;
}

.list .product-item .delete-btn {
 position: absolute;
 top: 0;
 bottom: 0;
 right: 0; 
 width: 120rpx;
 font-family: PingFangSC-Regular;
 font-size: 24rpx;
 color: #FFFFFF;
 line-height: 120rpx;
 z-index: 1;
 background: red;
 text-align: center;
}

.list .product-item-wrap {
 position: relative;
 display: flex;
 align-items: center;
 padding: 8rpx 0 20rpx 20rpx;
 box-sizing: border-box;
}

.list .product-item-wrap .product-movable-item {
 flex: 1;
 overflow: hidden;
}

.list .product-item-wrap .product-movable-item-name {
 font-family: PingFangSC-Regular;
 font-size: 28rpx;
 color: #71747A;
 line-height: 60rpx;
 margin-right: 10rpx;
 overflow: hidden;
 white-space: nowrap;
 text-overflow: ellipsis;
}

.list .product-item-wrap .product-movable-item-code {
 font-family: PingFangSC-Regular;
 font-size: 24rpx;
 color: #969AA3;
}

.list .product-item-wrap .product-movable-item-amount {
 flex: 0 0 auto;
 padding-right: 80rpx;
 position: relative;
}

.list .product-item-wrap .product-movable-item-amount .amount {
 width: 120rpx;
 font-size: 28rpx;
 color: #383A3D;
 line-height: 60rpx;
}

.list .product-item-wrap .product-movable-item-amount .unit {
 position: absolute;
 top: 0;
 right: 30rpx;
 font-size: 28rpx;
 color: #969AA3;
 line-height: 60rpx;
}

3.js代碼

//獲取應用實例
const app = getApp()

Page({
 data: {
 productList: [
  {
  id: 1,
  name: '31省市區新增境外輸入13例',
  code: 'Jin日頭條',
  amount: 5
  },
  {
  id: 2,
  name: '飼養員遭熊攻擊身亡',
  code: 'bai度新聞',
  amount: 4
  },
  {
  id: 3,
  name: '安倍晉三參拜靖國神社',
  code: '日媒',
  amount: 10
  }
 ],
 slideProductList: [
  {
  id: 4,
  name: '老兵回憶參加抗美援朝說今生無悔',
  code: 'xin微博',
  amount: 101
  },
  {
  id: 5,
  name: '女子下樓時玩手機踩空摔傷',
  code: 'zz資訊',
  amount: 500
  },
  {
  id: 6,
  name: '楊紫為離線慶生',
  code: 'xx新聞',
  amount: 110
  }
 ]
 },

 onLoad: function () {

 },

 /**
 * 顯示刪除按鈕
 */
 showDeleteButton: function (e) {
 let productIndex = e.currentTarget.dataset.productindex
 this.setXmove(productIndex, -65)
 },

 /**
 * 隱藏刪除按鈕
 */
 hideDeleteButton: function (e) {
 let productIndex = e.currentTarget.dataset.productindex

 this.setXmove(productIndex, 0)
 },

 /**
 * 設置movable-view位移
 */
 setXmove: function (productIndex, xmove) {
 let productList = this.data.productList
 productList[productIndex].xmove = xmove

 this.setData({
  productList: productList
 })
 },

 /**
 * 處理movable-view移動事件
 */
 handleMovableChange: function (e) {
 if (e.detail.source === 'friction') {
  if (e.detail.x < -30) {
  this.showDeleteButton(e)
  } else {
  this.hideDeleteButton(e)
  }
 } else if (e.detail.source === 'out-of-bounds' && e.detail.x === 0) {
  this.hideDeleteButton(e)
 }
 },

 /**
 * 處理touchstart事件
 */
 handleTouchStart(e) {
 this.startX = e.touches[0].pageX
 },

 /**
 * 處理touchend事件
 */
 handleTouchEnd(e) {
 if(e.changedTouches[0].pageX < this.startX && e.changedTouches[0].pageX - this.startX <= -30) {
  this.showDeleteButton(e)
 } else if(e.changedTouches[0].pageX > this.startX && e.changedTouches[0].pageX - this.startX < 30) {
  this.showDeleteButton(e)
 } else {
  this.hideDeleteButton(e)
 }
 },

 /**
 * 刪除產品
 */
 handleDeleteProduct: function ({ currentTarget: { dataset: { id } } }) {
 let productList = this.data.productList
 let productIndex = productList.findIndex(item => item.id === id)
 productList.splice(productIndex, 1)
 this.setData({
  productList
 })
 if (productList[productIndex]) {
  this.setXmove(productIndex, 0)
 }
 },

 /**
 * slide-delete 刪除產品
 */
 handleSlideDelete({ detail: { id } }) {
 let slideProductList = this.data.slideProductList
 let productIndex = slideProductList.findIndex(item => item.id === id)
 slideProductList.splice(productIndex, 1)
 this.setData({
  slideProductList
 })
 }
})

上述就是小編為大家分享的小程序如何實現左滑刪除效果了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿城市| 河南省| 肇庆市| 温州市| 北票市| 西丰县| 宁武县| 高碑店市| 西乡县| 潮州市| 云霄县| 塔城市| 岑溪市| 屯昌县| 东阳市| 都江堰市| 肥城市| 纳雍县| 乌恰县| 万全县| 乐安县| 吉木乃县| 米泉市| 建平县| 理塘县| 玛沁县| 华宁县| 若尔盖县| 垫江县| 新民市| 无为县| 东港市| 旬邑县| 九龙坡区| 大理市| 金华市| 隆林| 马鞍山市| 太保市| 东海县| 乃东县|