vue實現(xiàn)左側(cè)滑動刪除

當(dāng)列表向左滑動時,效果如下:


IM截圖20190605174729.jpg

直接封裝成組件,多處可以調(diào)用,話不多說,上代碼

<template>
  <div class="container">
    <ul>
      <li class="list-item " v-for="(item,index) in list " data-type="0" :key="index">
        <div class="list-box" @touchstart.capture="touchStart" @touchend.capture="touchEnd" @click="skip">
          <img class="list-img" :src="item.imgUrl" alt="">
          <div class="list-content">
            <p class="title">{{item.title}}</p>
            <p class="tips">{{item.tips}}</p>
            <p class="time">{{item.time}}</p>
          </div>
        </div>
        <div class="delete" @click="deleteItem" :data-index="index">刪除</div>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  props: {
    list: {
      type: Array,
      required: true
    }
  },
  data () {
    return {
      startX: 0,
      endX: 0
    }
  },
  methods: {
    // 跳轉(zhuǎn)
    skip () {
      if (this.checkSlide()) {
        this.restSlide()
      } else {
        this.$router.push({
          path: '/detail'
        })
      }
    },
    // 滑動開始
    touchStart (e) {
      // 記錄初始位置
      this.startX = e.touches[0].clientX
    },
    // 滑動結(jié)束
    touchEnd (e) {
      // 當(dāng)前滑動的父級元素
      let parentElement = e.currentTarget.parentElement
      // 記錄結(jié)束位置
      this.endX = e.changedTouches[0].clientX
      // 左滑
      if (parentElement.dataset.type == 0 && this.startX - this.endX > 30) {
        this.restSlide()
        parentElement.dataset.type = 1
      }
      // 右滑
      if (parentElement.dataset.type == 1 && this.startX - this.endX < -30) {
        this.restSlide()
        parentElement.dataset.type = 0
      }
      this.startX = 0
      this.endX = 0
    },
    // 判斷當(dāng)前是否有滑塊處于滑動狀態(tài)
    checkSlide () {
      let listItems = document.querySelectorAll('.list-item')
      for (let i = 0; i < listItems.length; i++) {
        if (listItems[i].dataset.type == 1) {
          return true
        }
      }
      return false
    },
    // 復(fù)位滑動狀態(tài)
    restSlide () {
      let listItems = document.querySelectorAll('.list-item')
      // 復(fù)位
      for (let i = 0; i < listItems.length; i++) {
        listItems[i].dataset.type = 0
      }
    },
    // 刪除
    deleteItem (e) {
      // 當(dāng)前索引
      let index = e.currentTarget.dataset.index
      // 復(fù)位
      this.restSlide()
      // 刪除
      this.list.splice(index, 1)
    }
  }
}
</script>
<style scoped lang="scss">
.container{
  padding-bottom: 80px;
}
.page-title{
  text-align: center;
  font-size: 17px;
  padding: 10px 15px;
  position: relative;
}
.page-title:after{
  content: " ";
  position: absolute;
  left: 0;
  bottom: 0;
  right: 0;
  height: 1px;
  border-bottom: 1px solid #ccc;
  color: #ccc;
  -webkit-transform-origin: 0 100%;
  transform-origin: 0 100%;
  -webkit-transform: scaleY(0.5);
  transform: scaleY(0.5);
  z-index: 2;
}
.list-item{
  position: relative;
  height: 1.6rem;
  -webkit-transition: all 0.2s;
  transition: all 0.2s;
}
.list-item[data-type="0"]{
  transform: translate3d(0,0,0);
}
.list-item[data-type="1"]{
  transform: translate3d(-2rem,0,0);
}
.list-item:after{
  content: " ";
  position: absolute;
  left: 0.2rem;
  bottom: 0;
  right: 0;
  height: 1px;
  border-bottom: 1px solid #ccc;
  color: #ccc;
  -webkit-transform-origin: 0 100%;
  transform-origin: 0 100%;
  -webkit-transform: scaleY(0.5);
  transform: scaleY(0.5);
  z-index: 2;
}
.list-box{
  padding: 0.2rem;
  background: #fff;
  display: flex;
  align-items: center;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
  justify-content: flex-end;
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  font-size: 0;
}
.list-item .list-img{
  display: block;
  width: 1rem;
  height: 1rem;
}
.list-item .list-content{
  padding: 0.1rem 0 0.1rem 0.2rem;
  position: relative;
  flex: 1;
  flex-direction: column;
  align-items: flex-start;
  justify-content: center;
  overflow: hidden;
}
.list-item .title{
  display: block;
  color: #333;
  overflow: hidden;
  font-size: 15px;
  font-weight: bold;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.list-item .tips{
  display: block;
  overflow: hidden;
  font-size: 12px;
  color: #999;
  line-height: 20px;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.list-item .time{
  display: block;
  font-size: 12px;
  position: absolute;
  right: 0;
  top: 0.1rem;
  color: #666;
}
.list-item .delete{
  width: 2rem;
  height: 1.6rem;
  background: #ff4949;
  font-size: 17px;
  color: #fff;
  text-align: center;
  line-height: 1.6rem;
  position: absolute;
  top:0;
  right: -2rem;
}
</style>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嚣潜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子椅贱,更是在濱河造成了極大的恐慌懂算,老刑警劉巖只冻,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異计技,居然都是意外死亡喜德,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門垮媒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舍悯,“玉大人,你說我怎么就攤上這事睡雇∶瘸模” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵它抱,是天一觀的道長秕豫。 經(jīng)常有香客問我,道長观蓄,這世上最難降的妖魔是什么混移? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮侮穿,結(jié)果婚禮上歌径,老公的妹妹穿的比我還像新娘。我一直安慰自己撮珠,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布金矛。 她就那樣靜靜地躺著芯急,像睡著了一般。 火紅的嫁衣襯著肌膚如雪驶俊。 梳的紋絲不亂的頭發(fā)上娶耍,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音饼酿,去河邊找鬼榕酒。 笑死,一個胖子當(dāng)著我的面吹牛故俐,可吹牛的內(nèi)容都是我干的想鹰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼药版,長吁一口氣:“原來是場噩夢啊……” “哼辑舷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起槽片,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤何缓,失蹤者是張志新(化名)和其女友劉穎肢础,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碌廓,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡传轰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了谷婆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片慨蛙。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖波材,靈堂內(nèi)的尸體忽然破棺而出股淡,到底是詐尸還是另有隱情,我是刑警寧澤廷区,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布唯灵,位于F島的核電站,受9級特大地震影響隙轻,放射性物質(zhì)發(fā)生泄漏埠帕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一玖绿、第九天 我趴在偏房一處隱蔽的房頂上張望敛瓷。 院中可真熱鬧,春花似錦斑匪、人聲如沸呐籽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狡蝶。三九已至,卻和暖如春贮勃,著一層夾襖步出監(jiān)牢的瞬間贪惹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工寂嘉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奏瞬,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓泉孩,卻偏偏與公主長得像硼端,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子寓搬,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容