AlloyFinger添加缩放手势

2022-12-01  本文已影响0人  simplez_
coding.gif

zoom.js

import AlloyFinger from 'alloyfinger'

export default function addAlloyFinger(el) {
  el.setAttribute('style', 'transform-origin: 50% 50%;')

  let cacheX = 0
  let cacheY = 0
  let currentScale = 1.0
  const alloy = new AlloyFinger(el, {
    pinch: function(evt) {
      evt.stopPropagation()
      if (evt.zoom > 0.5 && evt.zoom < 2.0) {
        currentScale = evt.zoom
        el.style.transform = `scale(${currentScale})`
      }
      console.log('scale---', evt.zoom, ' ', currentScale)
    },
    pressMove: function(evt) {
      evt.stopPropagation()
      if (currentScale <= 1) {
        return
      }
      console.log('pressmove', evt.deltaX, currentScale)
      cacheX += evt.deltaX / currentScale
      cacheY += evt.deltaY / currentScale

      const absX = Math.abs(cacheX)
      const absY = Math.abs(cacheY)

      if (absX > 300 || absY > 300) {
        cacheX = (cacheX > 0 ? +1 : -1) * Math.min(absX, 300)
        cacheY = (cacheY > 0 ? +1 : -1) * Math.min(absY, 300)
      }
      el.style.transform = `translate(${cacheX}px, ${cacheY}px) scale(${currentScale})`
    },
    doubleTap: function(evt) {
      evt.stopPropagation()
      currentScale = 1.0
      cacheX = 0
      cacheY = 0
      el.style.transform = `translate(${cacheX}px, ${cacheY}px) scale(${currentScale})`
    },
    multipointEnd: function() {
    }
  })

  return alloy
}

调用:

import addAlloyFinger from '@/utils/zoom.js'

// 以iframe为例
const el = this.$refs['iframeRef'].contentWindow.document.body.querySelector('#viewerContainer')

addAlloyFinger(el)
上一篇 下一篇

猜你喜欢

热点阅读