本文主要介绍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对象,加上鼠标监听事件,当鼠标左右移动时候,适度的绘制不同帧。大致的原理就是这样,简单吧!

实现代码:

Full 360 degree View

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);

}

Auto Play

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

相关推荐:

php 360全景,HTML5 Canvas实现360度全景方法相关推荐

  1. html360全景图原理,HTML5 Canvas实现360度全景图

    HTML5 Canvas实现360度全景图 发布时间:2020-07-22 12:15:07 来源:51CTO 阅读:557 作者:gloomyfish 很多购物网站现在都支持360实物全景图像,可以 ...

  2. html页面画一个矩形,使用HTML5 canvas绘制一个矩形的方法

    使用HTML5 canvas绘制一个矩形的方法 发布时间:2020-08-29 11:23:12 来源:亿速云 阅读:102 作者:小新 这篇文章将为大家详细讲解有关使用HTML5 canvas绘制一 ...

  3. CSS3 渐变新特性和HTML5 Canvas画布背景渐变实现方法详解

    CSS3 渐变新特性和HTML5 Canvas画布背景渐变实现方法详解 大家好,又见面了,感觉我上一篇博客对部分同学都挺有帮助的,于是我决定继续写下去,会继续的解析知识点让大家更容易理解,希望能给大家 ...

  4. html5全景代码,HTML5 Canvas实现360度全景图的示例代码

    很多购物网站现在都支持360实物全景图像,可以360度任意选择查看样品,这样对购买者来说是一个很好的消费体验,网上有很多这样的插件都是基于jQuery实现的有收费的也有免费的,其实很好用的一个叫3de ...

  5. HTML5 Canvas实现360度全景图

    很多购物网站现在都支持360实物全景图像,可以360度任意选择查看样品,这样 对购买者来说是一个很好的消费体验,网上有很多这样的插件都是基于JQuery实现的 有收费的也有免费的,其实很好用的一个叫3 ...

  6. 提高HTML5 canvas性能的几种方法

    简介 HTML5 canvas 最初起源于苹果(Apple)的一项实验,现在已经成为了web中受到广泛支持的2D快速模式绘图(2D immediate mode graphic)的标准.许多开发者现在 ...

  7. 提高HTML5 canvas性能的几种方法!

    http://blog.csdn.net/zyz511919766/article/details/7401792 简介 HTML5 canvas 最初起源于苹果(Apple)的一项实验,现在已经成为 ...

  8. clear html5代码,用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能

    在现实世界中,我们使用画笔在画板上进行绘画:在html5 canvas中,我们同样可以使用canvas的画笔--CanvasRenderingContext2D对象在canvas上进行绘画.众所周知, ...

  9. html5 canvas 画笔透明的实现方法

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  10. HTML5 canvas 计算文字宽度的方法(measureText)

    var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); ctx.font= ...

最新文章

  1. Spring boot自动配置使用
  2. Python中的ThreadLocal变量
  3. 免费福利 | 送你一份免费音频,让你躺着也能学习葡萄酒知识!
  4. Java 8中字符串拼接新姿势:StringJoiner
  5. ASCII表 基本记忆 -- C
  6. 《avascript 高级程序设计(第三版)》 ---第二章 在HTML中使用Javascript
  7. WebSocket消息推送(实现进行聊天)和WebSocket简介
  8. fio 磁盘I/O测试工具
  9. OneDrive更换要同步文件夹
  10. Java 基础知识 【钢镚核恒】
  11. MATLAB中MRE误差怎么算,『怎样用excel 求RMSE(均方根误差)和MRE(平均相对误差),不知道选计算函数中的哪个,非常谢谢。』excle怎么算均方误差...
  12. React-native学习-59:使用react-native-vector-icons图标库
  13. selenium-登录腾讯防水墙案例
  14. 运营方法论——增长黑客
  15. 计算机组成部件及其作用,计算机硬件组成成分各自的功能 计算机硬件有哪几部分组成?请分别说明各部分的作用?...
  16. 基于springboot的校园食堂订餐系统
  17. Java实现 LeetCode 765 情侣牵手(并查集 || 暴力)
  18. 05如何处理类别特征?
  19. sql 转换 不足位数补0
  20. 织梦网站在空间怎么转服务器,织梦网站换空间

热门文章

  1. 人工智能对《权力的游戏》大结局预测 | 广东省智能创新协会
  2. 微信小程序|开发FAQ篇
  3. 我只会SQL,到底能不能找到工作?
  4. maven 插件 aven-assembly--plugin的使用
  5. PR剪辑-电子相册学习笔记
  6. vs2017 自定义背景图片
  7. Hyperledger Explorer部署
  8. 问题 Q(1208): 【基础算法】倒酒问题
  9. 百度信息流推广oCPC调研
  10. 学之思开源考试系统搭建