我在此示例中无法修复平移 - 除非您移动缩放图像然后再次缩放(偏移设置为默认值并且视图跳转到初始位置 - http://jsfiddle.net/p2Qzg/),否则它会正常工作。关于如何解决这个问题的任何想法?我现在一直试图解决这个问题三天,没有任何好结果。
var canvas= document.getElementById("myCanvas");
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
var stage = new createjs.Stage("myCanvas");
function addCircle(r,x,y){
var g=new createjs.Graphics().beginFill("#ff0000").drawCircle(0,0,r);
var s=new createjs.Shape(g)
s.x=x;
s.y=y;
stage.addChild(s);
stage.update();
}
addCircle(10,200,100);
addCircle(5,canvas.width/2,canvas.height/2);
addCircle(3,400,400);
canvas.addEventListener("mousewheel", MouseWheelHandler, false);
canvas.addEventListener("DOMMouseScroll", MouseWheelHandler, false);
var zoom;
function MouseWheelHandler(e) {
if(Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)))>0)
zoom=1.1;
else
zoom=1/1.1;
stage.regX += stage.mouseX - stage.regX;
stage.regY += stage.mouseY - stage.regY;
stage.x=stage.mouseX;
stage.y=stage.mouseY;
stage.scaleX=stage.scaleY*=zoom;
stage.update();
}
stage.addEventListener("stagemousedown", function(e) {
var offset={x:stage.x-e.stageX,y:stage.y-e.stageY};
stage.addEventListener("stagemousemove",function(ev) {
stage.x = ev.stageX+offset.x;
stage.y = ev.stageY+offset.y;
stage.update();
});
stage.addEventListener("stagemouseup", function(){
stage.removeAllEventListeners("stagemousemove");
});
});
答案 0 :(得分:5)
有点旧,但因为它还需要一个anwser:
很棒的json小提琴。我在工作中使用它来修复bug。
只需替换:
stage.regX += stage.mouseX - stage.regX;
stage.regY += stage.mouseY - stage.regY;
使用以下代码行:
var local = stage.globalToLocal(stage.mouseX, stage.mouseY);
stage.regX=local.x;
stage.regY=local.y;
像魅力一样工作。 我分叉你的jsfiddle并相应地改变它。 http://jsfiddle.net/kz0dL78k/
答案 1 :(得分:1)
要修复损坏的平移,请使用@Senador的答案。我目前没有足够的代表发表评论,因此我将其发布为答案。预先抱歉,将其作为答案而不是评论。
我只是想提醒未来的用户,已不建议使用事件“ mousewheel”。请参阅“鼠标滚轮”文档here。请改用'wheel'事件。
此外,通过'wheel'事件,您可以删除Firefox所需的'DOMMouseScroll'事件,因为'wheel'为旧浏览器提供了polyfill。请参阅“滚轮”文档here。
替换:
stage.addEventListener("mousewheel", MouseWheelHandler, false);
stage.addEventListener("DOMMouseScroll", MouseWheelHandler, false);
使用:
stage.addEventListener("wheel", MouseWheelHandler, false);