CreateJS支持缩放缩放吗?

时间:2014-12-26 20:59:29

标签: createjs

CreateJS是否支持捏缩放触摸手势?我在docs中找不到任何内容。

由于

2 个答案:

答案 0 :(得分:4)

手势没有原生支持,但一旦enable it触摸事件被转换为鼠标事件并由pointerID属性识别。基于此,我已经能够在我的项目中实现捏缩放手势(虽然我还没有测试它超越最新的Android。)

这是我项目的片段:

stage.on("mousedown", function (evt : createjs.MouseEvent) {
    if (evt.pointerID == 0 || evt.pointerID == -1) { //touch 1 or mouse
        touch1 = new createjs.Point(stage.globalToLocal(evt.stageX, 0).x, stage.globalToLocal(0, evt.stageY).y);
    } else if (evt.pointerID == 1) { //touch 2
        touch2 = new createjs.Point(stage.globalToLocal(evt.stageX, 0).x, stage.globalToLocal(0, evt.stageY).y);
    }
});

stage.on("pressup", function (evt : createjs.MouseEvent) {
    if (evt.pointerID == 0 || evt.pointerID == -1) { //touch 1 or mouse
        touch1 = null;
    } else if (evt.pointerID == 1) { //touch 2
        touch2 = null;
    }
});

stage.on("pressmove", function(evt : createjs.MouseEvent) {
    if (evt.pointerID == -1 || evt.pointerID == 0) {
        var touch = touch1;
    } else if (evt.pointerID == 1) {
        var touch = touch2;
    }

    var dX = stage.globalToLocal(evt.stageX, 0).x - touch.x;
    var dY = stage.globalToLocal(0, evt.stageY).y - touch.y;

    if (touch1 && touch2) var oldDist = distanceP(touch1, touch2);

    touch.x += dX;
    touch.y += dY;

    //if both fingers are used zoom and move the canvas
    if (touch1 && touch2) {
        var newDist = distanceP(touch1, touch2);
        var newZoom = zoom * newDist / oldDist;
        zoomMap(newZoom, new createjs.Point((touch1.x+touch2.x)/2, (touch1.y + touch2.y)/2))

        //if both fingers are used apply only half of the motion to each of them
        dX /= 2;
        dY /= 2;
    }

    map.x += dX;
    map.y += dY;

    stage.update();
});

function distanceP(p1 : createjs.Point, p2 : createjs.Point) : number {
    return Math.sqrt((p2.x-p1.x)*(p2.x-p1.x) + (p2.y-p1.y)*(p2.y-p1.y));
}

function zoomMap(newZoom : number, zoomCenter : createjs.Point) {
    ....
}

注意:我正在移动和缩放DO,称为Map。由于各种devicePixelRatio(视网膜显示等),舞台本身被缩放,这就是使用globalToLocal功能的原因。

答案 1 :(得分:1)

没有。 EaselJS处理正常鼠标事件(以确定点击的内容)以及一些拖动事件,因为确定拖动目标是常见用法。此外,触摸事件将转换为鼠标事件(包括多点触控)。

此时框架不会处理滑动,捏合和其他手势等事情。