vue3通過指令判斷頁(yè)面向左或者向右滑動(dòng)

export const sliderDom = {
  mounted(el, binding) {
    addEventListener(el, binding)
  },
  unmounted(el) {
    removeEventListener(el)
  }
}
function removeEventListener(el) {
  el.removeEventListener('touchstart', () => {})
  el.removeEventListener('touchmove', () => {})
  el.removeEventListener('touchend', () => {})
}

function addEventListener(el, { value }) {
  const { leftDisabled = false, rightDisabled = false, elId, handleChange } = value

  // 縱向滑動(dòng)時(shí)禁止水平滑動(dòng)侍瑟,水平滑動(dòng)時(shí)禁止縱向滑動(dòng)倔丈;
  // 水平滑動(dòng)結(jié)束超過屏幕二分之一時(shí)則toggle;
  // 最大可滑動(dòng)不超過屏幕的三分之二瓦呼;
  let startX = 0
  let startY = 0
  let endX = 0
  let endY = 0
  let dValueX = 0
  let dValueY = 0
  let horizontalMoved = false
  let verticalMoved = false
  const filterEl = e => {
    return e.target.id === elId
  }
  const onTouchStart = e => {
    if (filterEl(e)) {
      startX = e.targetTouches[0].pageX
      startY = e.targetTouches[0].pageY
    }
  }

  const onTouchMove = e => {
    if (filterEl(e)) {
      endX = e.targetTouches[0].pageX
      endY = e.targetTouches[0].pageY
      dValueX = Math.abs(startX - endX)
      dValueY = Math.abs(startY - endY)

      // 水平滑動(dòng)長(zhǎng)度大于縱向滑動(dòng)長(zhǎng)度背率,選擇水平滑動(dòng)
      if (dValueX > dValueY) {
        if (verticalMoved) {
          e.preventDefault()
          return
        } else horizontalMoved = true

        e.preventDefault()
      } else {
        if (horizontalMoved) e.preventDefault()
        else verticalMoved = true
        verticalMoved = true
      }
    }
  }

  const onTouchEnd = e => {
    if (filterEl(e)) {
      // const range = window.screen.width / 3
      const range = 100
      if (horizontalMoved) {
        if (dValueX > range) {
          if (startX > endX) {
            // console.log('向左劃')
            if (!leftDisabled) handleChange('left')
          } else if (startX < endX) {
            // console.log('向右劃')
            if (!rightDisabled) handleChange('right')
          }
        }
      }
      if (verticalMoved) {
        // 處理縱向滑動(dòng)邏輯
      }
      horizontalMoved = false
      verticalMoved = false
      startX = endX = 0
      startY = endY = 0
    }
  }
  el.addEventListener('touchstart', onTouchStart)
  el.addEventListener('touchmove', onTouchMove)
  el.addEventListener('touchend', onTouchEnd)
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末焚鹊,一起剝皮案震驚了整個(gè)濱河市放接,隨后出現(xiàn)的幾起案子究飞,更是在濱河造成了極大的恐慌倘感,老刑警劉巖放坏,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異老玛,居然都是意外死亡淤年,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門蜡豹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來麸粮,“玉大人,你說我怎么就攤上這事余素”荩” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵桨吊,是天一觀的道長(zhǎng)威根。 經(jīng)常有香客問我,道長(zhǎng)视乐,這世上最難降的妖魔是什么洛搀? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮佑淀,結(jié)果婚禮上留美,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好谎砾,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布逢倍。 她就那樣靜靜地躺著,像睡著了一般景图。 火紅的嫁衣襯著肌膚如雪较雕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天挚币,我揣著相機(jī)與錄音亮蒋,去河邊找鬼。 笑死妆毕,一個(gè)胖子當(dāng)著我的面吹牛慎玖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播笛粘,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼趁怔,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了闰蛔?” 一聲冷哼從身側(cè)響起痕钢,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎序六,沒想到半個(gè)月后任连,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡例诀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年随抠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片繁涂。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拱她,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扔罪,到底是詐尸還是另有隱情秉沼,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布矿酵,位于F島的核電站唬复,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏全肮。R本人自食惡果不足惜敞咧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辜腺。 院中可真熱鬧休建,春花似錦乍恐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至邑彪,卻和暖如春瞧毙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寄症。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矩动,地道東北人有巧。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像悲没,于是被迫代替她去往敵國(guó)和親篮迎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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