【问题标题】:Avoid white space when dragging/scrolling an image in Canvas在 Canvas 中拖动/滚动图像时避免出现空白
【发布时间】:2016-01-06 20:57:48
【问题描述】:

所以我在画布 (700x600) 中有一个图像 (1020x736),我正在尝试滚动/拖动图像,以便我可以看到其余部分,除非我不想看到空白区域拖动图像时到达图像边界。

这是我的问题的一个示例

黑色边框表示画布的边框。

这是我目前的代码

var dragging = false;
var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
var lastX;
var lastY;
var translated = 0;

canvas.onmousedown = function(e){
  var evt = e || event;
  dragging = true;
  lastX = evt.offsetX;
  lastY = evt.offsetY;
}

window.onmousemove = function(e){
  var evt = e || event;
  if(dragging){
    var deltaX = evt.offsetX - lastX;
    var deltaY = evt.offsetY - lastY;
    context.translate(deltaX,deltaY);
    lastX = evt.offsetX;
    lastY = evt.offsetY;
    draw();
  }
}

function draw(){
  var image = document.getElementById('img1');

  context.drawImage(image,0,0);
}

canvas.onmouseup = function(e){
  dragging = false;
}


window.onload = draw;

【问题讨论】:

    标签: html canvas scroll drag


    【解决方案1】:

    从左上角开始绘制,以防止图像进入画布很远

    // canvas is the canvas
    // img is the image you are drawing;
    // posX and posY are the location (top left) that the image has been dragged to 
    x = Math.max( -(img.width - canvas.width), Math.min(0, posX));
    y = Math.max( -(img.height - canvas.height), Math.min(0, posY));
    
    ctx.drawImage(img, x, y);
    

    【讨论】:

    • 感谢您的回复。我认为这应该在绘图功能中,对吗?我试过了,它没有改变任何东西。我的代码中的 deltaX 和 deltaY 指的是您代码中的 posX 和 posY。
    • 你必须跟踪拖动图像的绝对位置,否则你无法知道它是否越界。
    猜你喜欢
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2018-09-26
    • 1970-01-01
    相关资源
    最近更新 更多