最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Vue實現(xiàn)移動端左滑刪除效果附源碼

 更新時間:2019年05月16日 10:41:16   投稿:mrr  
這篇文章主要介紹了使用Vue實現(xiàn)移動端左滑刪除效果,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下

左滑刪除在移動端是很常見的一種操作,常見于刪除購物車中的商品,刪除收藏夾中文章等等場景。我們只需要手指按住要刪除的對象,然后輕輕向左滑動,便會出現(xiàn)刪除按鈕,然后點擊刪除按鈕即可刪除對象。

 點擊下載源碼

今天我給大家介紹的移動端左滑刪除效果是基于Vue2實現(xiàn)的,結(jié)合以電商平臺的刪除購物車商品為例,來看實現(xiàn)步驟。

準備

安裝vue項目過程已忽略,如果不懂vue的同學(xué)可以上官網(wǎng)看下:https://cn.vuejs.org/v2/guide/installation.html#NPM

我們使用安裝一個webpack模板:

vue init webpack test

組件

我們創(chuàng)建一個左滑刪除組件,在src/components目錄下創(chuàng)建文件:deleteTemplate.vue,然后編寫模板代碼:

<template>
  <div class="delete">
    <div class="slider">
      <div class="content" @touchstart='touchStart' @touchmove='touchMove' @touchend='touchEnd' :style="deleteSlider">
        <!-- 插槽中放具體項目中需要內(nèi)容 -->
        <slot name="img"></slot>
        <slot name="title"></slot>
        <slot name="price"></slot>
        <!-- 默認插槽 -->
        <slot></slot>
      </div>
      <div class="remove" ref='remove' @click="deleteLine">
        刪除
      </div>
    </div>
  </div>
</template>

我們這個模板是一個要左滑刪除的列表項,綁定了手勢滑動觸控動作響應(yīng),在其中加入了圖片、商品名稱和價格等內(nèi)容,以及一個刪除按鈕。

接下來,我們看組件中的js部分:

<script>
export default {
  props: ['index'],
  data() {
    return {
      startX: 0,  //觸摸位置
      endX: 0,   //結(jié)束位置
      moveX: 0,  //滑動時的位置
      disX: 0,  //移動距離
      deleteSlider: '',//滑動時的效果,使用v-bind:style="deleteSlider"
    }
  },
  methods:{
    touchStart(ev){
      ev = ev || event
      //tounches類數(shù)組,等于1時表示此時有只有一只手指在觸摸屏幕
      if(ev.touches.length == 1){
        // 記錄開始位置
        this.startX = ev.touches[0].clientX;
      }
    },
    touchMove(ev){
      ev = ev || event;
      //獲取刪除按鈕的寬度,此寬度為滑塊左滑的最大距離
      let wd = this.$refs.remove.offsetWidth;
      if(ev.touches.length == 1) {
        // 滑動時距離瀏覽器左側(cè)實時距離
        this.moveX = ev.touches[0].clientX
        //起始位置減去 實時的滑動的距離,得到手指實時偏移距離
        this.disX = this.startX - this.moveX;
        //console.log(this.disX)
        // 如果是向右滑動或者不滑動,不改變滑塊的位置
        if (this.disX < 0 || this.disX == 0) {
          this.deleteSlider = "transform:translateX(0px)";
        } else if (this.disX > 0) {// 大于0,表示左滑了,此時滑塊開始滑動 
          //具體滑動距離我取的是 手指偏移距離*5。
          this.deleteSlider = "transform:translateX(-" + this.disX*5 + "px)";
          // 最大也只能等于刪除按鈕寬度 
          if (this.disX*5 >= wd) {
            this.deleteSlider = "transform:translateX(-" +wd+ "px)";
          }
        }
      }
    },
    touchEnd(ev){
      ev = ev || event;
      let wd = this.$refs.remove.offsetWidth;
      if (ev.changedTouches.length == 1) {
        let endX = ev.changedTouches[0].clientX;
        this.disX = this.startX - endX;
        //console.log(this.disX)
        //如果距離小于刪除按鈕一半,強行回到起點
        if ((this.disX*5) < (wd/2)) {
          this.deleteSlider = "transform:translateX(0px)";
        }else{
          //大于一半 滑動到最大值
          this.deleteSlider = "transform:translateX(-"+wd+ "px)";
        }
      }
    },
    deleteLine (){
      this.deleteSlider = "transform:translateX(0px)";
      this.$emit('deleteLine');
    }  
  }
}
</script>

我們在代碼中主要用到三個移動端觸控事件:

touchstart : 手指放到屏幕上時觸發(fā)

touchmove : 手指在屏幕上滑動式觸發(fā)

touchend :手指離開屏幕時觸發(fā)

每個觸控事件被觸發(fā)后,會生成一個event對象,event對象里額外包括以下三個觸控列表

touches : 當(dāng)前屏幕上所有手指的列表

targetTouches : 當(dāng)前dom元素上手指的列表,盡量使用這個代替touches

changedTouches : 涉及當(dāng)前事件的手指的列表,盡量使用這個代替touches

這些列表里的每次觸控由touch對象組成,touch對象里包含著觸控信息,主要屬性如下:

clientX / clientY : 觸摸點相對瀏覽器窗口的位置

pageX / pageY : 觸摸點相對于頁面的位置

screenX / screenY : 觸摸點相對于屏幕的位置

在上述代碼中還可以看到,當(dāng)滑塊沒有超過刪除按鈕的一半時自動回到起點位置。點擊刪除后調(diào)用deleteLine刪除當(dāng)前行。

組件調(diào)用

我們在HelloWorld.vue中建立模板,引入組件deleteSlider,代碼如下:

<template>
 <div class="mylist">  
  <delete-slider v-for="(list, index) in dataList" :key="index" @deleteLine="deleteLine(index, list.id)">
   <div class="li-img" slot="img"><img :src="list.img" alt=""></div>
   <h3 class="li-title" slot="title">{{list.title}}</h3>
   <p class="li-price" slot="price">{{list.price}}</p>
  </delete-slider> 
 </div>
</template>

<script>


import deleteSlider from '@/components/deleteTemplate.vue'

export default {
 components: {
  deleteSlider
 },
 data () {
  return {
   dataList: [
    {
     id: 1,
     img: 'static/a1.jpg',
     title: '法國專柜2019夏季新款修身顯瘦氣質(zhì)包臀短裙鏤空蕾絲性感連衣裙子',
     price: '399.00'
    },
    {
     id: 2,
     img: 'static/a2.jpg',
     title: 'VERAMOON 亮片印花短袖連衣裙女夏甜美露背性感泡泡袖修身短裙',
     price: '689.00'
    },
    {
     id: 3,
     img: 'static/a3.jpg',
     title: 'famous 仙氣木耳邊紫色小碎花短裙a字雪紡連衣裙女',
     price: '199.00'
    },
    {
     id: 4,
     img: 'static/a4.jpg',
     title: '灰灰定制 2019春夏新款小香風(fēng)粗花呢連衣裙女法式名媛復(fù)古短裙M家',
     price: '298.00'
    }
   ]
  }
 },
 methods:{
   deleteLine (index, id){
    console.log(id);
    
    this.dataList.splice(index, 1)
   }   
  }
}
</script>

注意實際應(yīng)用中數(shù)據(jù)源可用異步加載,在刪除的時候或許要異步請求后端來真正完成刪除操作。

總結(jié)

以上所述是小編給大家介紹的使用Vue實現(xiàn)移動端左滑刪除效果附源碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • vue2 webpack proxy與nginx配置方式

    vue2 webpack proxy與nginx配置方式

    這篇文章主要介紹了vue2 webpack proxy與nginx配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • element表格數(shù)據(jù)部分模糊的實現(xiàn)代碼

    element表格數(shù)據(jù)部分模糊的實現(xiàn)代碼

    這篇文章給大家介紹了element表格數(shù)據(jù)模糊的實現(xiàn)代碼,文中有詳細的效果展示和實現(xiàn)代碼供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2024-01-01
  • vue實現(xiàn)滾動鼠標滾輪切換頁面

    vue實現(xiàn)滾動鼠標滾輪切換頁面

    這篇文章主要為大家詳細介紹了vue實現(xiàn)滾動鼠標滾輪切換頁面,類似于縱向走馬燈,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 使用vue和element-ui上傳圖片及視頻文件方式

    使用vue和element-ui上傳圖片及視頻文件方式

    這篇文章主要介紹了使用vue和element-ui上傳圖片及視頻文件方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue基于Echarts的拖拽數(shù)據(jù)可視化功能實現(xiàn)

    vue基于Echarts的拖拽數(shù)據(jù)可視化功能實現(xiàn)

    這篇文章主要給大家介紹了關(guān)于vue基于Echars的拖拽數(shù)據(jù)可視化功能實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 尤大大新活petite-vue的實現(xiàn)

    尤大大新活petite-vue的實現(xiàn)

    打開尤大大的GitHub,發(fā)現(xiàn)多了個叫 petite-vue 的東西,Vue3 和 Vite 還沒學(xué)完呢,又開始整新東西了?本文就來介紹一下
    2021-07-07
  • vue的diff算法知識點總結(jié)

    vue的diff算法知識點總結(jié)

    本篇文章給大家分享了關(guān)于vue的diff算法的相關(guān)知識點總結(jié),有興趣的朋友參考學(xué)習(xí)下。
    2018-03-03
  • Vue Cli3 創(chuàng)建項目的方法步驟

    Vue Cli3 創(chuàng)建項目的方法步驟

    Vue CLI是一個用于快速Vue.js開發(fā)的完整系統(tǒng)。這篇文章主要介紹了Vue Cli3 創(chuàng)建項目的方法步驟,非常具有實用價值,需要的朋友可以參考下
    2018-10-10
  • 解決vue頁面刷新或者后退參數(shù)丟失的問題

    解決vue頁面刷新或者后退參數(shù)丟失的問題

    下面小編就為大家分享一篇解決vue頁面刷新或者后退參數(shù)丟失的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 解決vue-cli?卸載不掉的問題

    解決vue-cli?卸載不掉的問題

    這篇文章主要介紹了vue-cli?卸載不掉的問題解決方法,文中給大家介紹了安裝后問題分析及解決方案,需要的朋友可以參考下
    2023-01-01

最新評論

瓮安县| 贺州市| 沙坪坝区| 林口县| 麦盖提县| 昌宁县| 怀宁县| 天水市| 邹城市| 丹东市| 栖霞市| 朝阳区| 建昌县| 双鸭山市| 芒康县| 哈密市| 台中县| 门头沟区| 普陀区| 辽源市| 邢台县| 中阳县| 内丘县| 元朗区| 金平| 且末县| 平遥县| 临江市| 米泉市| 大渡口区| 凯里市| 桓台县| 桦南县| 韩城市| 万盛区| 金坛市| 米林县| 永新县| 隆尧县| 宜章县| 邢台县|