【问题标题】:Get the image visible area state to set the image in canvas at previous dragged location获取图像可见区域状态以将画布中的图像设置在先前拖动的位置
【发布时间】:2013-11-30 10:56:07
【问题描述】:

JSFiddle

我有一个 JQuery 脚本,它允许我在 Canvas 中拖动图像。请参阅随附的 JSFiddle 参考。

我的问题是,假设我将图像拖到了左边,我可以得到图像的当前状态我们可以看到多少部分?这样下次我在 Canvas 中加载图像时,它应该首先显示上次可见的部分

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 = 600;
        canvas.height = 200;
        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 jquery asp.net asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    不确定它是否是您需要的,但为什么不每次图像移动时将 posX 和 posY 存储在 cookie 或 localStorage 中。然后在页面加载时检索存储的位置。类似的东西:

    //Store the position :
    localStorage.setItem('position', JSON.stringify({x:posX,y:posY}));
    
    //Top of your script
    var lastKnown = localStorage.getItem('position');
    if(lastKnown) {
      var parsed = JSON.parse(lastKnown);
      var posX = parsed.x, posY = parsed.y;
    } else {
      var posX = 0, posY = 0;
    }
    

    你可以找到修改后的 Fiddle here

    【讨论】:

    • 你能知道什么是localStorage吗?
    • LocalStorage 是 cookie 的一种增强版本,但具有以下优点/演变:1/大量存储空间 2/在页面刷新后持续存在,3/不传输到服务器。您将在这里获得完整的参考资料diveintohtml5.info/storage.html。请确保您的浏览器要求与 localStorage 的支持相匹配。
    猜你喜欢
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2016-04-06
    • 2012-12-04
    • 2021-06-16
    • 2023-03-30
    相关资源
    最近更新 更多