2015-02-10 1 views
4

Я реализовал масштабирование бумаги и отлично работает.Как центрировать масштабирование бумаги JointJS

Я связал его с прокруткой колесика мыши, но я все еще сталкиваюсь с одной проблемой: в API функция масштабирования определяется как scale paper.scale(sx, sy, [ox, oy]), и я понял, что ox и oy могут центрировать масштабирование в определенном положении. В моем случае эта позиция должна быть указателем. Но хотя я передаю координаты (offsetX и offsetY события мыши), он абсолютно не влияет.

Может ли кто-нибудь дать мне пример использования ox и oy?

ответ

4

Не забудьте сначала преобразовать координаты мыши в систему координат окна просмотра.

function offsetToLocalPoint(offsetX, offsetY, paper) { 
    var svgPoint = paper.svg.createSVGPoint(); 
    svgPoint.x = offsetX; 
    svgPoint.y = offsetY; 
    var offsetTransformed = svgPoint.matrixTransform(paper.viewport.getCTM().inverse()); 
    return offsetTransformed 
} 

И сбросить предыдущее окно просмотра translate преобразование перед вызовом paper.scale() с началом [Ох, Оу] из scale преобразования указано. Вы можете увидеть это в примере обработчика событий mousewheel ниже.

function onMouseWheel(e) { 

    e.preventDefault(); 
    e = e.originalEvent; 

    var delta = Math.max(-1, Math.min(1, e.wheelDelta))/SPEED; 
    var newScale = V(paper.viewport).scale().sx + delta; 

    if (newScale > MIN_SCALE && newScale < MAX_SCALE) { 
     paper.setOrigin(0, 0); // reset the previous 'translate'    
     var p = offsetToLocalPoint(e.offsetX, e.offsetY); 
     paper.scale(newScale, newScale, p.x, p.y); 
    } 
} 

кросс-браузер версии скрипку here.

+0

Большое спасибо за ваш ответ. он показал мне, почему бык и оу не имели никакого эффекта в моей реализации. Спасибо :) – Maria

+0

Нет проблем. – Roman

+0

@Roman Не могли бы вы помочь мне с этим http://stackoverflow.com/questions/31671743/text-area-in-svg-shapes?noredirect1_comment51291042_31671743 –