画布HTML5用于移动触摸滚动

时间:2019-09-16 04:51:37

标签: javascript html canvas html5-canvas

我正在用画布html创建一个用于移动和网络的小游戏,如果将鼠标悬停在画布图像上,我们必须在特定位置上找到隐藏的项目。我在画布上放了一张大图片,应该可以在网络和移动设备上滚动。

我没有放置鼠标光标,而是放了一个放大镜图像,还制作了另一个画布以实现缩放功能,以查看放大镜。

我一直停留在移动触摸屏上,在该触摸屏上我已经放置了放大镜图像,并且无论手指触摸到哪里它都在移动,但是我也希望画布图像可以水平滚动,因为我放置了event.preventdefault并且它停止了画布触摸放大镜时移动的图像。我希望它在不触摸放大镜图像时可以滚动。有人可以帮我吗?

function init(){

  // Initialise our object
  obj = {x:50, y:50, w:250, h:250};
  var canvas = document.getElementById("dndcanvas");
  var zoom = document.getElementById("zoom");
  var zoomMobile = document.getElementById("zoomMobile");
  var zoomMobileCtx = zoomMobile.getContext("2d");
  var zoomCtx = zoom.getContext("2d");
  var ctx = canvas.getContext('2d');
  // canvas.width = window.innerWidth;
   canvas.height = window.innerHeight;

  // Add eventlistener to canvas
  canvas.addEventListener('touchmove', function(e) {
    //Assume only one touch/only process one touch even if there's more
    var touch = event.targetTouches[0];

    // Is touch close enough to our object?
    if(detectHit(obj.x, obj.y, touch.pageX, touch.pageY, obj.w, obj.h)) {

      // Assign new coordinates to our object
      obj.x = touch.pageX -220;
      obj.y = touch.pageY -220;

      zoomMobileCtx.fillStyle = "white";

      zoomMobileCtx.fillRect(0,0, zoom.width, zoom.height);
      zoomMobileCtx.drawImage(canvas, obj.x, obj.y, 200, 100, 0,0, 400, 200);

      zoomMobile.style.top = touch.pageY - 177 + "px"
      zoomMobile.style.left = touch.pageX - 185 + "px"
      zoomMobile.style.display = "block";

      // Redraw the canvas
      drawMobile();

    }
    e.preventDefault();
  }, false);

   function detectHit(x1,y1,x2,y2,w,h) {


      //Very simple detection here
      if(x2-x1>w) return false;
      if(y2-y1>h) return false;



      return true;
    }

  // touch start to get the magnify glass
 canvas.addEventListener("touchstart", function (e) {
  drawMobile();

  e.preventDefault();
}, false);





  // Zoom effect for web
  canvas.addEventListener("mousemove", function(e){

      var mousePos = getMousePos(canvas, e);
      var one = document.getElementById('img1');
      console.log(mousePos.x);

       if(mousePos.x == 450 )
           {
            ctx.drawImage(one,450,30,80,80);
           }

      zoomCtx.fillStyle = "white";

      zoomCtx.fillRect(0,0, zoom.width, zoom.height);
      zoomCtx.drawImage(canvas, e.x, e.y, 200, 100, 0,0, 400, 200);

      zoom.style.top = e.pageY + 10 + "px"
      zoom.style.left = e.pageX + 10 + "px"
      zoom.style.display = "block";
  });



      function getMousePos(canvas, e) {
          var rect = canvas.getBoundingClientRect();
          return {
              x: e.clientX - rect.left,
              y: e.clientY - rect.top
          };

       }

        draw();

}

function draw(){     canvas = document.getElementById(“ dndcanvas”);

ctx = canvas.getContext('2d');
// ctx.canvas.width  = window.innerWidth;
 ctx.canvas.height = window.innerHeight;

  var img = document.getElementById('img');
  var scream = document.getElementById('scream');

  ctx.drawImage(scream,0,0,canvas.width, canvas.height);

//ctx.drawImage(img,obj.x, obj.y, obj.w, obj.h);

}

function drawMobile(){     canvas = document.getElementById(“ dndcanvas”);

ctx = canvas.getContext('2d');
// ctx.canvas.width  = window.innerWidth;
 ctx.canvas.height = window.innerHeight;

var img = document.getElementById('img');
var scream = document.getElementById('scream');

ctx.drawImage(scream,0,0,canvas.width, canvas.height);

ctx.drawImage(img,obj.x, obj.y, 500, 500);

}

当不触摸放大图像时如何使画布图像可滚动?请提供任何帮助。

0 个答案:

没有答案