使用KineticJS变换(移动/缩放/旋转)形状
Transform (Move/Scale/Rotate) shapes with KineticJS
我正在尝试为KineticJS构建一个转换管理器,该管理器将构建一个边界框,并允许用户在画布上缩放、移动和旋转图像。我被锚点的逻辑搞糊涂了。
http://jsfiddle.net/mharrisn/whK2M/
我只想让用户从任何一个角落按比例缩放他们的图像,并在按住拖动锚点时旋转。
有人能帮我指明正确的方向吗?
谢谢!
以下是我制作的旋转控件的概念证明:http://codepen.io/ArtemGr/pen/ociAD
当控件被拖动时,dragBoundFunc用于旋转旁边的内容:
controlGroup.setDragBoundFunc (function (pos) {
var groupPos = group.getPosition()
var rotation = degrees (angle (groupPos.x, groupPos.y, pos.x, pos.y))
status.setText ('x: ' + pos.x + '; y: ' + pos.y + '; rotation: ' + rotation); layer.draw()
group.setRotationDeg (rotation); layer.draw()
return pos
})
我也在做同样的事情,我发布了一个几乎相同的问题,但我发现了一个链接,在那里你已经准备好了调整大小和移动工具。所以我用了同样的方法。然而,它不包含旋转工具,但这对你来说也是一个好的开始,它非常简单和合乎逻辑。以下是链接:http://www.html5canvastutorials.com/labs/html5-canvas-drag-and-drop-resize-and-invert-images/
如果我能让它完美地工作,我也会带着旋转工具回来。
我希望我发布这段我制作的代码片段还没有迟到。我对你们处理这种任务也有同样的问题。在处理图像和对象时,我已经3天没有尝试过很多模仿fabricjs框架功能的变通方法了。虽然我可以使用Fabricjs,但Kineticjs似乎更快速/一致地处理html5。
幸运的是,我们已经有了现有的插件/工具,可以很容易地与kineticjs一起实现,这就是jQueryTransform工具。非常感谢这篇文章的作者!只需在谷歌上搜索并下载即可。
我希望我创建的下面的代码能帮助很多正在努力解决这种任务的开发人员。
$(function(){
//Declare components STAGE, LAYER and TEXT
var _stage = null;
var _layer = null;
var simpleText = null;
_stage = new Kinetic.Stage({
container: 'canvas',
width: 640,
height: 480
});
_layer = new Kinetic.Layer();
simpleText = new Kinetic.Text({
x: 60,
y: 55,
text: 'Simple Text',
fontSize: 30,
fontFamily: 'Calbiri',
draggable: false,
name:'objectInCanvas',
id:'objectCanvas',
fill: 'green'
});
//ADD LAYER AND TEXT ON STAGE
_layer.add(simpleText);
_stage.add(_layer);
_stage.draw();
//Add onclick event listener to the Stage to remove and add transform tool to the object
_stage.on('click', function(evt) {
//Remove all objects' transform tool inside the stage
removeTransformToolSelection();
// get the shape that was clicked on
ishape = evt.targetNode;
//Add and show again the transform tool to the selected object and update the stage layer
$(ishape).transformTool('show');
ishape.getParent().moveToTop();
_layer.draw();
});
function removeTransformToolSelection(){
//Search all objects inside the stage or layer who has the name of "objectInCanvas" using jQuery iterator and hide the transform tool.
$.each(_stage.find('.objectInCanvas'), function( i, child ) {
$(child).transformTool('hide');
});
}
//Event listener/Callback when selecting image using file upload element
function handleFileSelect(evt) {
//Remove all objects' transform tool inside the stage
removeTransformToolSelection();
//Create image object for selected file
var imageObj = new Image();
imageObj.onload = function() {
var myImage = new Kinetic.Image({
x: 0,
y: 0,
image: imageObj,
name:'objectInCanvas',
draggable:false,
id:'id_'
});
//Add to layer and add transform tool
_layer.add(myImage);
$(myImage).transformTool();
_layer.draw();
}
//Adding source to Image object.
var f = document.getElementById('files').files[0];
var name = f.name;
var url = window.URL;
var src = url.createObjectURL(f);
imageObj.src = src;
}
//Attach event listener to FILE element
document.getElementById('files').addEventListener('change', handleFileSelect, false);
});
- 使用KineticJS变换(移动/缩放/旋转)形状
- CSS3 点击旋转和缩放
- 如何在D3中获得可缩放Icicle布局中文本标签的旋转
- 精灵缩放会导致三个.js的定位和旋转不正确
- 缩放、拖动和旋转时的图像定位
- CSS 图像查看器:图像旋转(和缩放)
- 在Openlayers 3中使标记与地图一起缩放/旋转
- 在画布上绘制CSS转换(缩放、旋转、向左、向右)
- 制作画布镜像、缩放和旋转
- Android 4.1+(Javascript浏览器):如何禁用旋转缩放
- HTML>根据窗口和图像大小旋转和缩放图像
- 如何旋转,调整大小和缩放图像从角落的画布
- Jquery自定义旋转木马内的图像缩放模式
- SVG旋转,缩放和翻译与鼠标
- 将横向iPad旋转为纵向iPad不会改变网页的缩放比例
- 缩放和旋转在拉斐尔.js
- js旋转,缩放不发生围绕对象的中心轴
- 仅在移动、缩放和旋转时渲染所选对象
- 当旋转或缩放改变时,在Raphaeljs中拖动路径
- 如何从矩阵SVG中提取位置,旋转和缩放