画布通过旋转放大鼠标点
Canvas zoom into mouse point with a rotation
我正在使用EaselJS在HTML5画布上处理一些非常简单的东西。我想做的只是平移、缩放和旋转图像......我想在我的鼠标指针周围缩放图像,我知道这个问题有很多答案,但我已经排序了。当我旋转容器时,它出了可怕的错误。这是我的缩放功能:
function zoom(delta){
var p = container.globalToLocal(stage.mouseX, stage.mouseY);
var scale = Math.max(0.1, Math.min(container.scaleX + delta, 3));
container.scaleX = container.scaleY = scale;
var p2 = container.globalToLocal(stage.mouseX, stage.mouseY);
container.x += (p2.x - p.x) * scale;
container.y += (p2.y - p.y) * scale;
}
这是我的 JSFiddle 可以看到它运行良好,但当容器围绕其中心旋转时则不然。我似乎无法弄清楚如何使用容器上的转换来解释任何旋转,任何帮助和解释将不胜感激。
解决方案,你可以在 JS 小提琴中看到它:
function zoom(delta){
var p = container.globalToLocal(stage.mouseX, stage.mouseY);
var scale = Math.max(0.5, Math.min(container.scaleX + delta, 3));
container.scaleX = container.scaleY = scale;
var p2 = container.globalToLocal(stage.mouseX, stage.mouseY);
if(container.rotation == 0){
container.x += (p2.x - p.x) * scale;
container.y += (p2.y - p.y) * scale;
}else if (container.rotation == 90){
container.x -= (p2.y - p.y) * (scale);
container.y += (p2.x - p.x) * (scale);
}else if(container.rotation == 180){
container.x -= (p2.x - p.x) * scale;
container.y -= (p2.y - p.y) * scale;
}else{
container.x += (p2.y - p.y) * (scale);
container.y -= (p2.x - p.x) * (scale);
}
}
function rotate(r){
if((container.rotation+r) > 270){
container.rotation = 0;
}else{
container.rotation += r;
}
}
相关文章:
- EaseJS拖放;放下(动画CC)电影剪辑的鼠标坐标
- 当鼠标悬停在文本中的单词上时显示警报
- UIAutomation放大图像
- JsFiddle上的鼠标事件不起作用
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何在鼠标悬停时在另一个图像上滑动图像.
- 鼠标悬停时如何居中放大背景图像
- 在网页中用鼠标放大缩略图的简单方法
- 鼠标悬停在单个文本字母上的放大效果
- 如何使用鼠标单击和拖动来放大 D3
- 使用 JavaScript 在鼠标悬停时在内容顶部查看放大的图像
- 在动态创建的 svg 元素上滚动鼠标时放大/缩小
- 当我把鼠标放在图像上时,我希望它一直放大,直到我不放大为止;我再也没有鼠标了
- Javascript:在没有Jquery或插件的情况下放大鼠标悬停
- 放大图像和移动它与鼠标上的指针
- 当我将鼠标悬停在矢量的一部分上时,如何放大图像?
- jQuery放大图像映射在鼠标上
- 鼠标光标的放大
- 我如何逐渐放大,而改变鼠标悬停的颜色和逐渐缩小和褪色的颜色上的鼠标房子
- 将鼠标悬停在表格行上时如何放大表格行?-变化