Calculator Tools Calculator Tools
Create

Birthday Invitation Puzzle

Nov 1, 2023

About this app

Solve the puzzle to unveil the birthday invitation!

Birthday Invitation Puzzle 🎂 Birthday Invitation Puzzle 🎉 Assemble the image to reveal the birthday invitation

Related apps

Put this on your site

Source

                    <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">

<title>Birthday Invitation Puzzle</title>
<meta name="description" content="Solve the puzzle to unveil the birthday invitation!">
<meta name="keywords" content="puzzle, birthday, invitation, game">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.2/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">

<script type="text/javascript">
try {
let imagePieces = [];

function shuffleArray(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
}

function splitImage(imageUrl) {
let image = new Image();
image.crossOrigin = "Anonymous"; // Set crossOrigin to avoid tainted canvas
image.src = imageUrl;
image.onload = function() {
let pieceWidth = this.naturalWidth / 3;
let pieceHeight = this.naturalHeight / 3;
let xPos = 0;
let yPos = 0;

for (let x = 0; x < 3; x++) {
for (let y = 0; y < 3; y++) {
let canvas = document.createElement('canvas');
canvas.width = pieceWidth;
canvas.height = pieceHeight;
let context = canvas.getContext('2d');
context.drawImage(this, xPos, yPos, pieceWidth, pieceHeight, 0, 0, canvas.width, canvas.height);
imagePieces.push(canvas.toDataURL());
xPos += pieceWidth;
}
xPos = 0;
yPos += pieceHeight;
}
shuffleArray(imagePieces);
displayPieces();
};
}

function displayPieces() {
let puzzleArea = document.getElementById('puzzle-area');
for (let i = 0; i < imagePieces.length; i++) {
let puzzlePiece = document.createElement('img');
puzzlePiece.src = imagePieces[i];
puzzlePiece.draggable = true;
puzzlePiece.ondragstart = function(event) {
event.dataTransfer.setData('src', this.src);
};
puzzleArea.appendChild(puzzlePiece);
}
}

function allowDrop(event) {
event.preventDefault();
}

function drop(event) {
event.preventDefault();
let src = event.dataTransfer.getData('src');
event.target.innerHTML = '<img src="' + src + '">';
}

document.addEventListener("DOMContentLoaded", function() {
splitImage("https://videngo.com/app/puzzle/image.png");
});

} catch (error) {
throw error;
}
</script>

<style>
#puzzle-area {
display: flex;
flex-wrap: wrap;
width: 300px;
height: 533px;
border: 1px solid #000;
}
#puzzle-area img {
width: 33.33%;
height: 33.33%;
}
</style>
</head>
<body>
<div id="main-container" class="container">
<h1>🎂 Birthday Invitation Puzzle 🎉</h1>
<p>Assemble the image to reveal the birthday invitation</p>
<div id="puzzle-area" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
</div>
</body>
</html>