javascript - 可拖动图像未进入 Canvas

标签 javascript jquery asp.net

<强> Fiddle

$(document).ready(function () {
        var d_canvas = document.getElementById('canvas');
        var context = d_canvas.getContext('2d');
        var background = document.getElementById('background');
        var ballon = document.getElementById('ballon')
        context.drawImage(background, 0, 0);

        $('#ballon').draggable();
    });

当我尝试拖动图像时,它不像在 Canvas 中那样。行为不像 Google map 拖动

最佳答案

我正在回答你之前的问题。您应该使用 drawImage 在 Canvas 上绘制图像,然后在 Canvas 上添加拖动事件的EventListener。

jsfiddle

var drag, canvas, ctx;
var posX = 0, posY = 0;
var lastX, lastY;
$(document).ready(function(){
    canvas=document.getElementById("canvas");
    ctx=canvas.getContext("2d");
    var image=document.createElement("img");
    image.onload=function(){
        canvas.width = 800;
        canvas.height = 400;
        ctx.drawImage(image,posX,posY);
        init();
    }

    image.src="http://peach.blender.org/wp-content/uploads/poster_rodents_big.jpg";

    function init(){
        canvas.addEventListener('mousedown', function(){
            drag = true;
            lastX=null;
            lastY=null;
        });

        document.addEventListener('mouseup', function(){
            drag = false;
        });

        document.addEventListener('mousemove', function(evt) {
            if(drag){
                var mousePos = getMousePos(canvas, evt);
                var x = mousePos.x;
                var y = mousePos.y;
                ctx.clearRect(0,0,canvas.width,canvas.height);
                if(lastX && lastY){
                    posX += x-lastX;
                    posY += y-lastY;
                    if(posX>0) posX=0;
                    if(posY>0) posY=0;
                    if(posX<-image.width+canvas.width) posX = -image.width+canvas.width;
                    if(posY<-image.height+canvas.height) posY = -image.height+canvas.height;
                    ctx.drawImage(image,posX,posY);
                }
                lastX=x;
                lastY=y;
            }
        }, false);
    }

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

关于javascript - 可拖动图像未进入 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20026299/

相关文章:

javascript - 动态 iframe 高度取决于隐藏/显示

javascript - 在相对定位的 div 内定位跨度

javascript - 根据mysql字段更改div的颜色

javascript - 在 Javascript PhoneGap 中一次又一次显示相同的结果

jquery - 如何使用 jQuery 动态更改选定的单选按钮

c# - 将 SignalR 用户映射到组中的连接

javascript - 是否可以只在顶部元素上触发 jQuery.click?

javascript - 具有窗口宽度的 jQuery 函数

Asp.net Mvc Ajax Json(后数组)

javascript - 检查文件上传是否在客户端没有执行任何操作