Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/02/2023, à 11:25

worfhack

reprendre deplacement image dans un canvas

je cherche à avoir le systeme suivant

1) Une image dans canvas

2) Une liste de picto sur la droite , qu'on peut ajouter en drag and drop sur le canvas

fonctionelemet ca marche

j'ai mon image à gauche, mes 4 picto à droites

et on peut avec la souris integer ce picto sur l'image dans le canvas

la seul choses que je n'arrive pas à faire , c'est de pouvoir deplacer directement le picto sur le canvas

la il faut replacer le picto à droite

Merci de votre aide

voila mon code JS

 let canvas = document.createElement("canvas");
let ctx = canvas.getContext("2d");
let img = document.createElement("img");
let pictoListTentreLoup = [
	document.createElement("img"),
	document.createElement("img"),
	document.createElement("img"),
	document.createElement("img"),
]

let pictoPositions = [
	{x: -10, y: -10},
	{x: -10, y: -10},
	{x: -10, y: -10},
	{x: -10, y: -10},
]
let originalImage;

pictoListTentreLoup.forEach(picto => {
    picto.src = "picto1.png";
});
let draggablePicto = null;
let draggablePictoIndex;

// Initialisation de l'image à afficher
img.src = "logo.png";
img.onload = () => {
    canvas.width = img.width;
    canvas.height = img.height;
    ctx.drawImage(img, 0, 0);
    originalImage = ctx.getImageData(0, 0, canvas.width, canvas.height);
    pictoListTentreLoup.forEach((picto, i) => {
        //ctx.drawImage(picto, pictoPositions[i].x, pictoPositions[i].y);
    });
}



// Gestion du drag & drop des picto
pictoListTentreLoup.forEach((picto, i) => {
    ctx.beginPath();
    ctx.rect(pictoPositions[i].x, pictoPositions[i].y, picto.width, picto.height);
    picto.addEventListener("mousedown", e => {
		//if (ctx.isPointInPath(e.offsetX, e.offsetY)) {
            draggablePicto = picto;
            draggablePictoIndex = i;
			ctx.strokeStyle = 'red';
			ctx.strokeRect(pictoPositions[i].x, pictoPositions[i].y, picto.width, picto.height);
    //    }
    });
});

canvas.addEventListener("mousemove", e => {
    if (draggablePicto) {
        ctx.putImageData(originalImage, 0, 0);
        pictoPositions[draggablePictoIndex].x = e.offsetX;
        pictoPositions[draggablePictoIndex].y = e.offsetY;
        pictoListTentreLoup.forEach((picto, i) => {
			if (pictoPositions[i].x > 0)
			console.log(ctx.drawImage(picto, pictoPositions[i].x, pictoPositions[i].y));
			if (picto === draggablePicto) {
				ctx.strokeStyle = 'red';
				ctx.strokeRect(pictoPositions[i].x, pictoPositions[i].y, picto.width, picto.height);
			}
				
        });
    }
});

canvas.addEventListener("mouseup", e => {
    draggablePicto = null;
});

document.body.appendChild(canvas);
pictoListTentreLoup.forEach(picto => {
    document.body.appendChild(picto);
});

Hors ligne