update.js 1.84 KB
import {
  getNewScale
} from './core/scale'

export default function update () {
  const self = this

  if (!self.src) return

  self.__oneTouchStart = (touch) => {
    self.touchX0 = Math.round(touch.x)
    self.touchY0 = Math.round(touch.y)
  }

  self.__oneTouchMove = (touch) => {
    let xMove, yMove
    // 计算单指移动的距离
    if (self.touchended) {
      return self.updateCanvas()
    }
    xMove = Math.round(touch.x - self.touchX0)
    yMove = Math.round(touch.y - self.touchY0)

    const imgLeft = Math.round(self.rectX + xMove)
    const imgTop = Math.round(self.rectY + yMove)

    self.outsideBound(imgLeft, imgTop)

    self.updateCanvas()
  }

  self.__twoTouchStart = (touch0, touch1) => {
    let xMove, yMove, oldDistance

    self.touchX1 = Math.round(self.rectX + self.scaleWidth / 2)
    self.touchY1 = Math.round(self.rectY + self.scaleHeight / 2)

    // 计算两指距离
    xMove = Math.round(touch1.x - touch0.x)
    yMove = Math.round(touch1.y - touch0.y)
    oldDistance = Math.round(Math.sqrt(xMove * xMove + yMove * yMove))

    self.oldDistance = oldDistance
  }

  self.__twoTouchMove = (touch0, touch1) => {
    const { oldScale, oldDistance, scale, zoom } = self

    self.newScale = getNewScale(oldScale, oldDistance, zoom, touch0, touch1)

    //  设定缩放范围
    self.newScale <= 1 && (self.newScale = 1)
    self.newScale >= scale && (self.newScale = scale)

    self.scaleWidth = Math.round(self.newScale * self.baseWidth)
    self.scaleHeight = Math.round(self.newScale * self.baseHeight)
    const imgLeft = Math.round(self.touchX1 - self.scaleWidth / 2)
    const imgTop = Math.round(self.touchY1 - self.scaleHeight / 2)

    self.outsideBound(imgLeft, imgTop)

    self.updateCanvas()
  }

  self.__xtouchEnd = () => {
    self.oldScale = self.newScale
    self.rectX = self.imgLeft
    self.rectY = self.imgTop
  }
}