国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Vue無限滑動周選擇日期的組件的示例代碼

2019-11-19 13:28:20
字體:
來源:轉載
供稿:網友

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

先看效果

 思路

根據用戶傳入日期(不傳默認今天),獲取上一周,當周,下一周對應的日期放數組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'),   }  )

根據datas 生成每一周對應的日期

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  }

生成每一個滑動單元的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 記錄滑動起點位置
  • touchmove 獲得滑動距離賦值給 vm.distan.x 實時獲得當前周transform
  • touchend 改變activeIndex的值,當然改變activeIndex的值是不夠的,要實現無限滑動,就要在操作一下dates,如果是左滑刪除dates的第一個元素并且往dates里面push下下周對應日期,如果是右滑刪除最后一個元素并網數組前面unshift上上周對應的日期

坑點

因為這個組件是通過css3的transition來實現動畫的,最開始我是把所用三個滑動元素在css里面寫了transition:transform 0.5s ease-out; 誰知道自己把自己坑了,因為最后我們改變activeIndex后要刪除一個日期,還要往數組里面新增一個元素,這樣就會引起dates的改變,進而引起Vue去重新更新界面,導致動畫又出來了!最后想到的解決辦法就是引入一個變量isAnimation來控制transition的值,只有當滑動的時才開啟過度動畫效果,再偵聽transitionend時間重置isAnimation = false后再更新dates

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 郑州市| 中西区| 大安市| 纳雍县| 抚州市| 桦南县| 扎兰屯市| 德阳市| 石河子市| 穆棱市| 景谷| 桑植县| 清徐县| 阿鲁科尔沁旗| 个旧市| 金溪县| 陇川县| 图们市| 阿荣旗| 呈贡县| 修水县| 广饶县| 定结县| 涪陵区| 雷波县| 大兴区| 永清县| 北海市| 洛宁县| 民县| 东方市| 金门县| 福清市| 历史| 香港 | 洮南市| 南康市| 洱源县| 平泉县| 城步| 邻水|