2014-03-30 73 views

回答

6

联合文件有一个方法叫做规模()

我有缩放(变焦)我的图表此实现:

var graphScale = 1; 

var paperScale = function(sx, sy) { 
    paper.scale(sx, sy); 
}; 

var zoomOut = function() { 
    graphScale -= 0.1; 
    paperScale(graphScale, graphScale); 
}; 

var zoomIn = function() { 
    graphScale += 0.1; 
    paperScale(graphScale, graphScale); 
}; 

var resetZoom = function() { 
    graphScale = 1; 
    paperScale(graphScale, graphScale); 
}; 

也许这就是你需要什么?

4

paper.$el.on('mousewheel DOMMouseScroll', function onMouseWheel(e) { 
 
    //function onMouseWheel(e){ 
 
    e.preventDefault(); 
 
    e = e.originalEvent; 
 

 
    var delta = Math.max(-1, Math.min(1, (e.wheelDelta || -e.detail)))/50; 
 
    var offsetX = (e.offsetX || e.clientX - $(this).offset().left); 
 

 
    var offsetY = (e.offsetY || e.clientY - $(this).offset().top); 
 
    var p = offsetToLocalPoint(offsetX, offsetY); 
 
    var newScale = V(paper.viewport).scale().sx + delta; 
 
    console.log(' delta' + delta + ' ' + 'offsetX' + offsetX + 'offsety--' + offsetY + 'p' + p.x + 'newScale' + newScale) 
 
    if (newScale > 0.4 && newScale < 2) { 
 
    paper.setOrigin(0, 0); 
 
    paper.scale(newScale, newScale, p.x, p.y); 
 
    } 
 
}); 
 

 
function offsetToLocalPoint(x, y) { 
 
    var svgPoint = paper.svg.createSVGPoint(); 
 
    svgPoint.x = x; 
 
    svgPoint.y = y; 
 

 
    var pointTransformed = svgPoint.matrixTransform(paper.viewport.getCTM().inverse()); 
 
    return pointTransformed; 
 
}

+0

哦,我的上帝,我一直在挣扎了一会儿现在(不算长,但足够长的时间让恼人的),那一条线,原点设置为( 0,0)在缩放之前,就是我所需要的。谢谢。它的工作方式还有一些缺陷,但是你为我节省了一些痛苦。 –