日常闲扯

从上一篇文章到这篇中间快过了一年了,时间真滴过得快。不是在下中间没想过写新的文章,而是自己确实变懒了(体重+1 +1 +1 +1....) 。。OTL。。。不过到最后觉得还是需要写点东西,不然人就真废了,于是便有了这样一个插件(其实是偶然看到别人的一个全景案例不是用webgl写的,从而产生了兴♂趣,就去练了一下手)。

代码总的来说比较简单,相比较webgl上手难度来讲,用css3简单太多了,主要是简单的初高中数学几何学知识,然后用好perspective和transform就行了,废话就到这里,下面开始正文。

链接

demo : 点我,我是demo
github : 欢迎大家来点个星

原理

总的来说,就一句话: 保证3D的视点在场景立方体的内部就行了,如下图(从别人那里拿的)

  1. 各边初始位置指的就是:场景容器的translateZ的值;
  2. 视点距场景的距离是 let space = perspective的值 - 场景容器的translateZ值
  3. 而形成3D全景效果的条件就是:space < 多边形的边偏移的translateZ值。

不理解的可以看这篇文章,原理写得比我详细多了:地址

我这里补充一点踩坑情况:

1.各边偏移距离的计算方法
首先需要确定多边形的边数,最小为4,我们这里设为10,那么每条边与中心点的夹角为 360/10 = 36度
其次确定每条边的长度, 边长 = 图片宽度 / 数量, 我们这里假设 图片宽度 5000,有 边长 = 5000 / 10 = 500px
最后确定偏移距离:

let num = 10; //边数
let angle = 360 / num; //每条边对应夹角
let width = 5000;
let unit = width / num;
let translateZ = ( unit / 2 ) / Math.tan( angle / 2 * Math.PI / 180 );
//这里基本上已经计算完成,但是实际效果是每一块区域都会显示一条条白色的边,很难看,具体可以参考上面别人写的那篇文章里的案例。所以我们需要做点处理
let transZ = translateZ - 5;
//往中心偏移5px,这样就看不出来了

2.关于初始角度的问题
由于处理多边形每条边的时候是 “先旋转,后偏移” 所以“默认情况下”我们见到的第一张图是并不属于第一条边,第一条边正对屏幕向外。这里我们让 场景元素 初始从-180度 开始就可以了

插件使用方法

无依赖库
详细可以查看 github

let w3d = new watch3D({wrapper : ".wrapper", //容器元素为.wrapperautoplay : true, //自动播放width: 5000, //宽度为5000height : 2500, //高度为2500num : 12, //分成12块maxY : 25, //最大仰俯角为25度reverse : false, //反向为falsetips : { //tip数据0 : {styles : {"height" : "100px","width" : "100px","background-color" : "#6cf","text-align" : "center","margin-right" : "10px","color" : "#fff","cursor" : "pointer"},content : "风景1",callback : function(e){w3d.pause();w3d.changeData({num : 10,resource : "sources/4.jpg"},true);}}},resource : "sources/5.jpg", //图片资源地址loadstart : function(){//加载开始时},loading : function(data){//加载中},loadend : function(data){//加载结束后},start : function(point){//触摸开始},move : function(point){//触摸移动中},end : function(point){//触摸结束}
});

结语

文章写得比较简单,主要是不知道要写些什么东西,贴代码一段一段解释的话感觉很累,而且源码中基本上我都加了注释,所以偷点懒吧。

插件只提供了一些基本的功能,没有监听deviceorientation事件,不是没这打算,是在编写过程中遇到了一个bug而且查了半天也没找到解决办法(当beta值处于90和-90时,alpha和gamma会跳动得很厉害,没办法让体验变得顺畅,所以去除了)。如果有人碰到过类似的问题并且找到了解决办法的话,强烈欢迎留言或者私信,毕竟本人还是想写个完整的插件的。

以上,文章很乱,写也得不怎么尽兴,主要是没办法把教程写清楚,如果确实疑问很大的话可以联系我,我会尽力回答的,求各位大神轻喷,谢谢。

JS+CSS3 360度全景图插件 - Watch3D.js相关推荐

  1. Three.js制作360度全景图

    这是个基于three.js的插件,预览地址:戳这里 使用方法: 1.这个插件的用法很简单,引入如下2个js <script src="js/three.min.js"> ...

  2. 360全景html插件,jQuery 360度全景图插件 PANORAMA VIEWER

    插件描述:PANORAMA VIEWER将帮助您把全景照片嵌入在网站上.使用鼠标拖拽方试查看效果. 基本用法 现在你可以用这个插件显示你的全景照片.因此,首先你必须将最新的jQuery库,jquery ...

  3. html实现360展示图片,js html5 360度全景图片预览效果

    特效描述:js html5 360度全景图片 预览效果.html5实现360度全景,html5 720度全景图,html5全景图,html5全景图源代码,html5 3d全景,360度全景图,3d36 ...

  4. java全景图片切割 全景,基于Three.js实现360度全景图片

    Three.js 是一款运行在浏览器中的3D引擎, 处理三维效果.在一些相机的官网首页中,经常有一张图在旋转,图上面悬浮着文字.这种效果是如何做出来的呢?先看效果,再讲解. 1).建立一个java w ...

  5. 基于Three.js的360度全景图片

    Three.js 是一款运行在浏览器中的 3D 引擎, 处理三维效果.在一些相机的官网首页中,经常有一张图在旋转,图上面悬浮着文字.这种效果是如何做出来的呢?先看效果,再讲解. 1).建立一个java ...

  6. html5图片自动翻转,纯js实现360度旋转预览图片特效

    这是一款纯js实现360度旋转预览图片特效.该js特效仅使用120行代码,即可实现通过滑块.或鼠标手动360度旋转图片,以及自动360度旋转图片的效果. 使用方法 HTML结构 import Roll ...

  7. HTML5 Canvas实现360度全景图

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

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

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

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

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

最新文章

  1. 扩展城市信道etu模型matlab仿真,LTE System Toolbox:无线通信系统的仿真、分析和测试...
  2. Linux下vi编辑器命令精华版
  3. 一些NLP的入门资料参考
  4. 大学python教材实验七字典与集合答案_2018-08-28 day7 python基础 字典和集合(含作业)...
  5. QT的QStatusBar类的使用
  6. WebService系列之使用Axis获取天气预报数据
  7. HDU 1814 Peaceful Commission / HIT 1917 Peaceful Commission /CJOJ 1288 和平委员会(2-sat模板题)...
  8. eclipse怎样改编码格式_Eclipse中各种编码格式及设置
  9. 面对imbalance data的时候
  10. VUE2.0增删改查附编辑添加model(弹框)组件共用
  11. 【cocos2d-x从c++到js】10:JS与C++的交互2——JS与C++的“函数重载”问题
  12. Docker教程小白实操入门(20)--如何删除数据卷
  13. 一行代码即可删除C盘几十G垃圾,清理c盘垃圾的cmd命令
  14. 数字电路技术基础-1-补码
  15. 【175】Easy CHM的使用
  16. 写给小白的云计算入门科普
  17. 七牛云实现视频拼接和转码
  18. Java数据可视化 (JavaFX, Apache ECharts)
  19. GRO checksum在tcpdump中incorrect的问题
  20. 文件名和文件夹的bat批量重命名替换关键字和删除关键字

热门文章

  1. review what i studied `date` - 2017-4-12
  2. 解决eclipse ctrl+鼠标左键不能用
  3. Mysql实现非程序控制读写分离
  4. Python工具 | 9个用来爬取网络站点的 Python 库
  5. 浅谈 sessionStorage、localStorage、cookie 的区别以及使用
  6. 记住这35个英文单词,你就可以在RPA界混了!
  7. 作为JavaScript开发人员,这些必备的VS Code插件你都用过吗
  8. 有关Gradle Network is unreachable: connect的报错
  9. grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)
  10. WEB安全,SQL注入漏洞的加固代码汇总