【发布时间】:2017-03-06 12:08:00
【问题描述】:
重现步骤
- 使用鼠标滚轮放大和缩小,然后按“转到蓝点”按钮
预期行为
无论之前的图像状态是什么(缩放或平移到其他位置)
实际行为
图像移动到随机位置?似乎平移图像/缩放它, 搞砸了整个运行过程。
http://codepen.io/anon/pen/jrdjJm
$("#go_blue").click(function(){
canvas.zoomToPoint(point,2);
});
var img = document.createElement("img");
img.src ="http://content.worldcarfans.co/2008/6/medium/9080606.002.1M.jpg";
var canvas = window._canvas = new fabric.Canvas("imageCanvas");
var dot = new fabric.Circle({
top: 250,
left: 250,
originX: 'center',
originY: 'center',
radius: 20,
fill: 'blue'
});
var point = new fabric.Point(250,250);
var group;
$(img).on('load',function(){
image = new fabric.Image(img, {
centeredRotation: true,
centeredScaling: true,
top: 0,
left: 0
});
group = new fabric.Group([ image, dot ], {
originX: 'center',
originY: 'center'
//angle: -10
});
canvas.add(group);
});
canvas.on("mouse:move", function(event) {
currentMouseY = Math.round(event.e.y - canvas._offset.top);
currentMouseX = Math.round(event.e.x - canvas._offset.left);
});
function zoom(delta, target) {
var factor = 0.8;
if (delta < 0) {
factor = 1/factor;
}
// Zoom into the group.
group.setScaleX(group.getScaleX() * factor);
group.setScaleY(group.getScaleY() * factor);
// Calculate displacement of zooming position.
var dx = (currentMouseX - group.getLeft()) * (factor - 1),
dy = (currentMouseY - group.getTop()) * (factor - 1);
// Compensate for displacement.
group.setLeft(group.getLeft() - dx);
group.setTop(group.getTop() - dy);
canvas.renderAll();
}
$(canvas.wrapperEl).on("mousewheel", function (event) {
var target = canvas.findTarget(event);
if (target) {
var delta = event.originalEvent.wheelDelta / 120;
zoom(delta, target);
}
event.preventDefault() && false;
});
$("#go_blue").click(function(){
canvas.zoomToPoint(point,2);
});
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div style="position: fixed;
left: 0px;
top: 11px;
z-index: 10000;">
Use the mousewheel to zoom in and out and then press the "go to blue dot" btn - it should pan to the blue dot no matter what the zoom level is.
</div>
<button id="go_blue" style="position: fixed;
left: 50px;
top: 50px;
z-index: 10000;">move to blue dot</button>
<div style="margin-top: 80px;">
<canvas id="imageCanvas" width='800' height='600'>Your browser does not support HTML5 Canvas</canvas>
</div>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.6.6/fabric.min.js"></script>
</body>
</html>
【问题讨论】:
标签: javascript jquery html5-canvas fabricjs