您好,登錄后才能下訂單哦!
小編給大家分享一下mpvue小程序如何實現仿qq左滑置頂刪除組件,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
效果圖:
實現:
1,上面說過mpvue的坑,比如里面的每一個的元素都是overflow:hidden,并且似乎都繼承了display:block。(看小程序開發工具是這樣的,具體源碼沒看,就只能猜猜)。所以主要解決是讓元素overflow:scroll,這個主要是看效果的時候會用到
2,左滑和右滑,這又是一個坑。本以為mpvue的滑動事件會和vue的一模一樣。開開心心的按著原來想法擼,發現怎么滑都滑不動,果斷打印一波數據,發現滑動事件大有奧妙!
3,布局方面我采用的是rpx+flex。
4,點擊時候置頂與取消置頂是通過json數據的top實現的。刪除是用數組的splice()方法。
5,滑動效果是css動畫控制的。
下面直接貼代碼:如果看不懂可以嫌麻煩可以去我的github:https://github.com/JB-Chen/mpvue-slide
程序員大佬們,覺得可以就給個star,以資鼓勵一下!
HTML代碼:
主要的html代碼:
<template> <div class="container"> <!-- 頭部 --> <div class="head"> <img class="userinfo-avatar" v-if="userInfo.avatarUrl" :src="userInfo.avatarUrl" background-size="cover"/> <span class="head-info">消息</span> </div> <!-- 搜索 --> <div class="search"> <input type="search"/> <span>搜索</span> </div> <!-- 內容 --> <div class="infoAll" v-for="(item,index) in commitInfo" :key="index"> <ul v-if="item.top"> <li @touchstart="touchStart($event)" @touchend="touchEnd($event,index)" :data-type="item.type" > <div class="imgInfo" @click="recover(index)"> <img :src="item.img"> </div> <div class="centerInfo"> <div class="name"> <span>{{item.name}}</span> </div> <div class="sonName"> <span>{{item.sonName}}</span> </div> </div> <div class="timeInfo" @click="recover(index)"> <div class="time"> <text>{{item.time}}</text> </div> <div class="infoNum" > <text >{{item.infoNum}}</text> </div> </div> <div class="top" @click="top(index)" > 取消置頂 </div> </li> </ul> </div> <div class="infoAll" v-for="(item,index) in commitInfo" :key="index"> <!-- {{item.img}} --> <ul v-if="!item.top"> <li @touchstart="touchStart($event)" @touchend="touchEnd($event,index)" :data-type="item.type"> <div class="imgInfo" @click="recover(index)"> <img :src="item.img"> </div> <div class="centerInfo"> <div class="name"> <span>{{item.name}}</span> </div> <div class="sonName"> <span>{{item.sonName}}</span> </div> </div> <div class="timeInfo" @click="recover(index)"> <div class="time"> <text>{{item.time}}</text> </div> <div class="infoNum" > <text >{{item.infoNum}}</text> </div> </div> <div class="top" @click="top(index)"> 置頂 </div> <div class="delect" @click="delect(index)"> 刪除 </div> </li> </ul> </div> </div> </template>
css代碼:
// 頭部 *{ margin:0px; padding: 0px; } .head { width: 100%; height:130rpx; background-color: #38A7FA; margin-top:-195rpx; display: flex; align-items: center; .head-info{ color: #fff; font-size:30rpx; margin-left: 30%; margin-top:20rpx; letter-spacing: 4rpx; } .userinfo-avatar { width: 80rpx; height: 80rpx; margin: 20rpx; border-radius: 50%; margin-top:30rpx; } } .search{ width: 90%; margin-top:20rpx; margin-bottom: 20rpx; input{ width: 100%; height: 20rpx; background-color: #F3F3F3; border-radius: 5rpx; z-index: 0; } span{ position: absolute; color: #B5B5B5; font-size: 24rpx; margin-top:-44rpx; z-index: 999; margin-left: 42%; text-align: center; } } .infoAll{ width: 100%; ul{ width: 100%; // overflow-x: scroll; li{ -webkit-transition: all 0.2s; transition: all 0.2s; width: 1100rpx; height: 150rpx; // background-color: red; line-height: 150rpx; border-bottom: 1px solid #E0EEF1; // 垂直居中, // 子div水平排列 display:flex; // justify-content:center; align-items:center; .imgInfo{ width: 100rpx; height: 100rpx; border-radius: 50%; background-color: #38A7FA; margin-left: 2%; img{ width: 100rpx; height: 100rpx; border-radius: 50%; overflow: hidden; } } .centerInfo{ width: 40%; height: 150rpx; margin-left: 2%; .name{ margin-top:-20rpx; span{ font-size: 35rpx; } } .sonName{ margin-top:-110rpx; span{ font-size: 24rpx; color: #7C8489; } } } .timeInfo{ width: 15%; height: 150rpx; margin-left: 6%; .time{ margin-top:-20rpx; color: #92A0A1; font-size: 25rpx; position: absolute; } .infoNum{ width:50rpx; display:flex; align-items:center; justify-content:center; height: 30rpx; border-radius: 10rpx; background-color: #93D5ED; margin-left: 10rpx; margin-top: 70rpx; } } .top{ width: 15%; height: 150rpx; background-color: #C4C7CD; color: #fff; font-size: 34rpx; text-align:center } .delect{ width: 15%; height: 150rpx; background-color: #FF3B32; color: #fff; font-size: 34rpx; text-align:center } } } } li[data-type="0"]{ transform: translate3d(0,0,0); } li[data-type="1"]{ transform: translate3d(-400rpx,0,0); }
js主要代碼:
<script> import card from '@/components/card' export default { data () { return { userInfo: {}, commitInfo:[ { img:"http://img3.imgtn.bdimg.com/it/u=3067730600,935028889&fm=27&gp=0.jpg", name:"旺財", sonName:"今晚去吃飯嗎?", time:"19:08", infoNum:"9", top:false, type:0 }, { img:"http://img1.imgtn.bdimg.com/it/u=1257196754,3171363795&fm=27&gp=0.jpg", name:"前端學習群", sonName:"hanber:異步與同步的問題", time:"02:08", infoNum:"99+", top:false, type:0 }, { img:"https://ss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=1672209094,624238697&fm=27&gp=0.jpg", name:"小學同學", sonName:"好久不見,最近好嗎?", time:"02:08", infoNum:"9", top:false, type:0 }, { img:"https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=1312347818,1612941824&fm=200&gp=0.jpg", name:"老媽", sonName:"啥時候回家一趟呀?", time:"23:08", infoNum:"1", top:false, type:0 }, { img:"http://img2.imgtn.bdimg.com/it/u=1093392508,3329264726&fm=27&gp=0.jpg", name:"AD動漫群", sonName:"ghost:《你的名字》求資源", time:"02:08", infoNum:"99+", top:false, type:0 } ] } }, components: { card }, methods: { // 滑動開始 touchStart(e){ // 獲取移動距離,可以通過打印出e,然后分析e的值得出 this.startX = e.mp.changedTouches[0].clientX; }, // 滑動結束 touchEnd(e,index){ // 獲取移動距離 this.endX = e.mp.changedTouches[0].clientX; if(this.startX-this.endX > 10){ for(let i=0;i<this.commitInfo.length;i++){ this.commitInfo[i].type = 0 } this.commitInfo[index].type = 1 } else if(this.startX-this.endX < -10){ for(let i=0;i<this.commitInfo.length;i++){ this.commitInfo[i].type = 0 } } }, // 點擊回復原狀 recover(index){ this.commitInfo[index].type = 0 }, getUserInfo () { // 調用登錄接口 wx.login({ success: () => { wx.getUserInfo({ success: (res) => { this.userInfo = res.userInfo } }) } }) }, // 置頂 top(index){ this.commitInfo[index].top = !this.commitInfo[index].top; this. recover(index); }, // 刪除 delect(index){ this.commitInfo.splice(index,1); } }, created () { // 調用應用實例的方法獲取全局數據 this.getUserInfo() } } </script>
看完了這篇文章,相信你對“mpvue小程序如何實現仿qq左滑置頂刪除組件”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。