Heim >Web-Frontend >H5-Tutorial >HTML5 Canvas-Implementierung der 360-Grad-Panorama-Methode
In diesem Artikel wird hauptsächlich der Beispielcode für die Implementierung eines 360-Grad-Panoramas in HTML5 Canvas vorgestellt. Der Herausgeber findet ihn recht gut, daher werde ich ihn jetzt mit Ihnen teilen und als Referenz verwenden. Folgen wir dem Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.
Viele Shopping-Websites unterstützen jetzt 360-Grad-Panoramabilder von realen Objekten, und Sie können Muster in 360-Grad-Ansicht anzeigen. Dies ist ein gutes Verbrauchererlebnis. Es gibt viele solcher Plug-Ins im Internet jQuery. Es gibt kostenpflichtige und kostenlose. Tatsächlich ist ein Plug-in namens 3deye.js sehr nützlich. Das Plug-in unterstützt Desktop- und mobile Endgeräte iOS und Android. Sein Demoprogramm: http://www.voidcanvas.com/demo/28823deye/
Nachdem ich diese Demo selbst gespielt habe, sind ähnliche Funktionen vorhanden auch mit HTML5 Canvas umgesetzt.
Lassen Sie uns zunächst über das Prinzip des 360-Grad-Panoramas sprechen.
Zuerst müssen Sie Bilder des tatsächlichen Objekts aufnehmen Jedes Foto ist um 15 Grad geneigt, es werden also 23 Fotos aufgenommen.
2. Nachdem das Foto fertig ist, versuchen Sie, das JPG-Format auszuwählen und es auf die entsprechende Größe zuzuschneiden.
3. Laden Sie alle Fotos vorab in JavaScript, um die Ladegenauigkeit in Verbindung mit dem Fortschrittsbalken anzuzeigen.
4. Erstellen Sie das Canvas-Objekt, fügen Sie Maus-Listening-Ereignisse hinzu und zeichnen Sie entsprechend verschiedene Frames links und rechts. Das allgemeine Prinzip ist einfach!
Implementierungscode:
<!DOCTYPE html> <html> <head> <meta charset=utf-8"> <title>Full 360 degree View</title> <script> var ctx = null; // global variable 2d context var frame = 1; // 23 var width = 0; var height = 0; var started = false; var images = new Array(); var startedX = -1; window.onload = function() { var canvas = document.getElementById("fullview_canvas"); canvas.width = 440;// window.innerWidth; canvas.height = 691;//window.innerHeight; width = canvas.width; height = canvas.height; var bar = document.getElementById('loadProgressBar'); for(var i=1; i<24; i++) { bar.value = i; if(i<10) { images[i] = new Image(); images[i].src = "0" + i + ".jpg"; } else { images[i] = new Image(); images[i].src = i + ".jpg"; } } ctx = canvas.getContext("2d"); // mouse event canvas.addEventListener("mousedown", doMouseDown, false); canvas.addEventListener('mousemove', doMouseMove, false); canvas.addEventListener('mouseup', doMouseUp, false); // loaded(); // frame = 1 frame = 1; images[frame].onload = function() { redraw(); bar.style.display = 'none'; } } function doMouseDown(event) { var x = event.pageX; var y = event.pageY; var canvas = event.target; var loc = getPointOnCanvas(canvas, x, y); console.log("mouse down at point( x:" + loc.x + ", y:" + loc.y + ")"); startedX = loc.x; started = true; } function doMouseMove(event) { var x = event.pageX; var y = event.pageY; var canvas = event.target; var loc = getPointOnCanvas(canvas, x, y); if (started) { var count = Math.floor(Math.abs((startedX - loc.x)/30)); var frameIndex = Math.floor((startedX - loc.x)/30); while(count > 0) { console.log("frameIndex = " + frameIndex); count--; if(frameIndex > 0) { frameIndex--; frame++; } else if(frameIndex < 0) { frameIndex++; frame--; } else if(frameIndex == 0) { break; } if(frame >= 24) { frame = 1; } if(frame <= 0) { frame = 23; } redraw(); } } } function doMouseUp(event) { console.log("mouse up now"); if (started) { doMouseMove(event); startedX = -1; started = false; } } function getPointOnCanvas(canvas, x, y) { var bbox = canvas.getBoundingClientRect(); return { x: x - bbox.left * (canvas.width / bbox.width), y: y - bbox.top * (canvas.height / bbox.height) }; } function loaded() { setTimeout( update, 1000/8); } function redraw() { // var imageObj = document.createElement("img"); // var imageObj = new Image(); var imageObj = images[frame]; ctx.clearRect(0, 0, width, height) ctx.drawImage(imageObj, 0, 0, width, height); } function update() { redraw(); frame++; if (frame >= 23) frame = 1; setTimeout( update, 1000/8); } </script> </head> <body> <progress id="loadProgressBar" value="0" max="23"></progress> <canvas id="fullview_canvas"></canvas> <button onclick="loaded()">Auto Play</button> </body> </html>
Demo-Datei-Download-Adresse-> fullview_jb51.rar
Verwandte Empfehlungen:
So verwenden Sie H5 Canvas zum Implementieren eines dynamischen 3D-Diagramms
HTML2-Canvas zum Implementieren von Browser-Screenshots
JS+ Dynamic mechanischer Uhranimationseffekt, gezeichnet von Leinwand
Das obige ist der detaillierte Inhalt vonHTML5 Canvas-Implementierung der 360-Grad-Panorama-Methode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!