首页前端开发HTMLHTML5 Canvas实现360度全景方法

HTML5 Canvas实现360度全景方法

时间2024-01-23 05:05:03发布访客分类HTML浏览618
导读:收集整理的这篇文章主要介绍了HTML5 Canvas实现360度全景方法,觉得挺不错的,现在分享给大家,也给大家做个参考。本文主要介绍HTML5 canvas实现360度全景图的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...
收集整理的这篇文章主要介绍了HTML5 Canvas实现360度全景方法,觉得挺不错的,现在分享给大家,也给大家做个参考。本文主要介绍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对象,加上鼠标监听事件,当鼠标左右移动时候,适度的绘制不同帧。大致的原理就是这样,简单吧!

实现代码:


!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;
     i24;
 i++)          {
                  bar.value = i;
              if(i10)              {
                      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演示文件下载地址-> fullview_jb51.rar

相关推荐:

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

html2 canvas实现浏览器截图

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

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

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: canvas多边形的画法示例下一篇:font-weight:blod的跳动问题怎样...猜你在找的html5相关文章 关于移动端h5开发相关内容总结2022-05-17html5教程-学表单的第二天2018-12-10html5教程-HTML5浏览器支持2018-12-10html5教程-HTML5智能表单2018-12-10html5教程-微信H5使用resLoader实现加载页效果2018-12-10html5教程-day01-初级-JS0-热身运动JS入门教程2018-12-10html5教程-html5shiv.js和respond.min.js2018-12-10html5教程-不同浏览器对于html5 audio标签和音频格式的兼容性2018-12-10html5教程-使用Html5实现手风琴案例2018-12-10html5教程-html5笔记2018-12-10 其他相关热搜词更多phpjavapython程序员load

若转载请注明出处: HTML5 Canvas实现360度全景方法
本文地址: https://pptw.com/jishu/583802.html
手机端怎样用rem+scss做适配 怎样用H5的WebGL实现3D虚拟机房的漫游动画

游客 回复需填写必要信息