基于Three.js插件制作360度全景图


Posted in Javascript onNovember 29, 2016

这是个基于three.js的插件,预览地址:戳这里

使用方法:

1、这个插件的用法很简单,引入如下2个js

<script src="js/three.min.js"></script>
<script src="js/photo-sphere-viewer.min.js"></script>

2、初始化一下,(具体各种参数配置根据情况而定)

var PSV = new PhotoSphereViewer({
// 全景图的完整路径
panorama: 'images/360img03.jpg',
// 放全景图的元素
container: div
})

配置参数

下面是该全景图插件的所有可用配置参数:

panorama:必填参数,全景图的路径。
container:必填参数,放置全景图的div元素。
autoload:可选,默认值为true,true为自动调用全景图,false为在后面加载全景图(通过.load()方法)。
usexmpdata:可选,默认值为true,如果Photo Sphere Viewer必须读入XMP数据则为true。
default_position:可选,默认值为{},定义默认的位置,及用户看见的第一个点,例如:{long: Math.PI, lat: Math.PI/2}。
min_fov:可选,默认值为30,观察的最小区域,单位degrees,在1-179之间。
max_fov:可选,默认值为90,观察的最大区域,单位degrees,在1-179之间。
allow_user_interactions:可选,默认值为true,设置为false则禁止用户和全景图交互(导航条不可用)。
tilt_up_max:可选,默认值为Math.PI/2,向上倾斜的最大角度,单位radians。
tilt_down_max:可选,默认值为Math.PI/2,向下倾斜的最大角度,单位radians。
zoom_level:可选,默认值为0,默认的缩放级别,值在0-100之间。
long_offset:可选,默认值为PI/360,mouse/touch移动时每像素经过的经度值。
lat_offset:可选,默认值为PI/180,mouse/touch移动时每像素经过的纬度值。
time_anim:可选,默认值为2000,全景图在time_anim毫秒后会自动进行动画。(设置为false禁用它)
theta_offset:过时的选项,可选,默认值为1440,自动动画时水平方向的速度。
anim_speed:可选,默认值为2rpm,动画的速度,每秒/分钟多少radians/degrees/revolutions。
navbar:可选值,默认为false。显示导航条。
navbar_style:可选值,默认为{}。导航条的自定义样式。下面是可用的样式列表:
backgroundColor:导航条的背景颜色,默认值为rgba(61, 61, 61, 0.5)。
buttonsColor:按钮的前景颜色,默认值为transparent。
activeButtonsBackgroundColor:按钮激活状态的背景颜色,默认值为rgba(255, 255, 255, 0.1)。
buttonsHeight:按钮的高度,单位像素,默认值为20。
autorotateThickness:autorotate图标的厚度,单位像素,默认值为1。
zoomRangeWidth:缩放的范围,单位显示,默认值50。
zoomRangeThickness:缩放的范围的厚度,单位像素,默认值1。
zoomRangeDisk:缩放范围的圆盘直径,单位像素,默认值为7。
fullscreenRatio:全屏图标的比例,默认值为3/4。
fullscreenThickness:全屏图标的厚度,单位像素,默认值为2。
loading_msg:可选,默认值为Loading…,图片加载时的提示文字。
loading_img:可选,默认值为null,在加载时显示的图片的路径。
size:可选,默认值null,全景图容器的最终尺寸。例如:{width: 500, height: 300}。
onready:可选值,默认值为null。当全景图准备就绪并且第一张图片显示时的回调函数。

3、上面demo的代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>360全景图</title>
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
<!-- 启用webAPP全屏模式-->
<meta name="apple-mobile-web-app-capable" content="yes">
<!-- 隐藏状态栏或者设置状态栏的颜色-->
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<!-- 禁止缓存访问页面-->
<meta http-equiv="Pragma" content="no-cache">
<meta name="applicable-device" content="mobile">
<!-- 页面关键词-->
<link rel="stylesheet" href="css/demo01.css">
<script src="js/three.min.js"></script>
<script src="js/photo-sphere-viewer.min.js"></script>
<!---->
<script src="js/demo01.js"></script>
<!--[if IE]>
<script src="http://libs.useso.com/js/html5shiv/3.7/html5shiv.min.js"></script>
<![endif]-->
</head>
<body>
<div class="main">
<h3 id="title">旋转查看效果</h3>
<div id="container"></div>
</div>
</body>
</html>
*{
margin: 0;
padding: 0;
list-style: none;
box-sizing: border-box;
text-decoration: none;
border: 0;
outline: 0;
}
.main{
max-width: 640px;
width: 100%;
margin: 0 auto;
}
.main h3{
text-align: center;
padding: 10px 0;
}
/**
* Created by Administrator on 2016/11/29.
*/
//必须在服务器上才能看到效果!
window.onload=function(){
getTitleHeight();
loadingAllImg();
}
//让全景图刚好撑满屏幕
var canvasHeight;
function getTitleHeight(){
var title=document.getElementById('title');
var titleHeight=parseFloat(getComputedStyle(title).height);
var maxHeight=window.innerHeight;
canvasHeight=parseFloat(maxHeight-titleHeight)+'px';
}
//全景图参数配置函数
function loadingAllImg(){
var div = document.getElementById('container');
var PSV = new PhotoSphereViewer({
// 全景图的完整路径
panorama: 'images/360img03.jpg',
// 放全景图的元素
container: div,
// 可选,默认值为2000,全景图在time_anim毫秒后会自动进行动画。(设置为false禁用它)
time_anim: false,
// 可选值,默认为false。显示导航条。
navbar: true,
// 可选,默认值null,全景图容器的最终尺寸。例如:{width: 500, height: 300}。
size: {
width: '100%',
height: canvasHeight
}
});
}

同时,在github上面,大家搜索(Photo Sphere Viewer),也能找到!目前这个插件感觉还不是很完善。

以上所述是小编给大家介绍的Three.js制作360度全景图,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
写出更好的JavaScript程序之undefined篇(中)
Nov 23 Javascript
js制作的鼠标悬浮时产生的下拉框效果
Oct 27 Javascript
jquery判断元素的子元素是否存在的示例代码
Feb 04 Javascript
使用js实现一个可编辑的select下拉列表
Feb 20 Javascript
使用jquery实现IE下按backspace相当于返回操作
Mar 18 Javascript
javascript中Date对象应用之简易日历实现
Jul 12 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
Dec 19 Javascript
原生js实现放大镜效果
Jan 11 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
Sep 03 jQuery
Javascript实现秒表倒计时功能
Nov 17 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
Nov 30 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
May 20 Javascript
jquery购物车结算功能实现方法
Oct 29 #Javascript
JavaScript微信定位功能实现方法
Nov 29 #Javascript
jQuery中的select操作详解
Nov 29 #Javascript
微信小程序加载更多 点击查看更多
Nov 29 #Javascript
AngularJs表单验证实例代码解析
Nov 29 #Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
Nov 29 #Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
Nov 29 #Javascript
You might like
php AJAX实例根据邮编自动完成地址信息
2008/11/23 PHP
ThinkPHP3.1新特性之G方法的使用
2014/06/19 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
javaScript的函数对象的声明详解
2015/02/06 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
JS onkeypress兼容性写法详解
2016/04/27 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
JS高级运动实例分析
2016/12/20 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
JS和Canvas实现图片的预览压缩和上传功能
2018/03/30 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
利用Python实现颜色色值转换的小工具
2016/10/27 Python
Python编程实现使用线性回归预测数据
2017/12/07 Python
Python去除、替换字符串空格的处理方法
2018/04/01 Python
详解django.contirb.auth-认证
2018/07/16 Python
python 产生token及token验证的方法
2018/12/26 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
Pandas读写CSV文件的方法示例
2019/03/27 Python
python实现滑雪者小游戏
2020/02/22 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
英国奢华护肤、美容和Spa品牌:Temple Spa
2019/11/02 全球购物
计算机专业毕业生的自我评价
2013/11/18 职场文书
工业学校毕业生自荐书
2014/01/03 职场文书
幼儿园大班新学期寄语
2014/01/18 职场文书
学生会主席竞聘书
2014/03/31 职场文书
原料仓管员岗位职责
2014/04/12 职场文书
遗失说明具结保证书
2015/02/26 职场文书
勤俭节约倡议书范文
2015/04/29 职场文书
mysql 数据插入优化方法之concurrent_insert
2021/07/01 MySQL
Nginx 反向代理解决跨域问题多种情况分析
2022/01/18 Servers
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL