【发布时间】:2016-04-18 20:02:58
【问题描述】:
我有三个问题。第一个问题是最重要的,但我很高兴能得到其他问题的答案。
第一个问题,看这个jsfiddle: https://jsfiddle.net/owLdgrdq/10
//copia nariz
$(document).on('click', '#add-nariz', function(){
var a = $('#add-nariz');
var src = a.attr('src');
var elem = $('<img class="objetos" src="' + src + '" width="30px" height="30px" style="positon: relative;" />');
$('#fotoAlterada').append(elem);
elem.draggable();
});
//copia bolinha azul
$(document).on('click', '#add-bb', function(){
var a = $('#add-bb');
var src = a.find('img:first').attr('src');
var elem = $('<img class="objetos" src="' + src + '" width="30px" height="30px" style="positon: relative;" />');
$('#fotoAlterada').append(elem);
elem.draggable();
});
$(document).on('click', '#salvaImagem', function(){
var m = $('#foto');
var totX = parseInt(m.css('width'));
var totY = parseInt(m.css('height'));
var c = document.getElementById('myCanvas');
c.width = totX;
c.height = totY;
var ctx = c.getContext('2d');
alert(totX + '\n' + totY);
var base = document.getElementById('foto');
ctx.drawImage(base,0,0,totX,totY,0,0,totX,totY);
var posicoes = [];
$(".objetos").each(function(){
var img = $(this);
x = parseInt(img.css("left"))+totX;
y = parseInt(img.css("top"))+totY;
altura = parseInt(img.css("width"));
largura = parseInt(img.css("height"));
posicoes.push([
x,
y,
largura,
altura
]);
});
alert( JSON.stringify(posicoes));
var j;
var numAderecos = posicoes.length;
for(j = 0; j < numAderecos; j++){
ctx.drawImage(base,posicoes[j][0],posicoes[j][1],posicoes[j][2],posicoes[j][3]);
}
});
我有一些图标 (Adicionar isto:) 我想添加到照片中 (Editar isto:)。当用户单击图标时,会在照片旁边制作一个副本。更多点击制作更多副本。这些副本是可拖动的。用户选择对象的位置并单击按钮进行保存(“Salvar Mudanças”)。此按钮会复制带有新对象的原始照片(在画布内)。
在 JS 代码的最后,我将小照片(与原始照片相同)作为小对象添加到画布中的照片中,但这只是因为我不知道如何复制添加的每个对象。我该怎么做?
第二个问题,当点击按钮时,画布中的位置不一样,它们向下拉一点(也向左)。如果我在 CSS 代码中放置填充和边距 0px,为什么会发生这种情况?
第三个问题,变量 'base' 我使用 $('#foto') 来获取 id,但我不能在画布参数中使用它。当我使用 document.getElementById('foto') 我可以。它们之间有什么区别?
----编辑----
我的目标是通过cordova/phonegap 制作一个移动应用程序。用户必须能够从设备中获取图片或使用摄像头自拍(已经可以了)。获取图片/照片后,当用户点击时,窗口上会出现一些新对象,如皇冠的鼻子、五颜六色的帽子和其他愚蠢的东西(没关系,只需更改 style="display: none;" 即可显示)这些东西他们在照片的底部制作了一个副本,这些副本必须是可拖动的(这也很好)。然后,使用 jQuery-UI 我将所有拖动对象的位置放入照片中,用户单击按钮“Salvar Mudanças”(“保存更改”),此操作将照片和对象复制到画布区域(这就是我制作应用程序的方式)。之后,用户单击另一个按钮,通过 whatsapp、facebook、电子邮件和设备可以执行的任何其他方式共享修改后的图像(在画布中)。
【问题讨论】:
-
与其使用 jQueryUI 将 img 元素拖到画布上,不如将单个画布分成顶部为源图像和底部为哈士奇图像的工具栏?然后,您可以使用简单的图像拖动技术将您的图像副本应用到哈士奇。
-
让我看看我是否理解。我放了一个画布标签,在里面放了一些 div?我想我不明白为什么这更容易。你能给我解释一下吗?谢谢(我将编辑我的问题以明确我的目标)
-
画布中没有 div——这是不可能的。只需在画布顶部绘制工具图标,在画布底部绘制哈士奇。让用户将图标拖到哈士奇身上。一切都是画布上的图画。我添加了一个带有这种替代方法示例的答案。
标签: javascript jquery canvas draggable