当前位置:Gxlcms > html代码 > HTML5Canvas实现360度全景方法

HTML5Canvas实现360度全景方法

时间:2021-07-01 10:21:17 帮助过:136人阅读

本文主要介绍HTML5 Canvas实现360度全景图的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

很多购物网站现在都支持360实物全景图像,可以360度任意选择查看样品,这样对购买者来说是一个很好的消费体验,网上有很多这样的插件都是基于jQuery实现的有收费的也有免费的,其实很好用的一个叫3deye.js的插件。该插件支持桌面与移动终端iOS与Android, 它的demo程序:http://www.voidcanvas.com/demo/28823deye/

自己玩了玩这个Demo以后,照着它的思路,用HTML5 Canvas也实现了类似的功能。

所以先说一下它的360度全景图的原理

1. 首先需要对实物拍照,间隔是每张照片旋转15度,所以需要23张照片。
2.照片准备好了以后,尽量选择JPG格式,裁剪到适当大小。
3.JavaScript中预加载所有照片,可以配合进度条显示加载精度
4.创建/获取Canvas对象,加上鼠标监听事件,当鼠标左右移动时候,适度的绘制不同帧。大致的原理就是这样,简单吧!

实现代码:


  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset=utf-8">
  5. <title>Full 360 degree View</title>
  6. <script>
  7. var ctx = null; // global variable 2d context
  8. var frame = 1; // 23
  9. var width = 0;
  10. var height = 0;
  11. var started = false;
  12. var images = new Array();
  13. var startedX = -1;
  14. window.onload = function() {
  15. var canvas = document.getElementById("fullview_canvas");
  16. canvas.width = 440;// window.innerWidth;
  17. canvas.height = 691;//window.innerHeight;
  18. width = canvas.width;
  19. height = canvas.height;
  20. var bar = document.getElementById('loadProgressBar');
  21. for(var i=1; i<24; i++)
  22. {
  23. bar.value = i;
  24. if(i<10)
  25. {
  26. images[i] = new Image();
  27. images[i].src = "0" + i + ".jpg";
  28. }
  29. else
  30. {
  31. images[i] = new Image();
  32. images[i].src = i + ".jpg";
  33. }
  34. }
  35. ctx = canvas.getContext("2d");
  36. // mouse event
  37. canvas.addEventListener("mousedown", doMouseDown, false);
  38. canvas.addEventListener('mousemove', doMouseMove, false);
  39. canvas.addEventListener('mouseup', doMouseUp, false);
  40. // loaded();
  41. // frame = 1
  42. frame = 1;
  43. images[frame].onload = function() {
  44. redraw();
  45. bar.style.display = 'none';
  46. }
  47. }
  48. function doMouseDown(event) {
  49. var x = event.pageX;
  50. var y = event.pageY;
  51. var canvas = event.target;
  52. var loc = getPointOnCanvas(canvas, x, y);
  53. console.log("mouse down at point( x:" + loc.x + ", y:" + loc.y + ")");
  54. startedX = loc.x;
  55. started = true;
  56. }
  57. function doMouseMove(event) {
  58. var x = event.pageX;
  59. var y = event.pageY;
  60. var canvas = event.target;
  61. var loc = getPointOnCanvas(canvas, x, y);
  62. if (started) {
  63. var count = Math.floor(Math.abs((startedX - loc.x)/30));
  64. var frameIndex = Math.floor((startedX - loc.x)/30);
  65. while(count > 0)
  66. {
  67. console.log("frameIndex = " + frameIndex);
  68. count--;
  69. if(frameIndex > 0)
  70. {
  71. frameIndex--;
  72. frame++;
  73. } else if(frameIndex < 0)
  74. {
  75. frameIndex++;
  76. frame--;
  77. }
  78. else if(frameIndex == 0)
  79. {
  80. break;
  81. }
  82. if(frame >= 24)
  83. {
  84. frame = 1;
  85. }
  86. if(frame <= 0)
  87. {
  88. frame = 23;
  89. }
  90. redraw();
  91. }
  92. }
  93. }
  94. function doMouseUp(event) {
  95. console.log("mouse up now");
  96. if (started) {
  97. doMouseMove(event);
  98. startedX = -1;
  99. started = false;
  100. }
  101. }
  102. function getPointOnCanvas(canvas, x, y) {
  103. var bbox = canvas.getBoundingClientRect();
  104. return { x: x - bbox.left * (canvas.width / bbox.width),
  105. y: y - bbox.top * (canvas.height / bbox.height)
  106. };
  107. }
  108. function loaded() {
  109. setTimeout( update, 1000/8);
  110. }
  111. function redraw()
  112. {
  113. // var imageObj = document.createElement("img");
  114. // var imageObj = new Image();
  115. var imageObj = images[frame];
  116. ctx.clearRect(0, 0, width, height)
  117. ctx.drawImage(imageObj, 0, 0, width, height);
  118. }
  119. function update() {
  120. redraw();
  121. frame++;
  122. if (frame >= 23) frame = 1;
  123. setTimeout( update, 1000/8);
  124. }
  125. </script>
  126. </head>
  127. <body>
  128. <progress id="loadProgressBar" value="0" max="23"></progress>
  129. <canvas id="fullview_canvas"></canvas>
  130. <button onclick="loaded()">Auto Play</button>
  131. </body>
  132. </html>

Demo演示文件下载地址-> fullview_jb51.rar

相关推荐:

怎样用H5 Canvas实现3D动态Chart图表

html2 canvas实现浏览器截图

JS+canvas绘制的动态机械表动画效果

以上就是HTML5 Canvas实现360度全景方法的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行