- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我正在尝试合并 drag and drop resize image和 rotating image on touch ,我的表现很奇怪 http://jsfiddle.net/littlechad/Kuaxn/
我的代码如下:
function update (activeAnchor) {
var group = activeAnchor.getParent();
var topLeft = group.get('.topLeft')[0];
var topRight = group.get('.topRight')[0];
var bottomRight = group.get('.bottomRight')[0];
var bottomLeft = group.get('.bottomLeft')[0];
var image = group.get('.image')[0];
var stage = group.getStage();
var anchorX = activeAnchor.getX();
var anchorY = activeAnchor.getY();
// update anchor positions
switch (activeAnchor.getName()) {
case 'topLeft':
topRight.setY(anchorY);
bottomLeft.setX(anchorX);
break;
case 'topRight':
topLeft.setY(anchorY);
bottomRight.setX(anchorX);
break;
case 'bottomRight':
bottomLeft.setY(anchorY);
topRight.setX(anchorX);
break;
case 'bottomLeft':
bottomRight.setY(anchorY);
topLeft.setX(anchorX);
break;
}
image.setPosition(topLeft.getPosition());
var height = bottomLeft.attrs.y - topLeft.attrs.y;
var width = image.getWidth()*height/image.getHeight();
topRight.attrs.x = topLeft.attrs.x + width
topRight.attrs.y = topLeft.attrs.y;
bottomRight.attrs.x = topLeft.attrs.x + width;
bottomRight.attrs.y = topLeft.attrs.y + height;
if (width && height) {
image.setSize(width, height);
}
}
function rotate (activeAnchor) {
var group = activeAnchor.getParent();
var topLeft = group.get('.topLeft')[0];
var topRight = group.get('.topRight')[0];
var bottomRight = group.get('.bottomRight')[0];
var bottomLeft = group.get('.bottomLeft')[0];
var image = group.get('.image')[0];
var stage = group.getStage();
var pos = stage.getMousePosition();
var xd = 150 - pos.x ;
var yd = 150 - pos.y ;
var theta = Math.atan2(yd, xd);
var degree = theta / (Math.PI / 180) - 45;
var height = bottomLeft.attrs.y - topLeft.attrs.y;
var width = image.getWidth() * height / image.getHeight();
console.log(degree);
console.log(width);
console.log(height);
image.setRotationDeg(degree);
return {
x: image.getAbsolutePosition().x,
y: image.getAbsolutePosition().y
}
}
function addAnchor (group, x, y, name) {
var stage = group.getStage();
var layer = group.getLayer();
var anchor = new Kinetic.Circle({
x: x,
y: y,
stroke: 'transparent',
strokeWidth: 0,
radius: 20,
name: name,
draggable: false,
dragOnTop: false
});
if(name === 'topRight'){
var anchor = new Kinetic.Circle({
x: x,
y: y,
stroke: '#666',
fill: '#ddd',
strokeWidth: 2,
radius: 20,
name: name,
draggable: true,
dragOnTop: false
});
}
anchor.on('dragmove', function () {
update(this);
rotate(this);
layer.draw();
});
anchor.on('mousedown touchstart', function () {
group.setDraggable(false);
this.moveToTop();
});
anchor.on('dragend', function () {
group.setDraggable(true);
layer.draw();
});
group.add(anchor);
}
function initStage () {
var stage = new Kinetic.Stage({
container: 'container',
width: 500,
height: 800
});
var imageGroup = new Kinetic.Group({
x: 150,
y: 150,
draggable: true,
});
var layer = new Kinetic.Layer({
width: 128,
height: 128,
offset: [64, 64]
});
layer.add(imageGroup);
var imgObj = new Image();
var imageInstance = new Kinetic.Image({
x: 0,
y: 0,
image: imgObj,
width: 200,
height: 138,
name: 'image',
});
imgObj.src = 'http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg';
imageGroup.add(imageInstance);
addAnchor(imageGroup, 0, 0, 'topLeft');
addAnchor(imageGroup, 200, 0, 'topRight');
addAnchor(imageGroup, 200, 138, 'bottomRight');
addAnchor(imageGroup, 0, 138, 'bottomLeft');
imageGroup.on('dragstart', function() {
update(this);
rotate(this);
this.moveToTop();
});
stage.add(layer);
stage.draw();
}
function writeMessage (messageLayer, message) {
var context = messageLayer.getContext();
messageLayer.clear();
context.font = '18pt Calibri';
context.fillStyle = 'black';
context.fillText(message, 10, 25);
}
//loadImages(sources, initStage);
initStage();
似乎更新偏移量是个问题,我已经尝试了几种方法来设置偏移量以使其保持在中间,但我仍然无法弄清楚如何,我对 HTML5
和 KineticJs
,请帮我解决这个问题。
更新:
由于 fillColor broken on new browsers,上面的 fiddle 不再工作, 我有 updated the fiddle ,尽管我还没有找到解决方案。
谢谢
最佳答案
你已经很接近了,只是使用了一些不正确的方法名称,并且如前所述,cdn 需要更改。
function update(activeAnchor) {
var group = activeAnchor.getParent();
var topLeft = group.get('.topLeft')[0];
var topRight = group.get('.topRight')[0];
var bottomRight = group.get('.bottomRight')[0];
var bottomLeft = group.get('.bottomLeft')[0];
var image = group.get('.image')[0];
var stage = group.getStage();
var anchorX = activeAnchor.getX();
var anchorY = activeAnchor.getY();
switch (activeAnchor.getName()) {
case 'topLeft':
topRight.setY(anchorY);
bottomLeft.setX(anchorX);
break;
case 'topRight':
topLeft.setY(anchorY);
bottomRight.setX(anchorX);
break;
case 'bottomRight':
bottomLeft.setY(anchorY);
topRight.setX(anchorX);
break;
case 'bottomLeft':
bottomRight.setY(anchorY);
topLeft.setX(anchorX);
break;
}
image.setPosition(topLeft.getPosition());
var height = bottomLeft.attrs.y - topLeft.attrs.y;
var width = image.getWidth()*height/image.getHeight();
topRight.attrs.x = topLeft.attrs.x + width
topRight.attrs.y = topLeft.attrs.y;
bottomRight.attrs.x = topLeft.attrs.x + width;
bottomRight.attrs.y = topLeft.attrs.y + height;
if(width && height) {
image.setSize(width, height);
}
}
function rotate(activeAnchor){
var group = activeAnchor.getParent();
var topLeft = group.get('.topLeft')[0];
var topRight = group.get('.topRight')[0];
var bottomRight = group.get('.bottomRight')[0];
var bottomLeft = group.get('.bottomLeft')[0];
var image = group.get('.image')[0];
var stage = group.getStage();
var pos = stage.getPointerPosition();
var xd = 150 - pos.x ;
var yd = 150 - pos.y ;
var theta = Math.atan2(yd, xd);
var degree = theta / (Math.PI / 180) - 45;
var height = bottomLeft.attrs.y - topLeft.attrs.y;
var width = image.getWidth()*height/image.getHeight();
console.log(degree);
console.log(width);
console.log(height);
image.setRotationDeg(degree);
return {
x: image.getAbsolutePosition().x,
y: image.getAbsolutePosition().y
}
}
function addAnchor(group, x, y, name) {
var stage = group.getStage();
var layer = group.getLayer();
var anchor = new Kinetic.Circle({
x: x,
y: y,
stroke: '#fff',
fill: '#fff',
strokeWidth: 2,
radius: 20,
name: name,
draggable: false,
dragOnTop: false
});
if(name === 'topRight'){
var anchor = new Kinetic.Circle({
x: x,
y: y,
stroke: '#666',
fill: '#ddd',
strokeWidth: 2,
radius: 20,
name: name,
draggable: true,
dragOnTop: false
});
}
anchor.on('dragmove', function() {
update(this);
rotate(this);
layer.draw();
});
anchor.on('mousedown touchstart', function() {
group.setDraggable(false);
this.moveToTop();
});
anchor.on('dragend', function() {
group.setDraggable(true);
layer.draw();
});
group.add(anchor);
}
function initStage() {
var stage = new Kinetic.Stage({
container: 'container',
width: 500,
height: 800
});
var imageGroup = new Kinetic.Group({
x: 150,
y: 150,
draggable: true,
});
var layer = new Kinetic.Layer({
width: 128,
height: 128,
offset: [64, 64]
});
layer.add(imageGroup);
var imgObj = new Image();
var imageInstance = new Kinetic.Image({
x: 0,
y: 0,
image: imgObj,
width: 200,
height: 138,
name: 'image',
});
imgObj.src = 'http://www.html5canvastutorials.com/demos/assets/darth-
vader.jpg';
imageGroup.add(imageInstance);
addAnchor(imageGroup, 0, 0, 'topLeft');
addAnchor(imageGroup, 200, 0, 'topRight');
addAnchor(imageGroup, 200, 138, 'bottomRight');
addAnchor(imageGroup, 0, 138, 'bottomLeft');
imageGroup.on('dragstart', function() {
update(this);
rotate(this);
this.moveToTop();
});
stage.add(layer);
stage.draw();
}
function writeMessage(messageLayer, message) {
var context = messageLayer.getContext();
messageLayer.clear();
context.font = '18pt Calibri';
context.fillStyle = 'black';
context.fillText(message, 10, 25);
}
loadImages(sources, initStage);
initStage();
关于html - Kinetic js 拖放、调整大小和旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16191247/
您可以与此代码交互 here on jsFiddle 在 fiddle你可以看到我在旗杆(Kinetic.Line)上制作了一面旗帜(Kinetic.Rect)。我希望当用户将鼠标移动到旗帜或旗杆的任
我的 Canvas 上有 2 个 Kinetic.Image(A 和 B)。我希望当我尝试移动 A 时,只有 Kinetic.Image B 发生变化,而 A 不会改变它的位置。 我的代码是: A.o
我正在使用 kinetic js。我正在将图像、线条等添加到 kinetic.group 并尝试旋转该组并且它正在正确旋转。但是在旋转组之后,如果我尝试画一条线,它不会正确地绘制在当前的鼠标位置上。它
我试图防止旋转的标签被拖离屏幕,但我无法弄清楚如何使对象的 MinX、MaxX、MinY 和 MaxY 处于旋转状态。 getHeight 和 getWidth 仅返回旋转之前的值。 这是说明问题的示
在 KineticJS 中,如何绘制一 strip 有箭头的虚线? 例如: > > > > > > 我知道你会画一条虚线: var line = new Kinetic.Line({
我想添加 Textbox 或可编辑元素,让用户可以选择编辑文本。 这是我当前的代码: var text = new Kinetic.Text({ text: "Sample Text"
我正在尝试检测 Kinetic.Line 对象上的鼠标悬停。 根据文档, Kinetic.Line 确实具有 on 功能,因为它是节点的子节点。 on 函数将 mousemove 和 mouseove
我根据很棒的教程 here 使用 Kinetic JS 开发了一个交互式 map . 我想要实现的是在 map 下方显示 map 上的工作人员列表,然后发生一个事件,如果访问者从姓名列表中单击此人的姓
我正在尝试查找形状上的点击事件。当我单击像矩形这样的形状时,它会变成可拖动的山墙,但是当我单击它的外部时,它应该关闭其可调整大小的功能。我尝试使用模糊功能但不起作用。我不想在鼠标移出时使用它。问题是,
我尝试使用 Tweens 使用kineticjs 使文本淡入淡出,我成功地使文本随它们一起移动,但文本似乎没有淡出。 如果有人能解释我做错了什么,那就太好了 这是一个jsfiddle ,当出现“补间完
我正在尝试将箭头添加到我使用鼠标绘制的线条的开头和结尾,这是我绘制线条的脚本: document.getElementById('dLine').onclick = function() {
如果我有一条动力线 例如: line = new Kinetic.Line({ x: 80, y:80, points: [10, 10, 60, 60, 60-headlen
我试图根据 Canvas 的左上角获取线条的绝对位置。但是,我似乎只能根据最初绘制线条时的位置来取回相对位置(坐标)。 var line = new Kinetic.Line({
所以我想操作canvas,但是Kinetic JS似乎不起作用,不知道为什么。 此代码来自教程: $(function(){ var stage = new Kinetic.Stage({
我正在尝试将箭头添加到我使用鼠标绘制的线条的开头和结尾,这是我绘制线条的脚本: document.getElementById('dLine').onclick = function() {
我正在构建一个应显示不同类型图表的应用程序。应该显示两张或多张按用户得分定位的图像。好的,这与问题无关。所以我写了一个 jQuery 插件,它通过 json 接收值来绘制图形。 插件首先调用一个绘制图
我之前有一个基于 HTML5 Canvas 的应用程序,最近我将其转换为使用 Kinetic JS。我只需在包含的 div 上使用 Overflow: auto 即可在桌面浏览器和 IOS 中启用滚动
我尝试通过拖动 set true 并将其设置为对象来移动球对象以及鼠标指针。 这是我的 javascript 代码: $(document).ready(function() { var ar
我只是想为每个形状设置一个点击事件,我希望能够根据它们的 ID 向我显示它是哪个正方形。 var stage = new Kinetic.Stage({ container: 'container',
我正在尝试从数据库加载已保存的舞台,当我加载它时,它看起来不错,但在加载它之后我无法在舞台上绘制。我知道我可能无法像保存前那样使用加载的对象,但如何在加载后绘制到舞台上? 我正在使用 Kinetic.
我是一名优秀的程序员,十分优秀!