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

Vue無(wú)限滑動(dòng)周選擇日期的組件的示例代碼

 更新時(shí)間:2018年07月18日 10:37:11   作者:叁木  
這篇文章主要介紹了Vue無(wú)限滑動(dòng)周選擇日期的組件的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧

之前在做一個(gè)手機(jī)端項(xiàng)目的時(shí)候,需要一個(gè)左右滑動(dòng)(按周滑動(dòng))選擇日期插件,而且當(dāng)時(shí)這個(gè)項(xiàng)目沒有用到Vue。當(dāng)時(shí)又沒有找到合適的第三方插件,就花了點(diǎn)時(shí)間用原生JavaScript寫了出來(lái),當(dāng)時(shí)心中就想把它寫成基于Vue的組件,這短時(shí)間閑了把它弄出來(lái)了!,在這個(gè)過程中遇到了一個(gè)坑,后面會(huì)提出來(lái)!

先看效果

 思路

根據(jù)用戶傳入日期(不傳默認(rèn)今天),獲取上一周,當(dāng)周,下一周對(duì)應(yīng)的日期放數(shù)組dates里

let vm = this
  this.dates.push(
   {
    date: moment(vm.defaultDate).subtract(7, 'd').format('YYYY-MM-DD'),
   },
   {
    date: vm.defaultDate,
   },
   {
    date: moment(vm.defaultDate).add(7, 'd').format('YYYY-MM-DD'),
   }
  )

根據(jù)datas 生成每一周對(duì)應(yīng)的日期

getDaies (date) {
   let vm = this,
    arr = []
   let weekOfDate = Number(moment(date).format('E'))
   let weeks = ['日', '一', '二', '三', '四', '五', '六']
   let today = moment()
   let defaultDay = moment(vm.defaultDate)
   for (var i = 0; i < 7; i++) {
    let _theDate = moment(date).subtract(weekOfDate - i, 'd')
    arr.push({
     date: _theDate.format('YYYY-MM-DD'),
     week: weeks[i],
     isToday: _theDate.format('YYYY-MM-DD') === today.format('YYYY-MM-DD'),
     isDay: _theDate.format('E') === defaultDay.format('E')
    })
   }
   return arr
  }

生成每一個(gè)滑動(dòng)單元的style

getTransform (index) {
   let vm = this
   let style = {}
   if (index === vm.activeIndex) {
    style['transform'] = 'translateX('+ vm.distan.x +'px)'
   }
   if (index < vm.activeIndex) {
    style['transform'] = 'translateX(-100%)'
   }
   if (index > vm.activeIndex) {
    style['transform'] = 'translateX(100%)'
   }
   style['transition'] = vm.isAnimation ? 'transform 0.5s ease-out' : 'transform 0s ease-out'
   return style
  }

然后就是處理touchstart touchend touchmove事件了,這里就不貼代碼了,說下邏輯:

  • ouchstart 記錄滑動(dòng)起點(diǎn)位置
  • touchmove 獲得滑動(dòng)距離賦值給 vm.distan.x 實(shí)時(shí)獲得當(dāng)前周transform
  • touchend 改變activeIndex的值,當(dāng)然改變activeIndex的值是不夠的,要實(shí)現(xiàn)無(wú)限滑動(dòng),就要在操作一下dates,如果是左滑刪除dates的第一個(gè)元素并且往dates里面push下下周對(duì)應(yīng)日期,如果是右滑刪除最后一個(gè)元素并網(wǎng)數(shù)組前面unshift上上周對(duì)應(yīng)的日期

坑點(diǎn)

因?yàn)檫@個(gè)組件是通過css3的transition來(lái)實(shí)現(xiàn)動(dòng)畫的,最開始我是把所用三個(gè)滑動(dòng)元素在css里面寫了transition:transform 0.5s ease-out; 誰(shuí)知道自己把自己坑了,因?yàn)樽詈笪覀兏淖僡ctiveIndex后要?jiǎng)h除一個(gè)日期,還要往數(shù)組里面新增一個(gè)元素,這樣就會(huì)引起dates的改變,進(jìn)而引起Vue去重新更新界面,導(dǎo)致動(dòng)畫又出來(lái)了!最后想到的解決辦法就是引入一個(gè)變量isAnimation來(lái)控制transition的值,只有當(dāng)滑動(dòng)的時(shí)才開啟過度動(dòng)畫效果,再偵聽transitionend時(shí)間重置isAnimation = false后再更新dates

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue中關(guān)于this.refs為空出現(xiàn)原因及分析

    vue中關(guān)于this.refs為空出現(xiàn)原因及分析

    這篇文章主要介紹了vue中關(guān)于this.refs為空出現(xiàn)原因及分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • vue 中固定導(dǎo)航欄的實(shí)例代碼

    vue 中固定導(dǎo)航欄的實(shí)例代碼

    今天小編就為大家分享一篇vue 中固定導(dǎo)航欄的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2019-11-11
  • Vue如何跨組件傳遞Slot的實(shí)現(xiàn)

    Vue如何跨組件傳遞Slot的實(shí)現(xiàn)

    這篇文章主要介紹了Vue如何跨組件傳遞Slot的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Composition API思想封裝NProgress示例詳解

    Composition API思想封裝NProgress示例詳解

    這篇文章主要為大家介紹了Composition API思想封裝NProgress示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • element-ui 表格實(shí)現(xiàn)單元格可編輯的示例

    element-ui 表格實(shí)現(xiàn)單元格可編輯的示例

    下面小編就為大家分享一篇element-ui 表格實(shí)現(xiàn)單元格可編輯的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-02-02
  • vue里的axios如何獲取本地json數(shù)據(jù)

    vue里的axios如何獲取本地json數(shù)據(jù)

    這篇文章主要介紹了vue里的axios如何獲取本地json數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue任意關(guān)系組件通信與跨組件監(jiān)聽狀態(tài)vue-communication

    vue任意關(guān)系組件通信與跨組件監(jiān)聽狀態(tài)vue-communication

    這篇文章主要介紹了vue任意關(guān)系組件通信與跨組件監(jiān)聽狀態(tài)vue-communication,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 利用Vite2和Vue3實(shí)現(xiàn)網(wǎng)站國(guó)際化的全過程

    利用Vite2和Vue3實(shí)現(xiàn)網(wǎng)站國(guó)際化的全過程

    vite2已經(jīng)出來(lái)一段時(shí)間了,最近沒忍住嘗試了一下,這篇文章主要給大家介紹了關(guān)于利用Vite2和Vue3實(shí)現(xiàn)網(wǎng)站國(guó)際化的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 詳解axios在vue中的簡(jiǎn)單配置與使用

    詳解axios在vue中的簡(jiǎn)單配置與使用

    本篇文章主要介紹了詳解axios在vue中的簡(jiǎn)單配置與使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2017-05-05
  • 在vue中如何封裝G2圖表

    在vue中如何封裝G2圖表

    這篇文章主要介紹了在vue中如何封裝G2圖表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評(píng)論

武功县| 临清市| 银川市| 迁安市| 华安县| 皋兰县| 永和县| 襄樊市| 遵义市| 密山市| 象山县| 西乌珠穆沁旗| 丘北县| 西峡县| 榆中县| 衡东县| 兴隆县| 常州市| 双峰县| 望都县| 湖口县| 尼木县| 长乐市| 谢通门县| 宁都县| 虞城县| 广昌县| 长寿区| 习水县| 普洱| 盐山县| 呈贡县| 壤塘县| 永德县| 宿松县| 远安县| 吉首市| 凤阳县| 奉化市| 达拉特旗| 安义县|