


Javascript kombiniert mit Flexbox zur einfachen Implementierung eines Schiebepuzzlespiels. Javascript-Kenntnisse
Schiebepuzzle bedeutet, ein Bild in gleiche Teile zu teilen, die Reihenfolge zu mischen (Bild unten) und sie dann zusammenzuschieben, um ein vollständiges Bild zu ergeben.
Um ein Puzzle umzusetzen, müssen Sie überlegen, wie Sie die Reihenfolge zufällig mischen, wie Sie die Positionen zweier Bilder vertauschen usw. Nachdem Sie das Flexbox-Layout verwendet haben, müssen Sie jedoch nicht darüber nachdenken. Der Browser erledigt dies für Sie. Für eine Einführung in Flexbox klicken Sie hier.
In diesem Spiel wird das Order-Attribut des Flexbox-Layouts verwendet. Das Order-Attribut kann verwendet werden, um die Reihenfolge der Flex-Elemente zu steuern.
Hier verwende ich neun Leinwandelemente, um das Bild in neun gleiche Teile zu unterteilen. Sie können auch andere Methoden verwenden, beispielsweise die Positionierung des Hintergrundbilds:
<div class="wrap"> <canvas></canvas> <canvas></canvas> <canvas></canvas> <canvas></canvas> <canvas></canvas> <canvas></canvas> <canvas></canvas> <canvas></canvas> <canvas></canvas> </div>
Wenn es nicht auf ein Neun-Quadrat-Raster, sondern auch auf ein Sechzehn-Quadrat-Raster usw. beschränkt ist, können die oben genannten Elemente dynamisch generiert werden.
Im Folgenden finden Sie den Code zum Generieren von neun Bildern in gemischter Reihenfolge:
var drawImage = function (url) { return new Promise(function (resolve, reject) { var img = new Image(); img.onload = function () { resolve(img); }; img.src = url; }) }; drawImage("2.jpg").then(function (img) { var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; var random = arr.sort(function() {return Math.random() > 0.5}); [].forEach.call(document.querySelectorAll("canvas"), function (item, i) { item.width = $(".wrap").clientWidth / 3; item.height = $(".wrap").clientHeight / 3; item.style.order = random[i]; var ctx = item.getContext("2d"); ctx.drawImage(img, img.width * (i % 3) / 3, img.height * Math.floor(i / 3) / 3, img.width / 3, img.height / 3, 0, 0, item.width, item.height); }); });
Der obige Schlüsselcode lautet:
item.style.order = random[i];
Durch das Mischen der Zahlen und die zufällige Zuweisung zu dem Bestellattribut jedes Canvas-Elements sortiert der Browser sie automatisch für Sie.
Ich werde nicht auf weitere Details zum Code eingehen. So tauschen Sie die Positionen zweier Bilder aus:
var order1 = item.style.order; var order2 = target.style.order;
Sie müssen lediglich die Auftragsattributwerte beider Parteien austauschen.
Vollständiger Code
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport" /> <meta content="yes" name="apple-mobile-web-app-capable" /> <meta content="black" name="apple-mobile-web-app-status-bar-style" /> <meta content="telephone=no" name="format-detection" /> <title></title> <style> html, body { height: 100%; } body { margin: 0; padding: 0; overflow: hidden; } .wrap { display: flex; flex-wrap: wrap; width: 100%; height: 100%; overflow: hidden; } .wrap canvas { width: 33.3333%; height: 33.3333%; border: 1px solid red; box-sizing: border-box; } </style> </head> <body> <div class="wrap"> <canvas data-value="1"></canvas> <canvas data-value="2"></canvas> <canvas data-value="3"></canvas> <canvas data-value="4"></canvas> <canvas data-value="5"></canvas> <canvas data-value="6"></canvas> <canvas data-value="7"></canvas> <canvas data-value="8"></canvas> <canvas data-value="9"></canvas> </div> <script> var $ = function (el) { return document.querySelector(el); }; var touchMove, touchEnd; var drawImage = function (url) { return new Promise(function (resolve, reject) { var img = new Image(); img.onload = function () { resolve(img); }; img.src = url; }) }; drawImage("2.jpg").then(function (img) { var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; var random = arr.sort(function() {return Math.random() > 0.5}); [].forEach.call(document.querySelectorAll("canvas"), function (item, i) { item.width = $(".wrap").clientWidth / 3; item.height = $(".wrap").clientHeight / 3; item.style.order = random[i]; var ctx = item.getContext("2d"); ctx.drawImage(img, img.width * (i % 3) / 3, img.height * Math.floor(i / 3) / 3, img.width / 3, img.height / 3, 0, 0, item.width, item.height); }); }); document.addEventListener("touchstart", function (e) { var target = e.target; if (e.target.tagName.toLowerCase() !== "canvas") { return; } var ctx = target.getContext("2d"); var image = ctx.getImageData(0, 0, target.width, target.height); var obj = target.cloneNode(true); obj.getContext("2d").putImageData(image, 0, 0); var top = target.getBoundingClientRect().top, left = target.getBoundingClientRect().left; obj.style.cssText = "position: absolute; top: " + top + "px; left: " + left + "px"; document.body.appendChild(obj); var point = {"x": e.touches[0].pageX, "y": e.touches[0].pageY}; document.addEventListener("touchmove", touchMove = function (e) { obj.style.cssText = "position: absolute; top:" + (e.touches[0].pageY - point.y + top) + "px; left: " + (e.touches[0].pageX - point.x + left) + "px"; }); document.addEventListener("touchend", touchEnd = function (e) { var pos = {"x": e.changedTouches[0].pageX, "y": e.changedTouches[0].pageY}; [].forEach.call(document.querySelectorAll(".wrap canvas"), function (item, i) { var offset = item.getBoundingClientRect(); if (pos.x > offset.left && pos.x < (offset.left + item.width) && pos.y > offset.top && pos.y < (offset.top + item.height)) { var order1 = item.style.order; var order2 = target.style.order; if (obj.parentNode) { document.body.removeChild(obj); } item.style.order = order2; target.style.order = order1; } }); document.removeEventListener("touchmove", touchMove); document.removeEventListener("touchend", touchEnd); }) }) </script> </body> </html>
Wenn Sie testen, verwenden Sie zum Öffnen am besten den Google-Emulator oder ein Mobiltelefon, da nur mobile Touch-Ereignisse unterstützt werden.
Im Code sind nur die Grundfunktionen implementiert, die vollständigen Funktionen sind nicht implementiert.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

So nutzen Sie das Positionsattribut in H5 flexibel: Bei der H5-Entwicklung spielen häufig die Positionierung und das Layout von Elementen eine Rolle. Zu diesem Zeitpunkt kommt die CSS-Positionseigenschaft ins Spiel. Das Positionsattribut kann die Positionierung von Elementen auf der Seite steuern, einschließlich relativer Positionierung, absoluter Positionierung, fester Positionierung und fester Positionierung. In diesem Artikel wird detailliert beschrieben, wie das Positionsattribut in der H5-Entwicklung flexibel verwendet werden kann.

Tipps zur Optimierung von CSS-Layoutattributen: Positionsticky und Flexbox In der Webentwicklung ist das Layout ein sehr wichtiger Aspekt. Eine gute Layoutstruktur kann das Benutzererlebnis verbessern und die Seite schöner und einfacher zu navigieren machen. CSS-Layouteigenschaften sind der Schlüssel zum Erreichen dieses Ziels. In diesem Artikel werde ich zwei häufig verwendete Techniken zur Optimierung von CSS-Layouteigenschaften vorstellen: Positionsticky und Flexbox, und spezifische Codebeispiele bereitstellen. 1. Positionen

HTML-Tutorial: So verwenden Sie Flexbox für ein adaptives Layout mit gleicher Höhe, gleicher Breite und gleichem Abstand. Einführung: Im modernen Webdesign ist das Layout ein sehr wichtiger Faktor. Bei Seiten, die eine große Menge an Inhalten anzeigen müssen, ist es wichtig, die Position und Größe der Elemente sinnvoll anzuordnen, um eine gute Sichtbarkeit und Benutzerfreundlichkeit zu erreichen. Flexbox (Flexible Box Layout) ist ein sehr leistungsstarkes Tool, mit dem verschiedene flexible Layoutanforderungen einfach realisiert werden können. In diesem Artikel wird Flexbox im Detail vorgestellt

HTML-Tutorial: So verwenden Sie Flexbox für vertikales Höhenlayout In der Webentwicklung war das Layout schon immer ein wichtiges Thema. Insbesondere wenn ein vertikales Layout mit gleicher Höhe implementiert werden muss, stößt die herkömmliche CSS-Layoutmethode häufig auf einige Schwierigkeiten. Dieses Problem kann mit dem Flexbox-Layout leicht gelöst werden. In diesem Tutorial wird detailliert erläutert, wie Sie Flexbox für ein vertikales Layout mit gleicher Höhe verwenden, und es werden spezifische Codebeispiele bereitgestellt. Flexbox ist eine neue Funktion in CSS3, mit der sich flexible, responsive Layouts erstellen lassen.

HTML-Tutorial: Wie man Flexbox für ein adaptives Layout mit gleicher Höhe verwendet, sind spezifische Codebeispiele erforderlich. Einführung: Im Webdesign und in der Entwicklung ist die Implementierung eines adaptiven Layouts mit gleicher Höhe eine häufige Anforderung. Herkömmliche CSS-Layoutmethoden stoßen beim Umgang mit Layouts gleicher Höhe oft auf einige Schwierigkeiten, und das Flexbox-Layout bietet uns eine einfache und leistungsstarke Lösung. In diesem Artikel werden die grundlegenden Konzepte und die allgemeine Verwendung des Flexbox-Layouts vorgestellt und spezifische Codebeispiele gegeben, die den Lesern helfen sollen, die Verwendung von Flexbox schnell zu beherrschen und ihr eigenes Layout zu implementieren

Wie kann die Flexbox-Technologie von CSS3 genutzt werden, um eine gleichmäßige Verteilung von Webinhalten zu erreichen? Mit der Entwicklung des Webdesigns stellen die Menschen immer höhere Anforderungen an das Webseitenlayout. Um eine gleichmäßige Verteilung von Webinhalten zu erreichen, hat sich die Flexbox-Technologie von CSS3 zu einer sehr effektiven Lösung entwickelt. In diesem Artikel wird erläutert, wie Sie mit der Flexbox-Technologie eine gleichmäßige Verteilung von Webinhalten erreichen, und es werden einige praktische Beispiele gegeben. 1. Was ist die Flexbox-Technologie? Flexbox (elastisches Layout) ist eine neue Funktion, die in CSS3 hinzugefügt wurde.

HTML-Tutorial: So verwenden Sie Flexbox für ein gleichmäßig verteiltes Layout. Einführung: Im Webdesign ist es häufig erforderlich, Elemente zu gestalten. Herkömmliche Layoutmethoden weisen einige Einschränkungen auf, und Flexbox (flexibles Box-Layout) ist eine Layoutmethode, die mehr Flexibilität und Leistung bieten kann. In diesem Artikel wird erläutert, wie Sie mit Flexbox ein gleichmäßiges Verteilungslayout erzielen, und es werden spezifische Codebeispiele aufgeführt. 1. Einführung in Flexbox Flexbox ist ein in CSS3 eingeführtes flexibles Box-Layout-Modell, das es Elementen ermöglicht

HTML-Tutorial: So verwenden Sie Flexbox für ein skalierbares, gleichhohes, gleichbreites und gleichmäßiges Layout. 1. Was ist das Flexbox-Layout, das in CSS3 eingeführt wurde? Box-Modell-Layout. Es ist die Abkürzung für FlexibleBox, was flexibles Layout bedeutet. Das Flexbox-Layout kann die Position und Größe von Elementen automatisch an die Größe des Containers anpassen, um verschiedene flexible Anordnungen zu erreichen. 2. So verwenden Sie das Flexbox-Layout zum Erstellen
