HTML5 Panning based on Mouse Movement

后端 未结 2 2074
陌清茗
陌清茗 2020-12-19 06:18

I\'m trying to implement functionality to \"pan\" inside a canvas in HTML5 and I am unsure about the best way to go about accomplishing it.

Currently - I am trying t

2条回答
  •  一个人的身影
    2020-12-19 06:48

    It depends on how you want panning with mouse movement to be implemented, but today it's often 'realtime' panning in that you can drag around. I tried to update your fiddle a little: http://jsfiddle.net/pimvdb/VWn6t/3/.

    var isDown = false; // whether mouse is pressed
    var startCoords = []; // 'grab' coordinates when pressing mouse
    var last = [0, 0]; // previous coordinates of mouse release
    
    canvas.onmousedown = function(e) {
        isDown = true;
    
        startCoords = [
            e.offsetX - last[0], // set start coordinates
            e.offsetY - last[1]
       ];
    };
    
    canvas.onmouseup   = function(e) {
        isDown = false;
    
        last = [
            e.offsetX - startCoords[0], // set last coordinates
            e.offsetY - startCoords[1]
        ];
    };
    
    canvas.onmousemove = function(e)
    {
        if(!isDown) return; // don't pan if mouse is not pressed
    
        var x = e.offsetX;
        var y = e.offsetY;
    
        // set the canvas' transformation matrix by setting the amount of movement:
        // 1  0  dx
        // 0  1  dy
        // 0  0  1
    
        ctx.setTransform(1, 0, 0, 1,
                         x - startCoords[0], y - startCoords[1]);
    
        render(); // render to show changes
    
    }
    

提交回复
热议问题