vue之flex布局实现左滑删除
Posted jessie-xian
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue之flex布局实现左滑删除相关的知识,希望对你有一定的参考价值。
html部分:
<div class="equipmentContent">
<div class="cell" v-for="(item,index) in [1,2,3,4]" :key="index">
<div
class="cell-info"
:style="currentIndex==index?styleObject:''"
@touchstart="handleTouchStart($event, index)"
@touchmove="handleTouchMove($event, index)"
@touchend="handleTouchEnd($event, index)"
>
<div class="cell-info-detail">
<div class="equipment">Xiao Mi MI 6X</div>
<div class="useTime">19-08-03 13:51:50</div>
</div>
</div>
<div class="cell-delete" @click="deleteEquipment(item)">删除</div>
</div>
</div>
css部分:
.equipmentContent
.px2rem(34);
padding-left: @px2rem;
padding-right: @px2rem;
background-color: #fff;
box-sizing: border-box;
.cell
overflow: hidden;
display: flex;
align-items: center;
width: 100%;
.px2rem(122);
height: @px2rem;
border-bottom: 1px solid #F0F0F0;
.cell-info
display: flex;
width: 100%;
flex-shrink: 0;
.cell-info-head
box-sizing: border-box;
/* 设置为IE盒模型 */
width: @px2rem;
height: @px2rem;
.cell-info-head
.px2rem(10);
padding: @px2rem;
.cell-info-detail
display: flex;
flex-direction: column;
justify-content: space-around;
.px2rem(18);
padding: @px2rem 0;
.equipment,
.useTime
.px2rem(40);
height: @px2rem;
font-family: PingFangSC;
font-weight: 400;
color: rgba(51, 51, 51, 1);
line-height: @px2rem;
.equipment,
.useTime
.px2rem(28);
font-size: @px2rem;
text-align: left;
.useTime
color: rgba(153, 153, 153, 1);
.px2rem(5);
margin-top: @px2rem;
.cell-read
display: flex;
align-items: center;
.px2rem(80);
width: @px2rem;
background-color: #ccc;
.cell-delete
.px2rem(118);
width: @px2rem;
background-color: #EA6557;
height: 59px;
background: rgba(234, 101, 87, 1);
border-radius: 4px;
.cell-delete
.px2rem(59);
height: @px2rem;
font-family: PingFangSC;
font-weight: 400;
color: rgba(255, 255, 255, 1);
line-height: @px2rem;
.cell-delete
.px2rem(28);
font-size: @px2rem;
img
.px2rem(55);
width: @px2rem;
height: @px2rem;
img
.px2rem(5);
border-radius: @px2rem;
span
width: 0;
/* 宽度为0 */
.px2rem(18);
font-size: @px2rem;
white-space: nowrap;
margin-left: 5%;
/* 这里一定要用百分比,不然会撑出高度,无法完全缩放为0 */
js部分:
export default
name: 'aiXunIDlogined',
data()
return
startTx: 0, // 开始滑动的x值
endTx: 0, // 滑动后的x值
distanceX: 0, // 滑动距离,在touchmove中动态赋值为endTx - startTx
startMarginLeft: 0, // 开始滑动时的margin-left值
marginLeft: 0,
,
components:
,
computed:
bodyheight()
let height = 0;
let innerHeight = window.innerHeight;
let restheight = innerHeight - height - hotcss.rem2px(5.674, window.innerWidth);
return restheight;
,
// 用于实时更新“信息详情”的margin-left值
styleObject: function ()
return
marginLeft: this.marginLeft + 'px'
,
watch:
,
created() ,
methods:
handleTouchStart(e, index)
if(this.currentIndex!==index)
this.marginLeft=0;
this.currentIndex = index;
this.startTx = e.touches[0].clientX
this.startMarginLeft = this.marginLeft
,
handleTouchMove(e, index)
if (index == this.currentIndex)
this.endTx = e.changedTouches[0].clientX
this.distanceX = this.startTx - this.endTx // 滑动距离
this.marginLeft = this.startMarginLeft - this.distanceX
// console.log(this.marginLeft,'9989999999999990')
if (this.marginLeft > 0)
this.marginLeft = 0
if (this.marginLeft < -118)
this.marginLeft = -118
,
handleTouchEnd(e, index)
// console.log(e)
console.log(index)
if (index == this.currentIndex)
if (this.marginLeft > -30) // margin-left大于-60px则收起
this.marginLeft = 0
else
this.marginLeft = -60 // 否则展开
,
// 点击删除设备
deleteEquipment(item)
console.log("要删除的设备", item)
,
mounted()
以上是关于vue之flex布局实现左滑删除的主要内容,如果未能解决你的问题,请参考以下文章