微信小程序?qū)崿F(xiàn)單個(gè)卡片左滑顯示按鈕并防止上下滑動(dòng)干擾功能
實(shí)現(xiàn)類似ios端微信的左滑顯示置頂、刪除按鈕的功能,首先需將按鈕部分設(shè)為絕對(duì)定位,并且right設(shè)為負(fù)值溢出屏幕。利用小程序事件處理的api,分別讀取觸摸開始,觸摸移動(dòng)時(shí),觸摸結(jié)束的X/Y坐標(biāo),根據(jù)差值來(lái)改變整個(gè)卡片的位置。
這里有一個(gè)細(xì)節(jié),為了防止按鈕的點(diǎn)擊干擾到卡片主部分的滑動(dòng),需要將整個(gè)卡片分為兩部分。
<View style={`${positionStyle[index]}`}>
<View
onTouchStart={this.moveTaskStart}
onTouchMove={this.moveTask}
onTouchEnd={this.moveTaskEnd}
>
這是主要的卡片部分
</View>
<View style="right: -260px;">這是滑動(dòng)后出現(xiàn)的按鈕部分</View>
</View>
這里使用的是Taro框架,方法與原生事件api一樣,在開始滑動(dòng)時(shí)分別存入X,Y坐標(biāo),在手指移動(dòng)過程中計(jì)算移動(dòng)的距離,當(dāng)X的移動(dòng)距離大于整個(gè)按鈕部分的一班,展開按鈕。
核心功能的實(shí)現(xiàn),只需要分析X坐標(biāo)即可,但因?yàn)橛脩艨赡茉谏舷禄瑒?dòng)過程中x坐標(biāo)也會(huì)偏移造成按鈕的展開,所以需要在move與end兩部分都計(jì)算垂直坐標(biāo)的改變與水平坐標(biāo)改變形成的角度,當(dāng)角度過大,視為上下滑動(dòng),按鈕不展開。
完整代碼如下:
moveTaskStart(e) {
if (e.touches.length == 1) {
//觸摸屏上只有一個(gè)觸摸點(diǎn)
this.setState({
// 開始觸摸屏幕的X坐標(biāo)
startX: e.touches[0].clientX,
startY: e.touches[0].clientY
});
}
}
moveTask(e) {
if (e.touches.length == 1) {
let moveX = e.touches[0].clientX;
let moveY = e.touches[0].clientY;
// 移動(dòng)距離
let disX = this.state.startX - moveX;
let disY = this.state.startY - moveY;
let angle = disY > 0 ? disY / disX : -disY / disX;
let btnWidth = this.state.btnWidth;
let txtStyle = "";
if (disX == 0 || disX < 30) {
//右滑動(dòng)
txtStyle = "left:0px";
} else if(angle > 0.5) {
return;
} else if (disX > 30 && angle < 0.5) {
txtStyle = `left: -${disX}px`;
if (disX >= btnWidth) {
//距離最大值
txtStyle = `left: -${btnWidth}px`;
}
}
let index = e.currentTarget.dataset.index;
let list = this.state.positionStyle;
this.setState({
positionStyle: list
});
}
}
moveTaskEnd(e) {
let txtStyle;
if (e.changedTouches.length == 1) {
let endX = e.changedTouches[0].clientX;
let moveY = e.changedTouches[0].clientY;
//移動(dòng)距離
let disX = this.state.startX - endX;
let disY = this.state.startY - moveY;
//移動(dòng)角度
let angle = disY > 0 ? disY / disX : -disY / disX;
let btnWidth = this.state.btnWidth;
//如果距離大于按鈕寬度的一半,并且移動(dòng)角度較小,顯示按鈕
if(disX > (btnWidth / 2) && angle < 0.5) {
txtStyle = `left:-${btnWidth}px`
}else {
txtStyle = "left:0px"
}
let index = e.currentTarget.dataset.index;
let list = this.state.positionStyle;
list[index] = txtStyle;
this.setState({
positionStyle: list
});
}
}
總結(jié)
以上所述是小編給大家介紹的微信小程序?qū)崿F(xiàn)單個(gè)卡片左滑顯示按鈕并防止上下滑動(dòng)干擾功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
- 微信小程序?qū)崿F(xiàn)可拖動(dòng)懸浮圖標(biāo)(包括按鈕角標(biāo)的實(shí)現(xiàn))
- 微信小程序?qū)㈨?yè)面按鈕懸浮固定在底部的實(shí)現(xiàn)代碼
- 微信小程序點(diǎn)擊按鈕動(dòng)態(tài)切換input的disabled禁用/啟用狀態(tài)功能
- 微信小程序中的video視頻實(shí)現(xiàn) 自定義播放按鈕、封面圖、視頻封面上文案
- 微信小程序批量監(jiān)聽輸入框?qū)Π粹o樣式進(jìn)行控制的實(shí)現(xiàn)代碼
- 微信小程序 多行文本顯示...+顯示更多按鈕和收起更多按鈕功能
- 微信小程序按鈕點(diǎn)擊動(dòng)畫效果的實(shí)現(xiàn)
- 操作按鈕懸浮固定在微信小程序底部的實(shí)現(xiàn)代碼
- 詳解微信小程序膠囊按鈕返回|首頁(yè)自定義導(dǎo)航欄功能
- 微信小程序mpvue點(diǎn)擊按鈕獲取button值的方法
- 微信小程序單選radio及多選checkbox按鈕用法示例
- 微信小程序開發(fā)之點(diǎn)擊按鈕退出小程序的實(shí)現(xiàn)方法
- 微信小程序按鈕巧妙用法
相關(guān)文章
JavaScript實(shí)現(xiàn)的鼠標(biāo)跟隨特效示例【2則實(shí)例】
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的鼠標(biāo)跟隨特效,結(jié)合2則實(shí)例形式分析了javascript針對(duì)鼠標(biāo)事件的響應(yīng)、計(jì)算、處理及頁(yè)面元素動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-12-12
純JS實(shí)現(xiàn)圖片驗(yàn)證碼功能并兼容IE6-8(推薦)
這篇文章主要介紹了純JS實(shí)現(xiàn)圖片驗(yàn)證碼功能并兼容IE6-8瀏覽器,需要的朋友可以參考下2017-04-04
BootStrap table實(shí)現(xiàn)表格行拖拽效果
這篇文章主要為大家詳細(xì)介紹了BootStrap table實(shí)現(xiàn)表格行拖拽效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
如何自己實(shí)現(xiàn)JavaScript的new操作符
new大家肯定都不陌生,單身沒有對(duì)象的時(shí)候就new一個(gè),很方便。那么它在創(chuàng)建實(shí)例的時(shí)候,具體做了哪些操作呢?今天我們就來(lái)一起分析一下。2021-04-04
JavaScript Window瀏覽器對(duì)象模型方法與屬性匯總
本文給大家匯總分享的是JavaScript Window瀏覽器對(duì)象模型方法與屬性,十分的細(xì)致全面,這里推薦給大家,有需要的小伙伴可以參考下。2015-04-04
Javascript圖像處理—圖像形態(tài)學(xué)(膨脹與腐蝕)
上一篇文章,我們講解了圖像處理中的閾值函數(shù),這一篇文章我們來(lái)做膨脹和腐蝕函數(shù)2013-01-01
禁止iframe頁(yè)面的所有js腳本如alert及彈出窗口等
一個(gè)頁(yè)面里面需要放一個(gè)iframe框架來(lái)預(yù)覽網(wǎng)站,可是被預(yù)覽的這個(gè)網(wǎng)站中含有很多js腳本,于是想禁止iframe里面的腳本,下面是方法2014-09-09
javascript垃圾收集機(jī)制與內(nèi)存泄漏詳細(xì)解析
本文是對(duì)javascript中的垃圾收集機(jī)制與內(nèi)存泄漏進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來(lái)參考下,希望對(duì)大家有所幫助2013-11-11

