krpano动态加载设置热点

krpano动态加载设置热点

月光魔力鸭

2018-09-13 16:49 阅读 4214 喜欢 4 krpano动态加载 设置hotspot

上一章中已经完成了比较简易的3D全景浏览,但是...这是写死在xml中的,对于我们实际的项目,这种情况是不可能适应的。所以,来了解下如何动态加载xml已经设置对应的热点。

我们的思路

实现

关于xml中的代码这里就不贴了,主要贴下动态加载的js代码。

/****
 * Krpano util ,通用函数类
 * @author lixun
 * @create 2018年9月11日 17:37:44
 ***/
 var krpano = null;
 var Common = {
     //获得场景信息
     getScene : function( id,cb ){
         //这里使用假数据
        var map = {
            '1' : {
                type : 'scenea.xml',//场景类型
                next : '2',//下一个场景ID
                prev : '3',//上一个场景ID
                imgs : [	//对应场景内的图片展示
                    '/img/1.jpg',
                    '/img/2.jpg',
                    '/img/3.jpg',
                    '/img/4.jpg',
                    '/img/5.jpg',
                    '/img/6.jpg',
                    '/img/7.jpg',
                    '/img/8.jpg',
                    '/img/9.jpg',
                    '/img/10.jpg',
                    '/img/11.jpg',
                    '/img/12.jpg',
                    '/img/13.jpg',
                    '/img/14.jpg',
                    '/img/15.jpg',
                    '/img/16.jpg',
                    '/img/17.jpg',
                    '/img/18.jpg',
                    '/img/19.jpg',
                    '/img/20.jpg',
                ]
            }//这里使用的是假数据,后续的就不贴了,占空间
        };
        if(cb){
            cb(map[id]);
        }
     },
     //加载场景
     loadPano : function(xml,imgs,next,prev){
        if(krpano){
            removepano('newId');
        }
        embedpano({
            swf : 'tour.swf', 		// path to flash viewer (use null if no flash fallback will be requiered)
            id : "newId", 
            xml : xml, 
            target : 'pano', 
            consolelog : true,					// trace krpano messages also to the browser console
            passQueryParameters : true, 		// pass query parameters of the url to krpano
            onready : function(krpano_interface){
                krpano = krpano_interface;
                //继续操作
                console.log('delay...');
                Common.setHot(imgs,next,prev);
            }
        });
         
     },
     //设置热点图片路径
     setHot : function(imgs,next,prev){
         console.log('hot setting')
         if (krpano){
             setTimeout(function(){
                 imgs.forEach(function(imgPath,index){
     				krpano.set("hotspot[dyn_img"+(index+1)+"].url", imgPath);	
     			})
     			//设置场景跳转
                krpano.set('hotspot[spot1].onhover','showtext(去往第1展厅,hotspottextstyle)');
                krpano.set('hotspot[spot2].onhover','showtext(去往第2展厅,hotspottextstyle)');
                krpano.set('hotspot[spot1].onclick','js(showScene('+prev+'))');
                krpano.set('hotspot[spot2].onclick','js(showScene('+next+'))');
                //随机观察点
                krpano.call("lookto(" + (Math.random() * 360.0 - 180.0) + "," + (Math.random() * 180.0 - 90.0) + "," + (80.0 + Math.random() * 100.0) + ")");
             },200)
        }
     }
 };

代码中基本上注释都写清楚了,主要的思路就是先根据展厅ID获得对应的xml以及图片,然后在加载另外的场景的时候,先移除掉现在的场景,然后重新加载。

JS调用:

//加载场景
var imgs = [];
function showScene(id){
    console.log('加载场景'+id);
    Common.getScene(id,function(obj){
        imgs = obj.imgs;
        Common.loadPano(obj.type,obj.imgs,obj.next,obj.prev);
    })
}

byy.require('win',function(){
    
    //第一次加载需要先确定场景,然后初始化场景,然后加载图片
    //后续的需要获得场景信息,然后加载不同的pano,然后加载图片信息
    Common.getScene(1,function(obj){
        console.log(obj);
        Common.loadPano(obj.type,obj.imgs,obj.next,obj.prev);
    })
    
})

这样,我们就能够在加载的时候动态加载我们需要的场景了,不需要一次全部加载,相对耗时短一些,当然对于图片的处理还是需要的,不然每个图片都很大的话,加载还是很慢的,两边要一起优化。

以上代码暂时只能用于demo的实现,具体生产中还没有开始使用,仅供借鉴!

相关文章: 初识Krpano

转载请注明出处: https://chrunlee.cn/article/3d-krpano-2.html


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
整理一些相关的信息,防止后续再找不到。
通过frp做穿透实现https 访问本地http项目。
ubuntu 配置nginx反向代理,这里简单记录下,后续再复习..
小程序需要用到用户的手机号码,看了下API 以及相关的demo,基本都是服务端进行解密的,问题是需要的参数并没有用到secret,只需要 session_key / iv /encryptedData 即可,那完全可以在客户端进行处理啊。
前几天同事抱怨说微博太费劲了... 一万多条记录,可能会把他累死,我心想.. 重复工作不都可以用程序代替么..
近期有添加数学公式的需求,找来找去,最后还是选择了最简单的。tinymce+kityformula
最近有一个任务一直在占满cpu, 总是会让我的服务器宕机,可是还得跑,想来想去想到了docker,印象中可以对cpu进行限制,这里简单记录下过程。
之前看知乎相中了一个想法,给宝宝做一个站,上传生活的日常照片啊、视频之类的,存储肯定是在自己家里,然后做个穿透这样..开始做的时候又想着是时候接触下这些东西了,虽然公司都一点不用,但是自己没事接触下拓展下也是好的。