国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

react 移動(dòng)端實(shí)現(xiàn)列表左滑刪除的示例代碼

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 21:54:08
文檔

react 移動(dòng)端實(shí)現(xiàn)列表左滑刪除的示例代碼

react 移動(dòng)端實(shí)現(xiàn)列表左滑刪除的示例代碼:最近做了一個(gè)類似系統(tǒng)操作的左滑刪除的demo,用的taro框架,和大家分享一下~ 首先需要考慮的有以下幾點(diǎn): 1)布局; 2)判斷是左滑還是右滑,左滑時(shí)出現(xiàn)刪除,右滑時(shí)回歸原位; 3)排他性,意思是某一個(gè)時(shí)間只能有一個(gè)項(xiàng)出現(xiàn)刪除,當(dāng)有另一個(gè)出現(xiàn)刪除時(shí),上
推薦度:
導(dǎo)讀react 移動(dòng)端實(shí)現(xiàn)列表左滑刪除的示例代碼:最近做了一個(gè)類似系統(tǒng)操作的左滑刪除的demo,用的taro框架,和大家分享一下~ 首先需要考慮的有以下幾點(diǎn): 1)布局; 2)判斷是左滑還是右滑,左滑時(shí)出現(xiàn)刪除,右滑時(shí)回歸原位; 3)排他性,意思是某一個(gè)時(shí)間只能有一個(gè)項(xiàng)出現(xiàn)刪除,當(dāng)有另一個(gè)出現(xiàn)刪除時(shí),上

最近做了一個(gè)類似系統(tǒng)操作的左滑刪除的demo,用的taro框架,和大家分享一下~

首先需要考慮的有以下幾點(diǎn):

1)布局;
2)判斷是左滑還是右滑,左滑時(shí)出現(xiàn)刪除,右滑時(shí)回歸原位;
3)排他性,意思是某一個(gè)時(shí)間只能有一個(gè)項(xiàng)出現(xiàn)刪除,當(dāng)有另一個(gè)出現(xiàn)刪除時(shí),上一個(gè)自動(dòng)回歸原位。

我將列表項(xiàng)封裝成一個(gè)組件,而整個(gè)列表是另一個(gè)組件。

接下來先說列表項(xiàng)這個(gè)組件,逐一解決以上這些問題:

1)布局

我采用的是列表項(xiàng)最外層套一個(gè)盒子,這個(gè)盒子寬度設(shè)置為100vw,并且overflow:hidden。而列表項(xiàng)要包括內(nèi)容和刪除按鈕,內(nèi)容寬度為屏幕寬度,而刪除按鈕定位到右邊,所以整個(gè)列表項(xiàng)寬度是超過100vw的。描述可能沒有那么清晰,直接上代碼:

<View className='swipe-item'>
 <View className='swipe-item-wrap' style={moveStyle}>
 <View
 className='swipe-item-left'
 onTouchStart={this.handleTouchStart}
 onTouchMove={this.handleTouchMove.bind(this, index)}
 onTouchEnd={this.handleTouchEnd}
 >
 <View>{item.title}</View>
 </View>
 <View className='swipe-item-right'>
 <View className='swipe-item-del'>del</View>
 </View>
 </View>
</View>

.swipe-item {
 width: 100vw;
 overflow: hidden;
 line-height: 24PX;
 height: 24PX;
 text-align: center;
 margin-bottom: 10PX;

 &-wrap {
 width: calc(100vw + 32PX);
 height: 100%;
 position: relative;
 }

 &-left {
 width: 100vw;
 }

 &-right {
 width: 32PX;
 height: 100%;
 background: pink;
 position: absolute;
 right: 0;
 top: 0;
 }
}

好了,布局結(jié)束之后,接下來是第二個(gè)問題:

2)判斷是左滑還是右滑,左滑時(shí)出現(xiàn)刪除,右滑時(shí)回歸原位

可以看到上面的代碼,我已經(jīng)在列表項(xiàng)左邊部分加了touch的一系列事件,下面就來分析下這幾個(gè)事件

  • touchstart:開始時(shí),要獲取當(dāng)前位置
  • touchmove:滑動(dòng)時(shí),獲取滑動(dòng)時(shí)的位置,同時(shí)縱向滑動(dòng)時(shí)阻止。來判斷當(dāng)前是左滑還是右滑,左滑時(shí)e.touches[0].pageX在減小,而右滑時(shí)變大。為了防止一個(gè)手誤操作,我加了一個(gè)判斷,當(dāng)滑動(dòng)超過一定距離時(shí)才動(dòng)。并且記錄下當(dāng)前滑動(dòng)的是第幾項(xiàng)。在render的時(shí)候給列表項(xiàng)加一個(gè)樣式就可以實(shí)現(xiàn)了,就是第一段代碼中的style。
  • touchend:滑動(dòng)結(jié)束
  • 上代碼了~

     handleTouchStart = e => { 
     this.startX = e.touches[0].pageX
     this.startY = e.touches[0].pageY
     }
    
     handleTouchMove (index, e) {
     // 若想阻止冒泡且最外層盒子為scrollView,不可用e.stopPropogagation(),否則頁面卡死
     this.currentX = e.touches[0].pageX
     this.moveX = this.currentX - this.startX
     this.moveY = e.touches[0].pageY - this.startY
     // 縱向移動(dòng)時(shí)return
     if (Math.abs(this.moveY) > Math.abs(this.moveX)) {
     return
     }
     // 滑動(dòng)超過一定距離時(shí),才觸發(fā)
     if (Math.abs(this.moveX) < 10 ) {
     return
     }
     else {
     // 否則沒有動(dòng)畫效果
     this.setState({
     hasTransition: true
     })
     }
     // 通知父組件當(dāng)前滑動(dòng)的為第幾項(xiàng)
     this.props.onSetCurIndex(index)
     }
    
     handleTouchEnd = e => {
     // 結(jié)束時(shí),置為true,否則render時(shí)不生效
     this.setState({
     hasTransition: true
     })
     }
    
    

    3)排他性

    這個(gè)主要是通過觸發(fā)父組件的一個(gè)事件,在父組件中設(shè)置一個(gè)當(dāng)前滑動(dòng)項(xiàng)的index值,然后再通過props值傳入子組件,渲染的時(shí)候加一個(gè)判斷實(shí)現(xiàn)。

    // 左滑時(shí),出現(xiàn)del,右滑時(shí),恢復(fù)原位,距離為操作按鈕大小
    // 也可以將滑動(dòng)距離作為移動(dòng)距離,但是效果不太好
    const distance = this.moveX >= 0 ? 0 : -32
    let moveStyle = {}
    // 排他性,若某一個(gè)處于滑動(dòng)狀態(tài)時(shí),其他都回歸原位
    if (hasTransition && currentIndex === index) {
     moveStyle.transform = `translateX(${distance}PX)`
     moveStyle.webkitTransform = `translateX(${distance}PX)`
     moveStyle.transition = 'transform 0.3s ease'
     moveStyle.WebkitTransition = 'transform 0.3s ease'
    }
    

    列表項(xiàng)就到此結(jié)束了,下面來說列表組件中調(diào)用列表項(xiàng)~

    handleCurIndex = index => {
     // 設(shè)置當(dāng)前滑動(dòng)項(xiàng),做排他性
     this.setState({
     currentIndex: index
     })
    }
    
    <SwipeItem
     item={item}
     key={item.id}
     index={index}
     currentIndex={currentIndex}
     onSetCurIndex={this.handleCurIndex}
    />
    
    

    好了,大致就是這些了,可能有點(diǎn)混亂,大家可以移步demo源碼~

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    react 移動(dòng)端實(shí)現(xiàn)列表左滑刪除的示例代碼

    react 移動(dòng)端實(shí)現(xiàn)列表左滑刪除的示例代碼:最近做了一個(gè)類似系統(tǒng)操作的左滑刪除的demo,用的taro框架,和大家分享一下~ 首先需要考慮的有以下幾點(diǎn): 1)布局; 2)判斷是左滑還是右滑,左滑時(shí)出現(xiàn)刪除,右滑時(shí)回歸原位; 3)排他性,意思是某一個(gè)時(shí)間只能有一個(gè)項(xiàng)出現(xiàn)刪除,當(dāng)有另一個(gè)出現(xiàn)刪除時(shí),上
    推薦度:
    標(biāo)簽: 刪除 列表 實(shí)現(xiàn)
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产成人精品一区二三区2022 | 欧美网址在线观看 | 亚洲欧美日韩在线一区 | 欧美午夜视频在线观看 | 美女视频黄a视频全免费网站下载 | 黄网站在线观看 | 久久婷婷国产麻豆91天堂 | 99久久国产亚洲综合精品 | 国产视频资源在线观看 | 看全色黄大色黄女片爽毛片 | 热综合一本伊人久久精品 | 殴美激情 | 国产 高清 在线 | 欧美激情亚洲图片 | a欧美在线 | 久久99精品一区二区三区 | 欧美日韩在线亚洲国产人 | 制服丝袜先锋影音 | 91久久精品国产亚洲 | 久久国产精品免费一区二区三区 | 日韩精品欧美亚洲高清有无 | 亚洲欧洲精品成人久久曰影片 | 国产欧美视频在线观看 | 国产精品久久久久影院 | 亚洲欧美另类自拍第一页 | julia一区| 欧美精品一区二区三区免费 | 精品视频一区二区三区 | 欧美日韩中文国产 | 国产欧美综合精品一区二区 | 亚洲精品在线免费观看 | 九九久久精品国产 | 国产手机精品自拍视频 | 日韩一级精品视频在线观看 | 手机在线国产视频 | 国产亚洲欧美日韩俺去了 | 亚洲综合欧美日韩 | 亚洲欧洲免费视频 | 久久久久久久久国产 | 国产91成人精品亚洲精品 | 国内久久|