0
캔버스에서 마우스를 사용하여 선을 그릴 페이지를 디자인하고 놓기 항목 &을 드래그합니다.JQuery 및 KineticJS HTML5 그리기 및 끌어 놓기
내 주요 문제는 하나의 항목 만 삭제할 수 있다는 것입니다. 두 번째 문제는 항목을 드래그 할 때 복제 할 수 없다는 점입니다. 그래서 처음부터 for 루프를 복제합니다. http://www.trustweb.it/Html5draw/
이 & 드롭 항목을 드래그 관련된 자바 스크립트는 다음과 같습니다 :
/***DRAG&DROP ITEMS ***/
var overitem=0;
var start = null;
function bindGroupEvents(group, rect, trash) {
group.on('mouseover', function() {
overitem=1;
if(group.getStage()) {
trash.moveTo(group);
trash.show();
trash.getLayer().draw();
document.body.style.cursor = 'pointer';
}
});
group.on('mouseout', function() {
trash.hide();
trash.getLayer().draw();
document.body.style.cursor = 'default';
overitem=0;
});
group.on('dragmove', function() {
if(start) {
var rect = group.get('.rect')[0];
rect.setWidth(start.rectWidth + group.getX() - start.groupX);
rect.setHeight(start.rectHeight + start.groupY - group.getY());
group.setX(start.groupX);
trash.setX(rect.getWidth() - 24);
// draw shapes layer and handle layer
trash.getStage().draw();
}
});
group.on('dragstart', function() {
/*
if(group.getId()=='dryer' || group.getId()=='washing')
{
alert('to be cloned');
}
*/
group.moveToTop();
});
}
function bindTrashEvents(trash) {
trash.on('mouseover', function() {
console.log('over');
var group = trash.getParent();
var rect = group.get('.rect')[0];
start = {
groupX: group.getX(),
groupY: group.getY(),
rectWidth: rect.getWidth(),
rectHeight: rect.getHeight()
};
});
trash.on('mouseout', function(){
start = null;
});
trash.on('click', function() {
alert('click');
trash.getParent().transitionTo({
opacity: 0,
duration: 0.2,
callback: function() {
var rect = trash.getParent().remove();
}
})
});
}
/*** END DRAG&DROP ***/
window.onload = function() {
var layer = new Kinetic.Layer();
var stage = new Kinetic.Stage({
container: "container",
width: 978,
height: 598
});
/** DRAG&DROP UITEM **/
var shapesLayer = new Kinetic.Layer();
var editLayer = new Kinetic.Layer();
// build trash
trash = new Kinetic.Image({
visible: false,
opacity: 0.7,
x: 3,
y: 3
});
// load trash image
var trashImg = new Image();
trashImg.onload = function() {
trash.setImage(trashImg);
editLayer.add(trash);
};
trashImg.src = 'x.png';
bindTrashEvents(trash);
// build rectangles
var colors = ['red', 'orange'];
/* washing machine */
for(i=0;i<30;i++)
{
var group = new Kinetic.Group({
x: 1,
y: 1,
id:'washing',
draggable: true
});
var rect = new Kinetic.Rect({
width: 50,
height:50,
fill: colors[0],
stroke: 'black',
opacity: 0.85,
name: 'rect'
});
bindGroupEvents(group, rect, trash);
group.add(rect);
shapesLayer.add(group);
}
/* dryer */
for(i=0;i<30;i++)
{
var group = new Kinetic.Group({
x: 100,
y: 1,
draggable: true
});
var rect = new Kinetic.Rect({
width: 50,
height:50,
fill: colors[1],
stroke: 'black',
opacity: 0.85,
name: 'rect'
});
bindGroupEvents(group, rect, trash);
group.add(rect);
shapesLayer.add(group);
}
stage.add(shapesLayer);
stage.add(editLayer);
}
이 KineticJS의 버전 4.4 이후, 방법 '시뮬레이션'이 제거 된 업데이트와 '화재'가 대신 사용되어야한다. – sguy
바이올린이 작동하지 않는다면, jquery와 jquery-ui를 추가 할 필요가 있습니다. –
업데이트를 해주셔서 감사합니다. 이것이 도움이 되길 바랍니다. – SoluableNonagon