zoukankan      html  css  js  c++  java
  • vue手势解决方案

    1、需求

      因为项目中要做一个可以移动、旋转和放缩具有合成图片的功能,例如:

    剑可以随意移动,然后把位移、旋转角度和放缩值传给后台进行合成。

    2、解决方案

    网上搜到手势插件AlloyFinger,https://github.com/AlloyTeam/AlloyFinger

    首先安装AlloyFinger:npm install alloyfinger

    然后在Vue文件里面引用:import AlloyFinger from 'alloyfinger'

    使用方法:

    mounted() {
          this.getData();
          this.requireList = document.getElementsByClassName('required');
          let swordEle = document.getElementsByClassName('swordPic')[0];
          let bwidth, bheight, swidth, sheight;
          Transform(swordEle);
          var initScale = 1;
          var af = new AlloyFinger(swordEle, {
            touchStart: function () {
              console.log('touchStart')
            },
            touchMove: function (evt) {
              swordEle.style.translateX += evt.deltaX;
              swordEle.style.translateY += evt.deltaY;
              evt.preventDefault();
            },
            touchEnd: function () {
              console.log('end')
              console.log(swordEle.style.transform)
            },
            touchCancel: function () {
              console.log('cancel')
            },
            multipointStart: function () {
              initScale = swordEle.scaleX;
            },
            multipointEnd: function () {
            },
            tap: function () {
            },
            doubleTap: function () {
            },
            longTap: function () {
            },
            singleTap: function () {
            },
            rotate: function (evt) {
              swordEle.rotateZ += evt.angle;
            },
            pinch: function (evt) {
              swordEle.scaleX = swordEle.scaleY = initScale * evt.scale;
            },
            pressMove: function (evt) {
              let widthDiff = bwidth - swidth;
              let heightDiff = bheight - sheight;
              console.log('diff' + widthDiff + ' ' + heightDiff)
              console.log('translateX:' + swordEle.translateX  + '' + swordEle.translateY )
              if (((evt.deltaX>0)&&(swordEle.translateX >= widthDiff))||((evt.deltaY>0)&&(swordEle.translateY >= heightDiff))||((swordEle.translateX<0)&&((evt.deltaX<0)))||((swordEle.translateY<0)&&((evt.deltaY<0)))) {
                console.log('越界')
              } else {
                swordEle.translateX += evt.deltaX;
                swordEle.translateY += evt.deltaY;
              }
    
              console.log('pressmve:' + swordEle.translateX)
              console.log('pressmve:' + swordEle.translateY)
            },
            swipe: function (evt) {
    //          console.log("swipe" + evt.direction);
            }
          });
          document.getElementById('coverPic').onload = function () {
            bwidth = this.width;
            bheight = this.height;
            console.log(bwidth + ' ' + bheight)
            if (document.body.scrollHeight - document.body.clientHeight > 20) {
              document.body.scrollTop = document.body.scrollHeight;
            }
          }
          document.getElementById('swordEle').onload = function () {
            swidth = this.width;
            sheight = this.height;
            console.log(swidth + ' ' + sheight)
          }
        },
  • 相关阅读:
    汇编指令:ldr和str,ldm和stm的区别
    面向对象(成员(变量,方法,属性)组合并嵌套)
    面向对象三大特性编写面向对象程序,self到底是谁
    内置函数二. 递归 二分法
    内置函数
    生成器;三元表达式, 推导式
    函数名的应用,闭包,迭代器
    函数的进阶
    闭包,迭代器
    函数
  • 原文地址:https://www.cnblogs.com/lvhw/p/6793449.html
Copyright © 2011-2022 走看看