Pārlūkot izejas kodu

commit in 2.11.

小太阳 6 gadi atpakaļ
vecāks
revīzija
98666f9ed6

+ 6 - 0
.gitignore

@@ -0,0 +1,6 @@
+##ignore this file##
+panorama/
+panos/
+img/
+media/
+sound/

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1177 - 0
bf.xml


+ 244 - 0
code/main.js

@@ -0,0 +1,244 @@
+		function callar(){
+		  
+		     ajax.get('/artrack/count_ar', {
+		        event_id: 'share_page_play_click',
+		        ar_key: '10001240',
+		        ar_type: '0'
+		    });
+		    var data = {};
+		    var arValue = {
+		        arKey: '10001240',
+		        arType: '0',
+		        arLoc: '',
+		        arChannel: 'share'
+		    };
+		    if (Box.isBox) {
+		        // 在框内
+		        var isIos = false;
+		        var isAndroid = false;
+		        isIos = !(isAndroid = Box.os.name === 'android');
+		        if (isAndroid) {
+		            Box.android.invokeApp('Bdbox_android_send_intent', 'send', [
+		            'intent:widgetid://com.baidu.searchbox/-1#Intent;' + 'action=com.baidu.searchbox.action.ar_invoke;' + 'category=android.intent.category.LAUNCHER;' + 'component=com.baidu.searchbox/.CodeScannerActivity;' + 'launchFlags=0x10000000;' + 'S.arValue=' + JSON.stringify(arValue) + ';' + 'end'
+		          ]);
+		        } else {
+		            location.href = 'baiduboxapp://imagesearch?action=ar_invoke&arValue=' + JSON.stringify(arValue);
+		        }
+		    } else {
+		        var intent = 'intent:widgetid://com.baidu.searchbox/-1#Intent;' + 'action=com.baidu.searchbox.action.ar_invoke;' + 'category=android.intent.category.LAUNCHER;' + 'component=com.baidu.searchbox/.CodeScannerActivity;' + 'launchFlags=0x10000000;' + 'S.arValue=' + JSON.stringify(arValue) + ';' + 'end';
+
+		        data.iosScheme = 'baiduboxapp://imagesearch?action=ar_invoke&arValue=' + JSON.stringify(arValue);
+		        data.androidCommand = 'baiduboxapp://utils?action=sendIntent&minver=6.9.1&params=' + encodeURIComponent(JSON.stringify({
+		          intent: intent
+		        }));
+		        openBox.open(data);
+		    }
+		}
+
+
+		!function(){    window.__data = {
+		        src: '',
+		        arkey: '10001240',
+		        artype: '0'
+		    };
+		    window.__statis.push(window.__data);
+		    // require('site:widget/play-without-image/play.js');
+		}();
+
+		!function(){window.Du = {
+			    front: {
+			        pcPageUrl: 'http://www.baidu.com'
+			    }
+			};
+
+			window.openBox = window.OpenBox({
+			    // showTip: true,
+			    serverSchemeInfo: {
+			        type: 'feed',
+			        context: '%7B"nid"%3A"news_3740858182797623185"%2C"content_sign"%3A"7406472419345964060"%2C"sourceFrom"%3A"bjh"%7D'
+			    },
+			    from: 'openBoxTest',
+			    channel: 'openBoxTextChannel'
+			});
+
+		}();
+
+
+		function get_path() {
+		    var url = document.location.href.toString();
+		   var index = url.lastIndexOf("/");
+		   var relUrl = url.substring(0, index);
+
+		    if (relUrl.indexOf("?") != -1) {
+		        relUrl = relUrl.split("?")[0];
+		    }
+
+		  return relUrl;
+		}
+
+		var share_title = '梁家河 · 一个把心留住的地方';
+		var share_summary = '梁家河数字博物馆,用互联网科技带你身临其境,穿越知青岁月。';
+		var share_url = "https://baike.baidu.com/activity/liangjiahe";
+		var share_icon = get_path()+"/img/icon.jpg";
+
+		var  BoxShareData = {
+			"successcallback": "",// 回调函数名,基本没用
+  		    "errorcallback": "",// 回调函数名,基本没用
+
+		    "options": {
+		        "type": "url", // 链接分享
+		        "mediaType": "all", // 所有平台(调起分享面板)
+		        "linkUrl": share_url, // 需要分享的链接
+		        "title": share_title, // 分享的标题
+		        "content": share_summary, // 可根据需要与title不同,此处仅为示例
+		        "iconUrl": share_icon, // 链接分享中的缩略图
+		    }
+		};
+		
+
+	    var shareData = {
+              title: "梁家河 · 一个把心留住的地方",
+              desc: "梁家河数字博物馆,用互联网科技带你身临其境,穿越知青岁月。",
+              link: "https://baike.baidu.com/activity/liangjiahe",
+              imgUrl: get_path()+"/img/icon.jpg"
+          };
+        var shareDataTl = {
+              title: "梁家河·一个把心留住的地方",
+              desc: "梁家河数字博物馆,用互联网科技带你身临其境,穿越知青岁月。",
+              link: "https://baike.baidu.com/activity/liangjiahe",
+              imgUrl: get_path()+"/img/icon.jpg"
+          };
+
+	    
+
+
+
+
+        function weixin_callback(data) {
+		    wx.config({
+		        appId: data.appId,
+		        timestamp: data.timestamp,
+		        nonceStr: data.nonceStr,
+		        signature: data.signature,
+		        jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone']
+		    });
+		    wx.ready(function() {
+		      wx.onMenuShareAppMessage(shareData);
+	          wx.onMenuShareTimeline(shareDataTl);
+	          wx.onMenuShareQQ(shareData);
+	          wx.onMenuShareWeibo(shareData);
+	          wx.onMenuShareQZone(shareData);
+		    });
+		}
+	
+
+	
+
+//点赞
+		
+	    var doapi = function(data,api){
+	        data.authkey = '1d96cb6c6977c801723bc2703703d18c';
+	        //console.log(data);
+	        var res = null;
+	        $.ajax({
+	            url:"http://api.360shijue.com/baike/index.php/api/"+api,
+	            data:data,
+	            async:false,
+	            type:"POST",
+	            dataType:"json",
+	            success:function(res){
+	            	res = res;
+	            	if(api == like){
+	            		
+	            	}else if(api == unlike){
+	            		
+	            	}else{
+	            		if(res.liked == 0){
+	            			krpano.call("unlike");
+	            		}else if(res.liked == 1){
+	            			krpano.call("like");
+	            		}
+
+	            	}
+
+	                console.log(res);
+	            },
+	            error:function(res){
+	                res = res;
+	                console.log(res);
+	            }
+	        });
+	        return res;
+	    }
+
+
+
+	    function like(){
+	    	var data = {};
+		    data.u_id = AMOUNT.num;
+
+		    doapi(data,'like');
+		    initlike();
+	    }
+
+	    function unlike(){
+	    	var data = {};
+		    data.u_id = AMOUNT.num;
+		    doapi(data,'unlike');
+		    initlike();
+	    }
+
+	    function initlike(){
+	    	var data = {};
+		    data.u_id = AMOUNT.num;
+	    	doapi(data,'getlikestatus');
+	    	
+
+	    }
+	    function initnum(){
+	    	krpano.set("layer[zhannum].html",AMOUNT.like);
+	    	krpano.set("layer[zhanleft].html",AMOUNT.num);
+	    	initlike();
+	    }
+	    
+
+	    function rqstunm(url){
+	    	$.ajax({
+	            url:url,
+	            
+	            async:false,
+	            type:"POST",
+	            dataType:"json",
+	            success:function(res){
+	            	console.log(res);
+	            },
+	            error:function(res){
+	               console.log(res);
+	            }
+	        });
+	    }
+
+	    
+	    function krqstunm(id){
+	    	if(id == 1 ){
+	    		rqstunm("https://baike.baidu.com/activity/liangjiahe/trace?callback=tracezh&type=zh");
+	    	}else{
+	    		rqstunm("https://baike.baidu.com/activity/liangjiahe/trace?callback=traceen&type=en");
+	    	}
+
+	    }
+
+	    function asign(){
+	    	var data = {};
+
+		    doapi(data,'asign');
+	    }
+
+	    function bsign(){
+	    	var data = {};
+
+		    doapi(data,'bsign');
+	    }
+
+	   
+

+ 678 - 0
code/thumbs.xml

@@ -0,0 +1,678 @@
+<!-- skin events -->
+<krpano>
+	
+	<skin_settings 
+	               thumbs="true"
+	               thumbs_width="280" thumbs_height="220" thumbs_padding="25" thumbs_crop="0|0|670|482"
+	               mthumbs_width="300" mthumbs_height="200" mthumbs_padding="0" mthumbs_crop="0|0|670|482"
+	               thumbs_opened="false"
+	               thumbs_text="true"
+	               thumbs_dragging="true"
+	               thumbs_onhoverscrolling="false"
+	               thumbs_scrollbuttons="false"
+	               thumbs_scrollindicator="false"
+	               thumbs_loop="false"
+	              
+	               deeplinking="false"
+	               loadscene_blend="BLEND(1)"
+	               loadscene_blend_prev="BLEND(1)"
+	               loadscene_blend_next="BLEND(1)"
+	               
+	               design_thumbborder_bgborder="4 0xaf8c48 1.0"
+	               design_thumbborder_padding="2"
+	               design_thumbborder_bgroundedge="5"
+	               design_text_css="color:#FFFFFF; font-family:Arial; font-weight:bold;"
+				   thumbscc="null"
+				   thumbscount="0"
+	               />
+
+
+
+
+		<layer name="skin_scroll_container" type="container" keep="true" align.normal="center" align.mobile="right"  zorder="100"
+			width.normal="80%" width.mobile="300" height.normal="240" height.mobile="100%" x="0" y="0" bgroundedge="0" bgcolor="#000" maskchildren="true" >
+
+			<!-- <layer name="skin_thumbs_scrollleft"  style="skin_glow" url="https://bigscene.4dage.com/panorama/img/ui/left.jpg"  align="left"   x="0" y="0" height="100%" width="prop" zorder="2" alpha="1.0" ondown="asyncloop(pressed, layer[skin_thumbs].scrollby(+2,0));" visible="true" />
+			<layer name="skin_thumbs_scrollright" style="skin_glow" url="https://bigscene.4dage.com/panorama/img/ui/right.jpg"  align="right"  x="0" y="0" height="100%" width="prop" zorder="2" alpha="1.0" ondown="asyncloop(pressed, layer[skin_thumbs].scrollby(-2,0));" visible="true" /> -->
+			<layer name="skin_thumbs_container" type="container" align="center" width="100%" height="100%" visible="true">
+				<layer name="skin_thumbs" state="opened" url.flash="%SWFPATH%/plugins/scrollarea.swf" url.html5="%SWFPATH%/plugins/scrollarea.js" direction.normal="h" direction.mobile="v" align.normal="center" align.mobile="top" 
+				width.normal="500" width.mobile="90%" height.normal="90%" height.mobile="600" zorder="1" onloaded="skin_updatescroll();" onscroll="skin_updatethumbscroll();" />
+			</layer>
+		</layer>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	<events name="skin_events" keep="true"
+	        onxmlcomplete="set(events[skin_events].onxmlcomplete,null); skin_startup();"
+	        onnewpano="skin_showloading(true);  skin_deeplinking_update_url();activatespot();skin_startup();"
+	        onremovepano="skin_showloading(true);"
+	        onloadcomplete="skin_showloading(false);"
+	        onidle="skin_deeplinking_update_url();"
+	        
+	        
+	        onkeydown="skin_keydown_event();"
+	        onmousedown="skin_showthumbs(false);"
+	        />
+
+
+	<style name="thumbborder_style" keep="true" type="container" zorder="5" width.normal="calc:skin_settings.thumbs_width" height.normal="calc:skin_settings.thumbs_height" width.mobile="calc:skin_settings.mthumbs_width" height.mobile="calc:skin_settings.mthumbs_height"
+		visible="true" enabled="false" align="lefttop" bgborder="0"  bgcolor.normal="0x0e89fc" bgcolor.mobile="0x211d1a" bgalpha="1"/>
+	
+	<style name="skin_thumbtext_style" url="https://bigscene.4dage.com/panorama/plugins/textfield.swf" align="bottom" width="100%" autoheight="true" y="0" enabled="false" background="true" bgalp="0.8" backgroundcolor="0x000" border="false" css="calc:skin_settings.design_text_css + ' text-align:center; font-size:14px;'" textshadow="get:skin_settings.design_text_shadow" />
+
+
+	<!-- skin actions -->
+	
+	<action name="skin_startup">
+		
+		set(ggid,get(scene[get(xml.scene)].gid));
+		if(ggid == skin_settings.thumbscc,
+			skin_update_scene_infos();
+			skin_updatescroll();
+		,
+			clearthumbs();
+			
+		);
+		
+	</action>
+
+	<action name="groupthumbs">
+		
+		for(set(i,0), i LT scene.count, inc(i),
+			
+			if(scene[get(i)].gid == ggid
+			,	
+
+				if(groupscenes,
+					set(groupscenes[get(groupscenes.count)].value,get(scene[get(i)].name));
+				,
+					set(groupscenes[0].value,get(scene[get(i)].name));
+				);
+				
+				set(skin_settings.thumbscc,get(ggid));
+			);
+		);
+		if(groupscenes,
+					set(groupscenes[get(groupscenes.count)].value,scene_01);
+					set(groupscenes[get(groupscenes.count)].value,scene_02);
+					set(groupscenes[get(groupscenes.count)].value,scene_03);
+					set(groupscenes[get(groupscenes.count)].value,scene_04);
+					set(groupscenes[get(groupscenes.count)].value,scene_05);
+					set(groupscenes[get(groupscenes.count)].value,scene_06);
+			);
+		
+		skin_addthumbs();
+	</action>
+
+	
+
+	<action name="clearthumbs">
+	
+		if(groupscenes,
+			for(set(i,0), i LT groupscenes.count, ,
+				
+				groupscenes.removearrayitem(get(i));
+				
+				
+
+			);
+
+			for(set(r,0), r LT layer.count, inc(r),
+				if(layer[get(r)].parent == skin_thumbs,
+					
+					removelayer(get(layer[get(r)].name), true);
+					sub(r,2);
+				);
+			);
+		);
+
+		addlayer(skin_thumbborder);
+		layer[skin_thumbborder].loadstyle(thumbborder_style);	
+		
+		groupthumbs2();
+		
+			
+		
+	</action>
+	<action name="groupthumbs2">
+		
+		for(set(i,0), i LT scene.count - 4, inc(i),
+			subtxt(newscenename,get(scene[get(i)].name),6,5);
+			if(newscenename == skin_settings.thumbscc,
+				
+			,
+				
+				
+				if(groupscenes,
+					set(namecf,false);
+					for(set(j,0), j LT groupscenes.count, inc(j),
+						subtxt(newscenenamen,get(groupscenes[get(j)].value),6,5);
+						
+						if(newscenenamen == newscenename ,
+							set(namecf,true);
+						);	
+					);
+					if(namecf == false,
+						set(groupscenes[get(groupscenes.count)].value,get(scene[get(i)].name));
+					);
+					
+				,
+					set(groupscenes[0].value,get(scene[get(i)].name));
+				);
+				
+				set(skin_settings.thumbscc,get(newscenename));
+			);
+		);
+		
+		skin_addthumbs
+	</action>
+
+
+		<action name="skin_addthumbs">
+		
+			if(device.mobile
+			,mskin_addthumbs();
+			,
+				copy(thumbwidth, skin_settings.thumbs_width);
+				copy(thumbheight, skin_settings.thumbs_height);
+				copy(thumbpadding, skin_settings.thumbs_padding);
+				copy(thumbcrop, skin_settings.thumbs_crop);
+
+				add(thumbxoffset, thumbwidth, thumbpadding);
+				mul(thumbxcenter, thumbxoffset, 0.5);
+				mul(thumbbarwidth, thumbxoffset, groupscenes.count);
+				add(thumbbarwidth, thumbpadding);
+				add(thumbbarheight, thumbpadding, thumbheight);
+				add(thumbbarheight, thumbpadding);
+
+				if(skin_settings.thumbs_scrollindicator,
+					copy(layer[skin_thumbs_scrollindicator].y, thumbbarheight);
+					add(thumbbarheight, layer[skin_thumbs_scrollindicator].height);
+				);
+
+				copy(layer[skin_thumbs].height, thumbbarheight);
+				copy(layer[skin_thumbs].width, thumbbarwidth);
+
+				mul(halfheight, thumbbarheight, 0.5);
+				
+				
+
+				for(set(i,0), i LT groupscenes.count, inc(i),
+
+
+						
+					
+						txtadd(thumbname,'skin_thumb_',get(i));
+					
+						addlayer(get(thumbname));
+						if(isen,
+							txtadd(layer[get(thumbname)].url, https://bigscene.4dage.com/panorama/img/ethumbs/,get(scene[get(groupscenes[get(i)].value)].name),.png);
+							,
+							txtadd(layer[get(thumbname)].url, https://bigscene.4dage.com/panorama/img/thumbs/,get(scene[get(groupscenes[get(i)].value)].name),.png);
+						);
+						set(layer[get(thumbname)].keep, true);
+						set(layer[get(thumbname)].parent, 'skin_thumbs');
+						set(layer[get(thumbname)].align, lefttop);
+						copy(layer[get(thumbname)].crop, thumbcrop);
+						copy(layer[get(thumbname)].width, thumbwidth);
+						copy(layer[get(thumbname)].height, thumbheight);
+						set(layer[get(thumbname)].zorder, 10);
+
+						mul(thumbx,i, thumbxoffset);
+						add(thumbx, thumbpadding);
+						copy(layer[get(thumbname)].x, thumbx);
+						copy(layer[get(thumbname)].y, thumbpadding);
+						add(scene[get(i)].thumbx, thumbx, thumbxcenter);
+						copy(scene[get(i)].thumby, thumbpadding);
+						set(layer[get(thumbname)].linkedscene, get(groupscenes[get(i)].value) );
+						set(layer[get(thumbname)].onclick, txtadd(layer[skin_thumbborder].parent, get(name),bg);  skin_showthumbs(false);  loadscene(get(linkedscene),null, get(skin_settings.loadscene_flags),get(skin_settings.loadscene_blend));skin_update_scene_infos(); ); 
+						if(skin_settings.tooltips_thumbs,
+							set(layer[get(thumbname)].tooltip, get(scene[get(groupscenes[get(i)].value)].title) );
+							layer[get(thumbname)].loadstyle(skin_tooltips);
+						  );
+						if(skin_settings.thumbs_text,
+							txtadd(thumbtext, 'skin_thumbtext_', get(i));
+							addlayer(get(thumbtext));
+							layer[get(thumbtext)].loadstyle(skin_thumbtext_style);
+							set(layer[get(thumbtext)].keep, true);
+							set(layer[get(thumbtext)].parent, get(thumbname));
+							set(layer[get(thumbtext)].html, get(scene[get(groupscenes[get(i)].value)].grouptitle));
+						  );
+
+
+						txtadd(thumbnamebg,'skin_thumb_',get(i),bg);
+						addlayer(get(thumbnamebg));
+						set(layer[get(thumbnamebg)].type, container);
+						set(layer[get(thumbnamebg)].bgcolor, 0x000000);
+						set(layer[get(thumbnamebg)].bgalpha, 0.3);
+						set(layer[get(thumbnamebg)].zorder, 1);
+						set(layer[get(thumbnamebg)].keep, true);
+						set(layer[get(thumbnamebg)].parent, 'skin_thumbs');
+						set(layer[get(thumbnamebg)].align, lefttop);
+						copy(layer[get(thumbnamebg)].crop, thumbcrop);
+						copy(layer[get(thumbnamebg)].width, thumbwidth);
+						copy(layer[get(thumbnamebg)].height, thumbheight);
+						mul(thumbx,i, thumbxoffset);
+						add(thumbx, thumbpadding);
+						copy(layer[get(thumbnamebg)].x, thumbx);
+						copy(layer[get(thumbnamebg)].y, thumbpadding);
+						
+						
+				);
+			);	
+		  skin_update_scene_infos();
+		  skin_updatescroll();
+	</action>
+
+	<action name="mskin_addthumbs">
+			
+		
+			copy(thumbwidth, skin_settings.mthumbs_width);
+			copy(thumbheight, skin_settings.mthumbs_height);
+			copy(thumbpadding, skin_settings.mthumbs_padding);
+			copy(thumbcrop, skin_settings.mthumbs_crop);
+			
+
+			add(thumbyoffset, thumbheight, thumbpadding);
+			mul(thumbycenter, thumbyoffset, 0.5);
+			mul(thumbbarheight, thumbyoffset, groupscenes.count);
+			add(thumbbarheight, thumbpadding);
+			add(thumbbarwidth, thumbpadding, thumbwidth);
+			add(thumbbarwidth, thumbpadding);
+
+			if(skin_settings.thumbs_scrollindicator,
+				copy(layer[skin_thumbs_scrollindicator].y, thumbbarheight);
+				add(thumbbarheight, layer[skin_thumbs_scrollindicator].height);
+			);
+
+			copy(layer[skin_thumbs].height, thumbbarheight);
+			copy(layer[skin_thumbs].width, thumbbarwidth);
+
+			mul(halfheight, thumbbarheight, 0.5);
+			
+			
+
+			for(set(i,0), i LT groupscenes.count, inc(i),
+
+
+					
+				
+					txtadd(thumbname,'skin_thumb_',get(i));
+				
+					addlayer(get(thumbname));
+					
+					if(isen,
+							txtadd(layer[get(thumbname)].url, https://bigscene.4dage.com/panorama/img/ethumbs/,get(scene[get(groupscenes[get(i)].value)].name),.png);
+							,
+							txtadd(layer[get(thumbname)].url, https://bigscene.4dage.com/panorama/img/thumbs/,get(scene[get(groupscenes[get(i)].value)].name),.png);
+						);
+					set(layer[get(thumbname)].keep, true);
+					set(layer[get(thumbname)].parent, 'skin_thumbs');
+					set(layer[get(thumbname)].align, top);
+					copy(layer[get(thumbname)].crop, thumbcrop);
+					copy(layer[get(thumbname)].width, thumbwidth);
+					copy(layer[get(thumbname)].height, thumbheight);
+					set(layer[get(thumbname)].zorder, 10);
+
+					mul(thumby,i, thumbyoffset);
+					add(thumby, thumbpadding);
+					copy(layer[get(thumbname)].x, thumbpadding);
+					copy(layer[get(thumbname)].y, thumby);
+					
+					add(scene[get(i)].thumby, thumby, thumbycenter);
+					copy(scene[get(i)].thumbx, thumbpadding);
+					set(layer[get(thumbname)].linkedscene, get(groupscenes[get(i)].value) );
+					set(layer[get(thumbname)].onclick, txtadd(layer[skin_thumbborder].parent, get(name),bg); skin_showthumbs(false); loadscene(get(linkedscene),null,get(skin_settings.loadscene_flags),get(skin_settings.loadscene_blend));skin_update_scene_infos(); );
+					if(skin_settings.tooltips_thumbs,
+						set(layer[get(thumbname)].tooltip, get(scene[get(groupscenes[get(i)].value)].title) );
+						layer[get(thumbname)].loadstyle(skin_tooltips);
+					  );
+					if(skin_settings.thumbs_text,
+						txtadd(thumbtext, 'skin_thumbtext_', get(i));
+						addlayer(get(thumbtext));
+						layer[get(thumbtext)].loadstyle(skin_thumbtext_style);
+						set(layer[get(thumbtext)].keep, true);
+						set(layer[get(thumbtext)].parent, get(thumbname));
+						set(layer[get(thumbtext)].html, get(scene[get(groupscenes[get(i)].value)].grouptitle));
+					  );
+
+					txtadd(thumbnamebg,'skin_thumb_',get(i),bg);
+						addlayer(get(thumbnamebg));
+						set(layer[get(thumbnamebg)].type, container);
+						set(layer[get(thumbnamebg)].bgcolor, 0x443a33);
+						set(layer[get(thumbnamebg)].bgalpha, 1);
+						set(layer[get(thumbnamebg)].zorder, 1);
+						set(layer[get(thumbnamebg)].keep, true);
+						set(layer[get(thumbnamebg)].parent, 'skin_thumbs');
+						set(layer[get(thumbnamebg)].align, lefttop);
+						copy(layer[get(thumbnamebg)].crop, thumbcrop);
+						copy(layer[get(thumbnamebg)].width, thumbwidth);
+						copy(layer[get(thumbnamebg)].height, thumbheight);
+						mul(thumby,i, thumbyoffset);
+						add(thumby, thumbpadding);
+						copy(layer[get(thumbnamebg)].x, thumbpadding);
+						copy(layer[get(thumbnamebg)].y, thumby);
+					
+					
+					
+			);
+				
+		  
+	</action>
+
+
+	
+
+
+
+	<action name="skin_updatescroll">
+		if(layer[skin_thumbs].loaded,
+
+			
+				set(cursceneindex, 0);
+				if(xml.scene, copy(cursceneindex, scene[get(xml.scene)].index));
+				layer[skin_thumbs].setcenter(get(scene[get(cursceneindex)].thumbx), get(scene[get(cursceneindex)].thumby));
+			
+		  );
+	</action>
+
+
+	<action name="skin_updatethumbscroll">
+		copy(padding,skin_settings.thumbs_padding);
+
+		if(skin_settings.thumbs_scrollbuttons,
+			if(loverflow GT 0, set(layer[skin_thumbs_scrollleft].visible,true),  set(layer[skin_thumbs_scrollleft].visible,false) );
+			if(roverflow GT 0, set(layer[skin_thumbs_scrollright].visible,true), set(layer[skin_thumbs_scrollright].visible,false) );
+		  );
+
+		if(skin_settings.thumbs_scrollindicator,
+			if(woverflow GT 0,
+				set(layer[skin_thumbs_scrollindicator].visible,true);
+				sub(iw,pixelwidth,woverflow);
+				div(pw,iw,pixelwidth);
+				div(px,loverflow,woverflow);
+				mul(pw,iw);
+				copy(layer[skin_thumbs_scrollindicator].width,pw);
+				sub(iw,pw);
+				sub(iw,padding);
+				sub(iw,padding);
+				mul(px,iw);
+				add(px,padding);
+				copy(layer[skin_thumbs_scrollindicator].x,px);
+			  ,
+				set(layer[skin_thumbs_scrollindicator].visible,false);
+			  );
+		  );
+	</action>
+
+
+	<action name="skin_update_scene_infos">
+		if(xml.scene !== null AND scene[get(xml.scene)].index GE 0,
+
+			
+
+			if(skin_settings.thumbs_loop == false,
+				if(scene[get(xml.scene)].index GT 0,
+					set(layer[skin_btn_prev].enabled, true);
+					set(layer[skin_btn_prev].alpha, 1.0);
+				  ,
+					set(layer[skin_btn_prev].enabled, false);
+					set(layer[skin_btn_prev].alpha, 0.3);
+				  );
+
+				sub(lastsceneindex, scene.count, 1);
+				if(scene[get(xml.scene)].index LT lastsceneindex,
+					set(layer[skin_btn_next].enabled, true);
+					set(layer[skin_btn_next].alpha, 1.0);
+				  ,
+					set(layer[skin_btn_next].enabled, false);
+					set(layer[skin_btn_next].alpha, 0.3);
+				  );
+			  ,
+				if(scene.count GT 1,
+					set(layer[skin_btn_prev].enabled, true);
+					set(layer[skin_btn_prev].alpha, 1.0);
+					set(layer[skin_btn_next].enabled, true);
+					set(layer[skin_btn_next].alpha, 1.0);
+				  ,
+					set(layer[skin_btn_prev].enabled, false);
+					set(layer[skin_btn_prev].alpha, 0.3);
+					set(layer[skin_btn_next].enabled, false);
+					set(layer[skin_btn_next].alpha, 0.3);
+				  );
+			  );
+
+			if(scene.count GT 1,
+				set(layer[skin_btn_prev_fs].visible, true);
+				set(layer[skin_btn_next_fs].visible, true);
+			  ,
+				set(layer[skin_btn_prev_fs].visible, false);
+				set(layer[skin_btn_next_fs].visible, false);
+			  );
+
+			subtxt(newscenenamep,get(scene[get(xml.scene)].name),6,5);
+			initmap(get(newscenenamep));
+			set(tumindex,0);
+			for(set(i,0), i LT groupscenes.count, inc(i),
+				subtxt(newscenenamep2,get(groupscenes[get(i)].value),6,5);
+				if(newscenenamep == newscenenamep2, 
+					set(tumindex,get(groupscenes[get(i)].index));
+				);
+			);
+			
+			txtadd(parentname, 'skin_thumb_', get(tumindex));
+			if(layer[get(parentname)],
+				txtadd(parentbg,get(parentname),bg);
+				if(layer[skin_thumbborder].parent == get(parentbg),,
+					
+					set(layer[skin_thumbborder].parent, get(parentbg));
+					set(layer[skin_thumbborder].visible, true);
+					mini_startup();
+					nexttick(mini_update_scene_infos);
+				);
+			  ,
+				set(layer[skin_thumbborder].visible, false);
+			  );
+
+			
+
+			
+		  );
+			
+
+		  
+	</action>
+
+
+	<action name="skin_gotoscene">
+		if(scene[%1],
+			copy(cursceneindex, scene[get(xml.scene)].index);
+			copy(newsceneindex, scene[%1].index);
+			txtadd(layer[skin_thumbborder].parent, 'skin_thumb_', get(newsceneindex),bg);
+			layer[skin_thumbs].scrolltocenter(get(scene[get(newsceneindex)].thumbx), get(scene[get(newsceneindex)].thumby));
+			loadscene(get(scene[get(newsceneindex)].name),null,get(skin_settings.loadscene_flags),calc(newsceneindex LT cursceneindex ? skin_settings.loadscene_blend_prev : (newsceneindex GT cursceneindex ? skin_settings.loadscene_blend_next : skin_settings.loadscene_blend)));
+		  );
+	</action>
+	
+
+	<action name="skin_nextscene">
+		add(newsceneindex, scene[get(xml.scene)].index, %1);
+		if(newsceneindex GE 0 AND newsceneindex LT scene.count,
+			txtadd(layer[skin_thumbborder].parent, 'skin_thumb_', get(newsceneindex),bg);
+			layer[skin_thumbs].scrolltocenter(get(scene[get(newsceneindex)].thumbx), get(scene[get(newsceneindex)].thumby));
+			loadscene(get(scene[get(newsceneindex)].name),null,get(skin_settings.loadscene_flags),calc(%1 LT 0 ? skin_settings.loadscene_blend_prev : skin_settings.loadscene_blend_next));
+			);
+	</action>
+
+	<action name="nav_control">
+		if(xml.scene == scene_01,set(layer[btn7].crop,136|20|96|96); set(layer[mbtn7].crop,136|20|96|96);,set(layer[btn7].crop,20|20|96|96);set(layer[mbtn7].crop,20|20|96|96);)
+	</action>
+
+
+	<action name="skin_nextscene_loop">
+		add(newsceneindex, scene[get(xml.scene)].index, %1);
+		sub(lastsceneindex, scene.count, 1);
+		if(newsceneindex LT 0, copy(newsceneindex,lastsceneindex));
+		if(newsceneindex GT lastsceneindex, set(newsceneindex,0));
+		layer[skin_thumbs].scrolltocenter(get(scene[get(newsceneindex)].thumbx), get(scene[get(newsceneindex)].thumby));
+		loadscene(get(scene[get(newsceneindex)].name),null,get(skin_settings.loadscene_flags),calc(%1 LT 0 ? skin_settings.loadscene_blend_prev : skin_settings.loadscene_blend_next));
+	</action>
+
+
+	<action name="skin_showloading">
+		if(display.stereo == true,
+			set(layer[skin_loadingtext].visible, false);
+		  ,
+			set(layer[skin_loadingtext].visible, %1);
+		  );
+	</action>
+
+
+	<action name="skin_hidetooltips">
+		set(layer[skin_tooltip].alpha,0.0);
+		set(layer[skin_tooltip].visible,false);
+	</action>
+
+
+	<action name="skin_buttonglow">
+		if('%1' !== 'null',
+			set(strength,0.7);
+			if(%2 != null, set(strength,%2));
+			set(layer[skin_buttonglow].parent, %1);
+			set(layer[skin_buttonglow].visible, true);
+			tween(layer[skin_buttonglow].alpha, get(strength), 0.07);
+		  ,
+			tween(layer[skin_buttonglow].alpha, 0.0, 0.1, default,
+				set(layer[skin_buttonglow].parent, null);
+				set(layer[skin_buttonglow].visible, false);
+			  );
+		  );
+	</action>
+
+
+	<action name="skin_calc_opened_closed">
+		set(layer[get(name)].y_opened, get(layer[get(name)].y));
+		set(layer[get(name)].y_closed, calc(layer[get(name)].y - skin_settings.controlbar_offset - skin_settings.controlbar_height + skin_settings.controlbar_offset_closed));
+	</action>
+
+
+	<action name="skin_hideskin">
+		if(layer[skin_map].state    != 'closed', skin_showmap(false);    wait(0.40); );
+		if(layer[skin_thumbs].state != 'closed', skin_showthumbs(false); wait(0.25); );
+
+		set(hidetime, calc('%1' == 'instant' ? 0.0 : 0.5));
+		tween(layer[skin_scroll_window].y,   get(layer[skin_scroll_window  ].y_closed), get(hidetime));
+		tween(layer[skin_splitter_bottom].y, get(layer[skin_splitter_bottom].y_closed), get(hidetime));
+		tween(layer[skin_control_bar].y,     get(layer[skin_control_bar    ].y_closed), get(hidetime));
+
+		tween(layer[skin_btn_prev_fs].x, 0, get(hidetime));
+		tween(layer[skin_btn_next_fs].x, 0, get(hidetime));
+
+		if(layer[skin_logo], tween(layer[skin_logo].alpha, 0.0, 0.5, default, set(layer[skin_logo].visible,false)); );
+
+		stopdelayedcall(skin_btn_show_alpha);
+		set(layer[skin_btn_show].visible, true);
+		delayedcall(skin_btn_show_alpha, get(hidetime), tween(layer[skin_btn_show].alpha, 0.25, 0.25); );
+	</action>
+
+
+	
+
+
+	<action name="skin_showthumbs">
+		if(%1 == null, if(layer[skin_thumbs].state == 'closed', set(show,true), set(show,false)); , set(show,%1); );
+		mul(mh, layer[skin_scroll_layer].pixelheight, -1);
+		if(show,
+			set(layer[btn1].crop,136|252|96|96);set(layer[mbtn1].crop,136|252|96|96);
+			set(layer[skin_thumbs].state, 'opened');
+			tween(layer[skin_thumbs].alpha, 1.0, 0.25);
+			add(mh, layer[skin_thumbs].height);
+			add(mh, layer[skin_scroll_layer].y_offset);
+			tween(layer[skin_scroll_layer].y, get(mh), 0.5, easeOutQuint);
+			set(layer[skin_thumbs_container].visible, true);
+			tween(layer[skin_thumbs_container].alpha, 1.0, 0.25);
+			tween(layer[skin_map].alpha, 0.0, 0.25, default, set(layer[skin_map].visible,false));
+		  ,
+		  	set(layer[btn1].crop,20|252|96|96);set(layer[mbtn1].crop,20|252|96|96);
+			set(layer[skin_thumbs].state, 'closed');
+			tween(layer[skin_thumbs].alpha, 0.0, 0.25, easeOutQuint);
+			add(mh, layer[skin_scroll_layer].y_offset);
+			tween(layer[skin_scroll_layer].y, get(mh), 0.5, easeOutQuint, set(layer[skin_thumbs_container].visible, false););
+		  );
+	</action>
+
+
+	<action name="skin_showmap">
+		if(%1 == null, if(layer[skin_map].state == 'closed', set(show,true), set(show,false)); , set(show,%1); );
+		mul(mh, layer[skin_scroll_layer].pixelheight, -1);
+		if(show,
+			tween(layer[skin_thumbs_container].alpha, 0.0, 0.25, default, set(layer[skin_thumbs_container].visible,false));
+			set(layer[skin_map].visible, true);
+			tween(layer[skin_map].alpha, 1.0, 0.25);
+			set(layer[skin_map].state, 'opened');
+			sub(hh,area.pixelheight,skin_settings.controlbar_offset);
+			sub(hh,layer[skin_control_bar].height);
+			sub(hh,32);
+			add(mh,hh);
+			sub(hh,skin_settings.controlbar_overlap);
+			copy(layer[skin_map].height, hh);
+			tween(layer[skin_scroll_layer].y, get(mh), 0.5, easeOutQuint);
+		  ,
+		  	if(layer[skin_map].state != 'closed',
+				set(layer[skin_map].state, 'closed');
+				add(mh, layer[skin_scroll_layer].y_offset);
+				tween(layer[skin_map].alpha, 0.0, 0.5, easeOutQuint);
+				tween(layer[skin_scroll_layer].y, get(mh), 0.5, easeOutQuint, set(layer[skin_map].visible,false) );
+			  );
+		  );
+	</action>
+
+
+	<action name="skin_keydown_event">
+		if(keycode == 33, skin_nextscene_loop(-1) );               <!-- Page Up   - previous scene -->
+		if(keycode == 34, skin_nextscene_loop(+1) );               <!-- Page Dowm - next scene -->
+		if(keycode == 35, skin_gotoscene(calc(scene.count-1)) );   <!-- End       - last scene -->
+		if(keycode == 36, skin_gotoscene(0) );                     <!-- Home/Pos1 - first scene -->
+		nav_control();
+	</action>
+	
+
+	<action name="skin_deeplinking_update_url">
+		if(skin_settings.deeplinking AND (!webvr OR webvr.isenabled === false),
+			copy(adr, browser.location);
+			indexoftxt(qi, get(adr), '?');
+			if(qi GT 0, subtxt(adr, adr, 0, get(qi)));
+			copy(si, scene[get(xml.scene)].index);
+			copy(h, view.hlookat);
+			copy(v, view.vlookat);
+			copy(f, view.fov);
+			copy(d, view.distortion);
+			copy(a, view.architectural);
+			clamp(d, 0.0, 1.0);
+			clamp(a, 0.0, 1.0);
+			set(pp, calc(f LT 10 ? 6 : 2));
+			roundval(h, get(pp));
+			roundval(v, get(pp));
+			roundval(f, get(pp));
+			roundval(d, 2);
+			roundval(a, 1);
+			set(adr, calc(adr + '?startscene=' + si + '&amp;startactions=lookat('+h+','+v+','+f+','+d+','+a+');'));
+			js( history.replaceState(null, document.title, get(adr)); );
+		  );
+	</action>
+
+
+
+
+</krpano>

+ 666 - 0
code/thumbs.xml.bak

@@ -0,0 +1,666 @@
+<!-- skin events -->
+<krpano>
+	
+	<skin_settings 
+	               thumbs="true"
+	               thumbs_width="280" thumbs_height="220" thumbs_padding="25" thumbs_crop="0|0|670|482"
+	               mthumbs_width="300" mthumbs_height="200" mthumbs_padding="0" mthumbs_crop="0|0|670|482"
+	               thumbs_opened="false"
+	               thumbs_text="true"
+	               thumbs_dragging="true"
+	               thumbs_onhoverscrolling="false"
+	               thumbs_scrollbuttons="false"
+	               thumbs_scrollindicator="false"
+	               thumbs_loop="false"
+	              
+	               deeplinking="false"
+	               loadscene_blend="BLEND(1)"
+	               loadscene_blend_prev="BLEND(1)"
+	               loadscene_blend_next="BLEND(1)"
+	               
+	               design_thumbborder_bgborder="4 0xaf8c48 1.0"
+	               design_thumbborder_padding="2"
+	               design_thumbborder_bgroundedge="5"
+	               design_text_css="color:#FFFFFF; font-family:Arial; font-weight:bold;"
+				   thumbscc="null"
+				   thumbscount="0"
+	               />
+
+
+
+
+		<layer name="skin_scroll_container" type="container" keep="true" align.normal="center" align.mobile="right"  zorder="100"
+			width.normal="80%" width.mobile="300" height.normal="240" height.mobile="100%" x="0" y="0" bgroundedge="0" bgcolor="#000" maskchildren="true" >
+
+			<!-- <layer name="skin_thumbs_scrollleft"  style="skin_glow" url="%SWFPATH%/img/ui/left.jpg"  align="left"   x="0" y="0" height="100%" width="prop" zorder="2" alpha="1.0" ondown2="asyncloop(pressed, layer[skin_thumbs].scrollby(+2,0));" visible="true" />
+			<layer name="skin_thumbs_scrollright" style="skin_glow" url="%SWFPATH%/img/ui/right.jpg"  align="right"  x="0" y="0" height="100%" width="prop" zorder="2" alpha="1.0" ondown2="asyncloop(pressed, layer[skin_thumbs].scrollby(-2,0));" visible="true" /> -->
+			<layer name="skin_thumbs_container" type="container" align="center" width="100%" height="100%" visible="true">
+				<layer name="skin_thumbs" state="opened" url.flash="%SWFPATH%/plugins/scrollarea.swf" url.html5="%SWFPATH%/plugins/scrollarea.js" direction.normal="h" direction.mobile="v" align.normal="center" align.mobile="top" 
+				width.normal="500" width.mobile="90%" height.normal="90%" height.mobile="600" zorder="1" onloaded="skin_updatescroll();" onscroll="skin_updatethumbscroll();" />
+			</layer>
+		</layer>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+	<events name="skin_events" keep="true"
+	        onxmlcomplete="set(events[skin_events].onxmlcomplete,null); skin_startup();"
+	        onnewpano="skin_showloading(true);  skin_deeplinking_update_url();activatespot();skin_startup();"
+	        onremovepano="skin_showloading(true);"
+	        onloadcomplete="skin_showloading(false);"
+	        onidle="skin_deeplinking_update_url();"
+	        
+	        
+	        onkeydown="skin_keydown_event();"
+	        onmousedown="skin_showthumbs(false);"
+	        />
+
+
+	<style name="thumbborder_style" keep="true" type="container" zorder="5" width.normal="calc:skin_settings.thumbs_width" height.normal="calc:skin_settings.thumbs_height" width.mobile="calc:skin_settings.mthumbs_width" height.mobile="calc:skin_settings.mthumbs_height"
+		visible="true" enabled="false" align="lefttop" bgborder="0"  bgcolor.normal="0x0e89fc" bgcolor.mobile="0x211d1a" bgalpha="1"/>
+	
+	<style name="skin_thumbtext_style" url="%SWFPATH%/plugins/textfield.swf" align="bottom" width="100%" autoheight="true" y="0" enabled="false" background="true" bgalp="0.8" backgroundcolor="0x000" border="false" css="calc:skin_settings.design_text_css + ' text-align:center; font-size:14px;'" textshadow="get:skin_settings.design_text_shadow" />
+
+
+	<!-- skin actions -->
+	
+	<action name="skin_startup">
+		
+		set(ggid,get(scene[get(xml.scene)].gid));
+		if(ggid == skin_settings.thumbscc,
+			skin_update_scene_infos();
+			skin_updatescroll();
+		,
+			clearthumbs();
+			
+		);
+		
+	</action>
+	<!-- 添加导览 -->
+	<action name="groupthumbs">
+		
+		for(set(i,0), i LT scene.count, inc(i),
+			
+			if(scene[get(i)].gid == ggid
+			,	
+
+				if(groupscenes,
+					set(groupscenes[get(groupscenes.count)].value,get(scene[get(i)].name));
+				,
+					set(groupscenes[0].value,get(scene[get(i)].name));
+				);
+				
+				set(skin_settings.thumbscc,get(ggid));
+			);
+		);
+
+		
+		skin_addthumbs();
+	</action>
+
+	
+
+	<action name="clearthumbs">
+	
+		if(groupscenes,
+			for(set(i,0), i LT groupscenes.count, ,
+				
+				groupscenes.removearrayitem(get(i));
+				
+				
+
+			);
+
+			for(set(r,0), r LT layer.count, inc(r),
+				if(layer[get(r)].parent == skin_thumbs,
+					
+					removelayer(get(layer[get(r)].name), true);
+					sub(r,2);
+				);
+			);
+		);
+
+		addlayer(skin_thumbborder);
+		layer[skin_thumbborder].loadstyle(thumbborder_style);	
+		
+		groupthumbs();
+		
+			
+		
+	</action>
+	<action name="groupthumbs2">
+		
+		for(set(i,0), i LT scene.count, inc(i),
+			subtxt(newscenename,get(scene[get(i)].name),6,5);
+			if(newscenename == skin_settings.thumbscc,
+				
+			,
+				
+				
+				if(groupscenes,
+					set(namecf,false);
+					for(set(j,0), j LT groupscenes.count, inc(j),
+						subtxt(newscenenamen,get(groupscenes[get(j)].value),6,5);
+						
+						if(newscenenamen == newscenename ,
+							set(namecf,true);
+						);	
+					);
+					if(namecf == false,
+						set(groupscenes[get(groupscenes.count)].value,get(scene[get(i)].name));
+					);
+					
+				,
+					set(groupscenes[0].value,get(scene[get(i)].name));
+				);
+				
+				set(skin_settings.thumbscc,get(newscenename));
+			);
+		);
+		
+		skin_addthumbs
+	</action>
+
+
+		<action name="skin_addthumbs">
+		
+			if(device.mobile
+			,mskin_addthumbs();
+			,
+				copy(thumbwidth, skin_settings.thumbs_width);
+				copy(thumbheight, skin_settings.thumbs_height);
+				copy(thumbpadding, skin_settings.thumbs_padding);
+				copy(thumbcrop, skin_settings.thumbs_crop);
+
+				add(thumbxoffset, thumbwidth, thumbpadding);
+				mul(thumbxcenter, thumbxoffset, 0.5);
+				mul(thumbbarwidth, thumbxoffset, groupscenes.count);
+				add(thumbbarwidth, thumbpadding);
+				add(thumbbarheight, thumbpadding, thumbheight);
+				add(thumbbarheight, thumbpadding);
+
+				if(skin_settings.thumbs_scrollindicator,
+					copy(layer[skin_thumbs_scrollindicator].y, thumbbarheight);
+					add(thumbbarheight, layer[skin_thumbs_scrollindicator].height);
+				);
+
+				copy(layer[skin_thumbs].height, thumbbarheight);
+				copy(layer[skin_thumbs].width, thumbbarwidth);
+
+				mul(halfheight, thumbbarheight, 0.5);
+				
+				
+
+				for(set(i,0), i LT groupscenes.count, inc(i),
+
+
+						
+					
+						txtadd(thumbname,'skin_thumb_',get(i));
+					
+						addlayer(get(thumbname));
+						if(isen,
+							txtadd(layer[get(thumbname)].url, %SWFPATH%/img/ethumbs/,get(scene[get(groupscenes[get(i)].value)].name),.png);
+							,
+							txtadd(layer[get(thumbname)].url, %SWFPATH%/img/thumbs/,get(scene[get(groupscenes[get(i)].value)].name),.png);
+						);
+						set(layer[get(thumbname)].keep, true);
+						set(layer[get(thumbname)].parent, 'skin_thumbs');
+						set(layer[get(thumbname)].align, lefttop);
+						copy(layer[get(thumbname)].crop, thumbcrop);
+						copy(layer[get(thumbname)].width, thumbwidth);
+						copy(layer[get(thumbname)].height, thumbheight);
+						set(layer[get(thumbname)].zorder, 10);
+
+						mul(thumbx,i, thumbxoffset);
+						add(thumbx, thumbpadding);
+						copy(layer[get(thumbname)].x, thumbx);
+						copy(layer[get(thumbname)].y, thumbpadding);
+						add(scene[get(i)].thumbx, thumbx, thumbxcenter);
+						copy(scene[get(i)].thumby, thumbpadding);
+						set(layer[get(thumbname)].linkedscene, get(groupscenes[get(i)].value) );
+						set(layer[get(thumbname)].onclick, txtadd(layer[skin_thumbborder].parent, get(name),bg);skin_showthumbs(false);  loadscene(get(linkedscene),null,get(skin_settings.loadscene_flags),get(skin_settings.loadscene_blend));skin_update_scene_infos(); );
+						if(skin_settings.tooltips_thumbs,
+							set(layer[get(thumbname)].tooltip, get(scene[get(groupscenes[get(i)].value)].title) );
+							layer[get(thumbname)].loadstyle(skin_tooltips);
+						  );
+						if(skin_settings.thumbs_text,
+							txtadd(thumbtext, 'skin_thumbtext_', get(i));
+							addlayer(get(thumbtext));
+							layer[get(thumbtext)].loadstyle(skin_thumbtext_style);
+							set(layer[get(thumbtext)].keep, true);
+							set(layer[get(thumbtext)].parent, get(thumbname));
+							set(layer[get(thumbtext)].html, get(scene[get(groupscenes[get(i)].value)].grouptitle));
+						  );
+
+
+						txtadd(thumbnamebg,'skin_thumb_',get(i),bg);
+						addlayer(get(thumbnamebg));
+						set(layer[get(thumbnamebg)].type, container);
+						set(layer[get(thumbnamebg)].bgcolor, 0x000000);
+						set(layer[get(thumbnamebg)].bgalpha, 0.3);
+						set(layer[get(thumbnamebg)].zorder, 1);
+						set(layer[get(thumbnamebg)].keep, true);
+						set(layer[get(thumbnamebg)].parent, 'skin_thumbs');
+						set(layer[get(thumbnamebg)].align, lefttop);
+						copy(layer[get(thumbnamebg)].crop, thumbcrop);
+						copy(layer[get(thumbnamebg)].width, thumbwidth);
+						copy(layer[get(thumbnamebg)].height, thumbheight);
+						mul(thumbx,i, thumbxoffset);
+						add(thumbx, thumbpadding);
+						copy(layer[get(thumbnamebg)].x, thumbx);
+						copy(layer[get(thumbnamebg)].y, thumbpadding);
+						
+						
+				);
+			);	
+		  skin_update_scene_infos();
+		  skin_updatescroll();
+	</action>
+
+	<action name="mskin_addthumbs">
+			
+		
+			copy(thumbwidth, skin_settings.mthumbs_width);
+			copy(thumbheight, skin_settings.mthumbs_height);
+			copy(thumbpadding, skin_settings.mthumbs_padding);
+			copy(thumbcrop, skin_settings.mthumbs_crop);
+			
+
+			add(thumbyoffset, thumbheight, thumbpadding);
+			mul(thumbycenter, thumbyoffset, 0.5);
+			mul(thumbbarheight, thumbyoffset, groupscenes.count);
+			add(thumbbarheight, thumbpadding);
+			add(thumbbarwidth, thumbpadding, thumbwidth);
+			add(thumbbarwidth, thumbpadding);
+
+			if(skin_settings.thumbs_scrollindicator,
+				copy(layer[skin_thumbs_scrollindicator].y, thumbbarheight);
+				add(thumbbarheight, layer[skin_thumbs_scrollindicator].height);
+			);
+
+			copy(layer[skin_thumbs].height, thumbbarheight);
+			copy(layer[skin_thumbs].width, thumbbarwidth);
+
+			mul(halfheight, thumbbarheight, 0.5);
+			
+			
+
+			for(set(i,0), i LT groupscenes.count, inc(i),
+
+
+					
+				
+					txtadd(thumbname,'skin_thumb_',get(i));
+				
+					addlayer(get(thumbname));
+					
+					if(isen,
+							txtadd(layer[get(thumbname)].url, %SWFPATH%/img/ethumbs/,get(scene[get(groupscenes[get(i)].value)].name),.png);
+							,
+							txtadd(layer[get(thumbname)].url, %SWFPATH%/img/thumbs/,get(scene[get(groupscenes[get(i)].value)].name),.png);
+						);
+					set(layer[get(thumbname)].keep, true);
+					set(layer[get(thumbname)].parent, 'skin_thumbs');
+					set(layer[get(thumbname)].align, top);
+					copy(layer[get(thumbname)].crop, thumbcrop);
+					copy(layer[get(thumbname)].width, thumbwidth);
+					copy(layer[get(thumbname)].height, thumbheight);
+					set(layer[get(thumbname)].zorder, 10);
+
+					mul(thumby,i, thumbyoffset);
+					add(thumby, thumbpadding);
+					copy(layer[get(thumbname)].x, thumbpadding);
+					copy(layer[get(thumbname)].y, thumby);
+					
+					add(scene[get(i)].thumby, thumby, thumbycenter);
+					copy(scene[get(i)].thumbx, thumbpadding);
+					set(layer[get(thumbname)].linkedscene, get(groupscenes[get(i)].value) );
+					set(layer[get(thumbname)].onclick, txtadd(layer[skin_thumbborder].parent, get(name),bg); skin_showthumbs(false); loadscene(get(linkedscene),null,get(skin_settings.loadscene_flags),get(skin_settings.loadscene_blend));skin_update_scene_infos(); );
+					if(skin_settings.tooltips_thumbs,
+						set(layer[get(thumbname)].tooltip, get(scene[get(groupscenes[get(i)].value)].title) );
+						layer[get(thumbname)].loadstyle(skin_tooltips);
+					  );
+					if(skin_settings.thumbs_text,
+						txtadd(thumbtext, 'skin_thumbtext_', get(i));
+						addlayer(get(thumbtext));
+						layer[get(thumbtext)].loadstyle(skin_thumbtext_style);
+						set(layer[get(thumbtext)].keep, true);
+						set(layer[get(thumbtext)].parent, get(thumbname));
+						set(layer[get(thumbtext)].html, get(scene[get(groupscenes[get(i)].value)].grouptitle));
+					  );
+
+					txtadd(thumbnamebg,'skin_thumb_',get(i),bg);
+						addlayer(get(thumbnamebg));
+						set(layer[get(thumbnamebg)].type, container);
+						set(layer[get(thumbnamebg)].bgcolor, 0x443a33);
+						set(layer[get(thumbnamebg)].bgalpha, 1);
+						set(layer[get(thumbnamebg)].zorder, 1);
+						set(layer[get(thumbnamebg)].keep, true);
+						set(layer[get(thumbnamebg)].parent, 'skin_thumbs');
+						set(layer[get(thumbnamebg)].align, lefttop);
+						copy(layer[get(thumbnamebg)].crop, thumbcrop);
+						copy(layer[get(thumbnamebg)].width, thumbwidth);
+						copy(layer[get(thumbnamebg)].height, thumbheight);
+						mul(thumby,i, thumbyoffset);
+						add(thumby, thumbpadding);
+						copy(layer[get(thumbnamebg)].x, thumbpadding);
+						copy(layer[get(thumbnamebg)].y, thumby);
+					
+					
+					
+			);
+				
+		  
+	</action>
+
+
+	
+
+
+
+	<action name="skin_updatescroll">
+		if(layer[skin_thumbs].loaded,
+
+			
+				set(cursceneindex, 0);
+				if(xml.scene, copy(cursceneindex, scene[get(xml.scene)].index));
+				layer[skin_thumbs].setcenter(get(scene[get(cursceneindex)].thumbx), get(scene[get(cursceneindex)].thumby));
+			
+		  );
+	</action>
+
+
+	<action name="skin_updatethumbscroll">
+		copy(padding,skin_settings.thumbs_padding);
+
+		if(skin_settings.thumbs_scrollbuttons,
+			if(loverflow GT 0, set(layer[skin_thumbs_scrollleft].visible,true),  set(layer[skin_thumbs_scrollleft].visible,false) );
+			if(roverflow GT 0, set(layer[skin_thumbs_scrollright].visible,true), set(layer[skin_thumbs_scrollright].visible,false) );
+		  );
+
+		if(skin_settings.thumbs_scrollindicator,
+			if(woverflow GT 0,
+				set(layer[skin_thumbs_scrollindicator].visible,true);
+				sub(iw,pixelwidth,woverflow);
+				div(pw,iw,pixelwidth);
+				div(px,loverflow,woverflow);
+				mul(pw,iw);
+				copy(layer[skin_thumbs_scrollindicator].width,pw);
+				sub(iw,pw);
+				sub(iw,padding);
+				sub(iw,padding);
+				mul(px,iw);
+				add(px,padding);
+				copy(layer[skin_thumbs_scrollindicator].x,px);
+			  ,
+				set(layer[skin_thumbs_scrollindicator].visible,false);
+			  );
+		  );
+	</action>
+
+
+	<action name="skin_update_scene_infos">
+		if(xml.scene !== null AND scene[get(xml.scene)].index GE 0,
+
+			
+
+			if(skin_settings.thumbs_loop == false,
+				if(scene[get(xml.scene)].index GT 0,
+					set(layer[skin_btn_prev].enabled, true);
+					set(layer[skin_btn_prev].alpha, 1.0);
+				  ,
+					set(layer[skin_btn_prev].enabled, false);
+					set(layer[skin_btn_prev].alpha, 0.3);
+				  );
+
+				sub(lastsceneindex, scene.count, 1);
+				if(scene[get(xml.scene)].index LT lastsceneindex,
+					set(layer[skin_btn_next].enabled, true);
+					set(layer[skin_btn_next].alpha, 1.0);
+				  ,
+					set(layer[skin_btn_next].enabled, false);
+					set(layer[skin_btn_next].alpha, 0.3);
+				  );
+			  ,
+				if(scene.count GT 1,
+					set(layer[skin_btn_prev].enabled, true);
+					set(layer[skin_btn_prev].alpha, 1.0);
+					set(layer[skin_btn_next].enabled, true);
+					set(layer[skin_btn_next].alpha, 1.0);
+				  ,
+					set(layer[skin_btn_prev].enabled, false);
+					set(layer[skin_btn_prev].alpha, 0.3);
+					set(layer[skin_btn_next].enabled, false);
+					set(layer[skin_btn_next].alpha, 0.3);
+				  );
+			  );
+
+			if(scene.count GT 1,
+				set(layer[skin_btn_prev_fs].visible, true);
+				set(layer[skin_btn_next_fs].visible, true);
+			  ,
+				set(layer[skin_btn_prev_fs].visible, false);
+				set(layer[skin_btn_next_fs].visible, false);
+			  );
+
+			subtxt(newscenenamep,get(scene[get(xml.scene)].name),6,5);
+			initmap(get(newscenenamep));
+			set(tumindex,0);
+			for(set(i,0), i LT groupscenes.count, inc(i),
+				subtxt(newscenenamep2,get(groupscenes[get(i)].value),6,5);
+				if(newscenenamep == newscenenamep2, 
+					set(tumindex,get(groupscenes[get(i)].index));
+				);
+			);
+			
+			txtadd(parentname, 'skin_thumb_', get(tumindex));
+			if(layer[get(parentname)],
+				txtadd(parentbg,get(parentname),bg);
+				if(layer[skin_thumbborder].parent == get(parentbg),,
+					
+					set(layer[skin_thumbborder].parent, get(parentbg));
+					set(layer[skin_thumbborder].visible, true);
+					mini_startup();
+					nexttick(mini_update_scene_infos);
+				);
+			  ,
+				set(layer[skin_thumbborder].visible, false);
+			  );
+
+			
+
+			
+		  );
+			
+
+		  
+	</action>
+
+
+	<action name="skin_gotoscene">
+		if(scene[%1],
+			copy(cursceneindex, scene[get(xml.scene)].index);
+			copy(newsceneindex, scene[%1].index);
+			txtadd(layer[skin_thumbborder].parent, 'skin_thumb_', get(newsceneindex),bg);
+			layer[skin_thumbs].scrolltocenter(get(scene[get(newsceneindex)].thumbx), get(scene[get(newsceneindex)].thumby));
+			loadscene(get(scene[get(newsceneindex)].name),null,get(skin_settings.loadscene_flags),calc(newsceneindex LT cursceneindex ? skin_settings.loadscene_blend_prev : (newsceneindex GT cursceneindex ? skin_settings.loadscene_blend_next : skin_settings.loadscene_blend)));
+		  );
+	</action>
+	
+
+	<action name="skin_nextscene">
+		add(newsceneindex, scene[get(xml.scene)].index, %1);
+		if(newsceneindex GE 0 AND newsceneindex LT scene.count,
+			txtadd(layer[skin_thumbborder].parent, 'skin_thumb_', get(newsceneindex),bg);
+			layer[skin_thumbs].scrolltocenter(get(scene[get(newsceneindex)].thumbx), get(scene[get(newsceneindex)].thumby));
+			loadscene(get(scene[get(newsceneindex)].name),null,get(skin_settings.loadscene_flags),calc(%1 LT 0 ? skin_settings.loadscene_blend_prev : skin_settings.loadscene_blend_next));
+		  );
+	</action>
+
+
+	<action name="skin_nextscene_loop">
+		add(newsceneindex, scene[get(xml.scene)].index, %1);
+		sub(lastsceneindex, scene.count, 1);
+		if(newsceneindex LT 0, copy(newsceneindex,lastsceneindex));
+		if(newsceneindex GT lastsceneindex, set(newsceneindex,0));
+		layer[skin_thumbs].scrolltocenter(get(scene[get(newsceneindex)].thumbx), get(scene[get(newsceneindex)].thumby));
+		loadscene(get(scene[get(newsceneindex)].name),null,get(skin_settings.loadscene_flags),calc(%1 LT 0 ? skin_settings.loadscene_blend_prev : skin_settings.loadscene_blend_next));
+	</action>
+
+
+	<action name="skin_showloading">
+		if(display.stereo == true,
+			set(layer[skin_loadingtext].visible, false);
+		  ,
+			set(layer[skin_loadingtext].visible, %1);
+		  );
+	</action>
+
+
+	<action name="skin_hidetooltips">
+		set(layer[skin_tooltip].alpha,0.0);
+		set(layer[skin_tooltip].visible,false);
+	</action>
+
+
+	<action name="skin_buttonglow">
+		if('%1' !== 'null',
+			set(strength,0.7);
+			if(%2 != null, set(strength,%2));
+			set(layer[skin_buttonglow].parent, %1);
+			set(layer[skin_buttonglow].visible, true);
+			tween(layer[skin_buttonglow].alpha, get(strength), 0.07);
+		  ,
+			tween(layer[skin_buttonglow].alpha, 0.0, 0.1, default,
+				set(layer[skin_buttonglow].parent, null);
+				set(layer[skin_buttonglow].visible, false);
+			  );
+		  );
+	</action>
+
+
+	<action name="skin_calc_opened_closed">
+		set(layer[get(name)].y_opened, get(layer[get(name)].y));
+		set(layer[get(name)].y_closed, calc(layer[get(name)].y - skin_settings.controlbar_offset - skin_settings.controlbar_height + skin_settings.controlbar_offset_closed));
+	</action>
+
+
+	<action name="skin_hideskin">
+		if(layer[skin_map].state    != 'closed', skin_showmap(false);    wait(0.40); );
+		if(layer[skin_thumbs].state != 'closed', skin_showthumbs(false); wait(0.25); );
+
+		set(hidetime, calc('%1' == 'instant' ? 0.0 : 0.5));
+		tween(layer[skin_scroll_window].y,   get(layer[skin_scroll_window  ].y_closed), get(hidetime));
+		tween(layer[skin_splitter_bottom].y, get(layer[skin_splitter_bottom].y_closed), get(hidetime));
+		tween(layer[skin_control_bar].y,     get(layer[skin_control_bar    ].y_closed), get(hidetime));
+
+		tween(layer[skin_btn_prev_fs].x, 0, get(hidetime));
+		tween(layer[skin_btn_next_fs].x, 0, get(hidetime));
+
+		if(layer[skin_logo], tween(layer[skin_logo].alpha, 0.0, 0.5, default, set(layer[skin_logo].visible,false)); );
+
+		stopdelayedcall(skin_btn_show_alpha);
+		set(layer[skin_btn_show].visible, true);
+		delayedcall(skin_btn_show_alpha, get(hidetime), tween(layer[skin_btn_show].alpha, 0.25, 0.25); );
+	</action>
+
+
+	
+
+
+	<action name="skin_showthumbs">
+		if(%1 == null, if(layer[skin_thumbs].state == 'closed', set(show,true), set(show,false)); , set(show,%1); );
+		mul(mh, layer[skin_scroll_layer].pixelheight, -1);
+		if(show,
+			set(layer[btn1].crop,64|200|56|56);set(layer[mbtn1].crop,75|112|75|80);
+			set(layer[skin_thumbs].state, 'opened');
+			tween(layer[skin_thumbs].alpha, 1.0, 0.25);
+			add(mh, layer[skin_thumbs].height);
+			add(mh, layer[skin_scroll_layer].y_offset);
+			tween(layer[skin_scroll_layer].y, get(mh), 0.5, easeOutQuint);
+			set(layer[skin_thumbs_container].visible, true);
+			tween(layer[skin_thumbs_container].alpha, 1.0, 0.25);
+			tween(layer[skin_map].alpha, 0.0, 0.25, default, set(layer[skin_map].visible,false));
+		  ,
+		  	set(layer[btn1].crop,8|200|56|56);set(layer[mbtn1].crop,0|112|75|80);
+			set(layer[skin_thumbs].state, 'closed');
+			tween(layer[skin_thumbs].alpha, 0.0, 0.25, easeOutQuint);
+			add(mh, layer[skin_scroll_layer].y_offset);
+			tween(layer[skin_scroll_layer].y, get(mh), 0.5, easeOutQuint, set(layer[skin_thumbs_container].visible, false););
+		  );
+	</action>
+
+
+	<action name="skin_showmap">
+		if(%1 == null, if(layer[skin_map].state == 'closed', set(show,true), set(show,false)); , set(show,%1); );
+		mul(mh, layer[skin_scroll_layer].pixelheight, -1);
+		if(show,
+			tween(layer[skin_thumbs_container].alpha, 0.0, 0.25, default, set(layer[skin_thumbs_container].visible,false));
+			set(layer[skin_map].visible, true);
+			tween(layer[skin_map].alpha, 1.0, 0.25);
+			set(layer[skin_map].state, 'opened');
+			sub(hh,area.pixelheight,skin_settings.controlbar_offset);
+			sub(hh,layer[skin_control_bar].height);
+			sub(hh,32);
+			add(mh,hh);
+			sub(hh,skin_settings.controlbar_overlap);
+			copy(layer[skin_map].height, hh);
+			tween(layer[skin_scroll_layer].y, get(mh), 0.5, easeOutQuint);
+		  ,
+		  	if(layer[skin_map].state != 'closed',
+				set(layer[skin_map].state, 'closed');
+				add(mh, layer[skin_scroll_layer].y_offset);
+				tween(layer[skin_map].alpha, 0.0, 0.5, easeOutQuint);
+				tween(layer[skin_scroll_layer].y, get(mh), 0.5, easeOutQuint, set(layer[skin_map].visible,false) );
+			  );
+		  );
+	</action>
+
+
+	<action name="skin_keydown_event">
+		if(keycode == 33, skin_nextscene_loop(-1) );               <!-- Page Up   - previous scene -->
+		if(keycode == 34, skin_nextscene_loop(+1) );               <!-- Page Dowm - next scene -->
+		if(keycode == 35, skin_gotoscene(calc(scene.count-1)) );   <!-- End       - last scene -->
+		if(keycode == 36, skin_gotoscene(0) );                     <!-- Home/Pos1 - first scene -->
+	</action>
+	
+
+	<action name="skin_deeplinking_update_url">
+		if(skin_settings.deeplinking AND (!webvr OR webvr.isenabled === false),
+			copy(adr, browser.location);
+			indexoftxt(qi, get(adr), '?');
+			if(qi GT 0, subtxt(adr, adr, 0, get(qi)));
+			copy(si, scene[get(xml.scene)].index);
+			copy(h, view.hlookat);
+			copy(v, view.vlookat);
+			copy(f, view.fov);
+			copy(d, view.distortion);
+			copy(a, view.architectural);
+			clamp(d, 0.0, 1.0);
+			clamp(a, 0.0, 1.0);
+			set(pp, calc(f LT 10 ? 6 : 2));
+			roundval(h, get(pp));
+			roundval(v, get(pp));
+			roundval(f, get(pp));
+			roundval(d, 2);
+			roundval(a, 1);
+			set(adr, calc(adr + '?startscene=' + si + '&amp;startactions=lookat('+h+','+v+','+f+','+d+','+a+');'));
+			js( history.replaceState(null, document.title, get(adr)); );
+		  );
+	</action>
+
+
+
+
+</krpano>

+ 358 - 0
code/tools.xml

@@ -0,0 +1,358 @@
+<krpano>
+	<!--加提示样式-->
+	<action name="addlaytip">
+		
+	    txtadd(tooltipname, 'tooltip_', get(name));
+	    addplugin(get(tooltipname));
+	    txtadd(plugin[get(tooltipname)].parent, 'layer[', get(name), ']');
+	    set(plugin[get(tooltipname)].url,'%SWFPATH%/plugins/textfield.swf');
+	    set(plugin[get(tooltipname)].align,top);
+	    set(plugin[get(tooltipname)].edge,bottom);
+	    set(plugin[get(tooltipname)].keep,true);
+	    set(plugin[get(tooltipname)].x,0);
+	    set(plugin[get(tooltipname)].y,0);
+	    set(plugin[get(tooltipname)].visible,false);
+	    set(plugin[get(tooltipname)].autowidth,true);
+	    set(plugin[get(tooltipname)].autoheight,true);
+	    set(plugin[get(tooltipname)].vcenter,true);
+	    set(plugin[get(tooltipname)].background,true);
+	    set(plugin[get(tooltipname)].backgroundcolor,0xf4ecec);
+	    set(plugin[get(tooltipname)].roundedge,0);
+	    set(plugin[get(tooltipname)].backgroundalpha,0.8);
+	    set(plugin[get(tooltipname)].padding,5);
+	    set(plugin[get(tooltipname)].border,false);
+	    set(plugin[get(tooltipname)].glow,0);
+	    set(plugin[get(tooltipname)].glowcolor,0xFFFFFF);
+	    set(plugin[get(tooltipname)].css,'text-align:center; color:#000000; font-family:MicrosoftYahei;  font-size:14px;');
+	    if(device.mobile,set(plugin[get(tooltipname)].css,'text-align:center; color:#cccccc; font-family:MicrosoftYahei; font-weight:bold; font-size:22px;');
+	    	);
+	    set(plugin[get(tooltipname)].textshadow,0);
+	    set(plugin[get(tooltipname)].textshadowrange,6.0);
+	    set(plugin[get(tooltipname)].textshadowangle,90);
+	    if(text == '' OR text === null,
+	    	    if(isen,
+		    	 copy(plugin[get(tooltipname)].html,scene[get(name)].etitle);
+		    	,
+		    	 copy(plugin[get(tooltipname)].html,scene[get(name)].title);
+		    	);
+	    
+	    ,
+	    		if(isen,
+		    	 copy(plugin[get(tooltipname)].html,etext);
+		    	,
+		    	 copy(plugin[get(tooltipname)].html,text);
+		    	);
+	    );    
+	    set(plugin[get(tooltipname)].enabled,false);	
+
+	</action>
+
+	<action name="addhottip">
+		
+		if(scene[get(linkedscene)].title == scene[get(xml.scene)].title
+		,
+		
+		,
+		    txtadd(tooltipname, 'tooltip_', get(name));
+		    addplugin(get(tooltipname));
+		    txtadd(plugin[get(tooltipname)].parent, 'hotspot[', get(name), ']');
+		    set(plugin[get(tooltipname)].url,'%SWFPATH%/plugins/textfield.swf');
+		    set(plugin[get(tooltipname)].align,top);
+		    set(plugin[get(tooltipname)].edge,bottom);
+		    set(plugin[get(tooltipname)].x,0);
+		    set(plugin[get(tooltipname)].y,-10);
+		    set(plugin[get(tooltipname)].ry,50);
+		    set(plugin[get(tooltipname)].autowidth,true);
+		    set(plugin[get(tooltipname)].autoheight,true);
+		    set(plugin[get(tooltipname)].vcenter,true);
+		    set(plugin[get(tooltipname)].background,true);
+		    set(plugin[get(tooltipname)].backgroundcolor,0xff0000);
+		    set(plugin[get(tooltipname)].roundedge,2);
+		    set(plugin[get(tooltipname)].backgroundalpha,0.6);
+		    set(plugin[get(tooltipname)].padding,5);
+		    set(plugin[get(tooltipname)].border,false);
+		    set(plugin[get(tooltipname)].glow,0);
+		    set(plugin[get(tooltipname)].glowcolor,0xFFFFFF);
+		    set(plugin[get(tooltipname)].css,'text-align:center; color:#cccccc; font-family:MicrosoftYahei;  font-size:16px;');
+		    if(device.mobile,set(plugin[get(tooltipname)].css,'text-align:center; color:#cccccc; font-family:MicrosoftYahei; font-weight:bold; font-size:16px;');
+		    	);
+		    set(plugin[get(tooltipname)].textshadow,0);
+		    set(plugin[get(tooltipname)].textshadowrange,6.0);
+		    set(plugin[get(tooltipname)].textshadowangle,90);
+		    if(text == '' OR text === null,
+			    if(isen,
+			    	 copy(plugin[get(tooltipname)].html,scene[get(linkedscene)].etitle);
+			    ,
+			    	 copy(plugin[get(tooltipname)].html,scene[get(linkedscene)].title);
+			    );
+			   
+		    ,
+		    	if(isen,
+		    	 copy(plugin[get(tooltipname)].html,etext);
+		    	,
+		    	 copy(plugin[get(tooltipname)].html,text);
+		    	);
+		   
+		    );    
+		    set(plugin[get(tooltipname)].enabled,false);	
+		);
+	</action>
+
+
+	<action name="showtip">
+		txtadd(tibname,tooltip_,get(name));
+		if(isen,set(layer[get(tibname)].html,get(etext)));
+		set(layer[get(tibname)].visible,true);
+	</action>
+	<action name="hidtip">
+		txtadd(tibname,tooltip_,get(name));set(layer[get(tibname)].visible,false);
+	</action>
+
+	<style name="show_tip"  onloaded="addlaytip" onhover="showtip();"  onout="hidtip"/>
+
+	<!--自动旋转-->
+	<!-- onmousedown 当鼠标按下时执行
+	onidle      当无用户操作在设定秒数后执行
+	onnewpano   当启动新的全景场景时执行 -->
+	<events name="viewauto" keep="true"  onmousedown="stopview"   onnewpano="stopview"/>        
+	<action name="stopview">
+		set(layer[btn4].crop , '20|368|96|96');
+		set(autoview,false);
+        stoptween(view.hlookat, view.vlookat, view.fov);
+    </action>
+
+    <action name="startview">
+    	if(plugin[gyro].enabled,,
+    	  set(layer[btn4].crop , '136|368|96|96');
+	      set(autoview,true);
+	      copy(oldhlookat,view.hlookat);
+	      sub(view.hlookat,-360); tween(view.fov,110,5);
+	      if(xml.scene == scene_01,tween(view.vlookat,0,5);,tween(view.vlookat,0,5););
+		  tween(view.hlookat, get(oldhlookat), 220, linear,startview);
+		  );
+	</action>
+
+	<!--打开和关闭layer-->
+	<action name="openlayer">
+		set(layer[%1].alpha,0);
+		set(layer[%1].visible,true);
+		tween(layer[%1].alpha,1,0.5);
+	</action>
+	<action name="closelayer">
+		tween(layer[%1].alpha,0,0.3,,
+		set(layer[%1].visible,false););
+	</action>
+<!-- rootpath="%HTMLPATH%/sound/" -->
+	<!--音乐-->
+	<plugin name="soundinterface"
+	        url="%SWFPATH%/plugins/soundinterface.swf"
+	        alturl="%SWFPATH%/plugins/soundinterface.js"
+	        rootpath=""
+	        preload="true"
+	        keep="true"
+			
+	        />
+	<events name="soundauto" keep="true" onnewpano="if(layer[home].visible,,autosp)"/>
+	<action name="autosp">
+		if(isen,
+			if(device.mobile,set(tgbtnname,mbtn2);,set(tgbtnname,btn2););
+			if(cuttsp == scene[get(xml.scene)].sp,
+				if(layer[get(tgbtnname)].crop == layer[get(tgbtnname)].crop1,
+					if(%1,resumesound(sp););
+				);
+
+			,
+				if(layer[get(tgbtnname)].crop == layer[get(tgbtnname)].crop1,
+					txtadd(newspurl,e,get(scene[get(xml.scene)].sp));
+					playsound(sp,'https://bigscene.4dage.com/panorama/sound/001.mp3',1);
+					set(cuttsp,get(scene[get(xml.scene)].sp));
+
+				);
+			);
+
+
+
+
+		,
+			if(device.mobile,set(tgbtnname,mbtn2);,set(tgbtnname,btn2););
+			if(cuttsp == scene[get(xml.scene)].sp,
+				if(layer[get(tgbtnname)].crop == layer[get(tgbtnname)].crop1,
+					if(%1,resumesound(sp););
+				);
+
+			,
+				if(layer[get(tgbtnname)].crop == layer[get(tgbtnname)].crop1,
+					playsound(sp,'https://bigscene.4dage.com/panorama/sound/001.mp3',1);
+					set(cuttsp,get(scene[get(xml.scene)].sp));
+
+				);
+			);
+		);
+
+
+	</action>    
+
+
+
+	<!--gyro-->
+	<plugin name="gyro" devices="html5" keep="true"
+        url="%SWFPATH%/plugins/gyro.js" 
+        enabled="false"
+        camroll="true"
+        friction="0.0"
+        touch_mode="full"
+        sensor_mode="1"
+        softstart="0.5"
+        autocalibration="false"
+        onavailable=""
+        onunavailable=""
+        onenable=""
+        ondisable=""
+        />
+
+	<!--热点加图片-->
+	<action name="add_img">
+		
+	    txtadd(addimgname, 'addimg_', get(name));
+	    addplugin(get(addimgname));
+	    txtadd(plugin[get(addimgname)].parent, 'hotspot[', get(name), ']');
+	    set(plugin[get(addimgname)].url,'get(imgurl)');
+	    set(plugin[get(addimgname)].align,top);
+	    set(plugin[get(addimgname)].edge,bottomleft);
+	    set(plugin[get(addimgname)].keep,true);
+	    set(plugin[get(addimgname)].x,0);
+	    set(plugin[get(addimgname)].y,0);
+	    set(plugin[get(addimgname)].scale,0.2);
+	    set(plugin[get(addimgname)].visible,true);
+	    copy(plugin[get(addimgname)].linkedscene,name);
+	    copy(plugin[get(addimgname)].onclick,onclick);
+	    
+
+	</action>
+
+
+
+
+
+	<!-- include VR support -->
+	<include url="../plugins/webvr.xml" devices="html5" />
+
+	<!-- overwrite some settings from the webvr.xml for the skin integration -->
+	<plugin name="WebVR" keep="true" devices="html5"
+	        multireslock.desktop="true"
+	        multireslock.mobile.or.tablet="false"
+	        mobilevr_fake_support="true"
+	        onavailable="removelayer(webvr_enterbutton); skin_arrange_buttons(); webvr_onavailable();"
+	        onentervr="skin_showloading(false); webvr_onentervr(); webvr_setup();"
+	        onexitvr="webvr_onexitvr(); webvr_setup();"
+	        />
+
+	<!-- webvr button style (adjust to match default skin style) -->
+	<style name="webvr_button_style"
+	       border="false"
+	       shadow="0.01" shadowrange="9.0" shadowcolor="0xFFFFFF" shadowalpha="0.5"
+	       />
+
+	<!-- show a 'rotate the device' info when the mobile device is in portrait mode in VR mode -->
+	<layer name="webvr_rotate_to_landscape_request" keep="true" vr="true" devices="mobile"
+	       url="%SWFPATH%/img/rotate_device.png" scale="0.8"
+	       align="top" edge="center" y="28%"
+	       autoalpha="true" alpha="0.0"
+	       enabled="false"
+	       />
+
+	<events name="webvr_events" keep="true" devices="html5"
+	        onresize.mobile="webvr_act_as_gyro_in_portrait_mode();"
+	        onviewchange=""
+	        />
+
+	<action name="webvr_setup">
+		if(webvr.isenabled,
+			set(display.hotspotrenderer, webgl);
+			copy(loadscene_flags_backup, skin_settings.loadscene_flags);
+			set(skin_settings.loadscene_flags, MERGE|KEEPVIEW|KEEPMOVING|NOPREVIEW);
+			webvr_act_as_gyro_in_portrait_mode(true);
+			if(scene.count GT 1,
+				set(hotspot[webvr_prev_scene].visible, true);
+				set(hotspot[webvr_next_scene].visible, true);
+				set(events[webvr_events].onviewchange, webvr_menu_following());
+			  );
+		  ,
+			set(display.hotspotrenderer, auto);
+			if(loadscene_flags_backup !== null, copy(skin_settings.loadscene_flags, loadscene_flags_backup));
+			tween(layer[webvr_rotate_to_landscape_request].alpha, 0.0, 0.0);
+			set(hotspot[webvr_prev_scene].visible, false);
+			set(hotspot[webvr_next_scene].visible, false);
+			set(events[webvr_events].onviewchange, null);
+		  );
+	</action>
+
+	<action name="webvr_act_as_gyro_in_portrait_mode">
+		if(device.mobile AND webvr.isenabled,
+			div(aspect, stagewidth, stageheight);
+			if(aspect != lastaspect OR '%1' == 'true',
+				copy(lastaspect, aspect);
+				if(stagewidth GT stageheight,
+					<!-- landscape mode - use stereo rendering and a direct/fast gyro sensor mode -->
+					set(display.stereo, true);
+					set(webvr.mobilevr_sensor_mode, 3);
+					webvr.update();
+					tween(layer[webvr_rotate_to_landscape_request].alpha, 0.0, 0.0);
+				  ,
+					<!-- portrait mode - use normal rendering and a smoother/slower gyro sensor mode -->
+					set(display.stereo, false);
+					set(webvr.mobilevr_sensor_mode, 1);
+					webvr.update();
+					tween(layer[webvr_rotate_to_landscape_request].alpha, 1.0);
+					delayedcall(3.0, tween(layer[webvr_rotate_to_landscape_request].alpha, 0.0, 1.0); );
+				  );
+			  );
+		  ,
+			set(lastaspect, 0);
+		  );
+	</action>
+
+	<!-- VR scene switching hotspots -->
+	<style name="webvr_menu_style" depth="800" scale="0.5" distorted="true" ath="0" atv="45" alpha="0.5" />
+	<hotspot name="webvr_prev_scene" keep="true" style="skin_base|webvr_menu_style" crop="0|64|64|64"  ox="-64" onover="tween(scale,0.6);" onout="tween(scale,0.5);" vr_timeout="750" onclick="skin_nextscene_loop(-1);" visible="false" devices="html5.and.webgl" />
+	<hotspot name="webvr_next_scene" keep="true" style="skin_base|webvr_menu_style" crop="64|64|64|64" ox="+64" onover="tween(scale,0.6);" onout="tween(scale,0.5);" vr_timeout="750" onclick="skin_nextscene_loop(+1);" visible="false" devices="html5.and.webgl" />
+
+	<!-- floating/following VR hotspots -->
+	<action name="webvr_menu_following" type="Javascript" devices="html5"><![CDATA[
+		var hs1 = krpano.get("hotspot[webvr_prev_scene]");
+		var hs2 = krpano.get("hotspot[webvr_next_scene]");
+		if(!hs1.hovering && !hs2.hovering)
+		{
+			var f = 0.01;	// follow speed factor
+			var h = krpano.view.hlookat;
+			var v = krpano.view.vlookat;
+			var hsh = hs1.ath;
+			var hsv = hs1.atv;
+			h   = (h  -(h|0))   + (((h|0)  +360180)%360) - 180.0;
+			v   = (v  -(v|0))   + (((v|0)  +360180)%360) - 180.0;
+			hsh = (hsh-(hsh|0)) + (((hsh|0)+360180)%360) - 180.0;
+			var dh = h - hsh;
+			dh += (dh > 180) ? -360 : (dh < -180) ? 360 : 0
+			hsh += dh*f;
+			var a = Math.abs(v - hsv) / 90.0;
+			a = 1.0 * Math.max(1.0 - 2.0*Math.sqrt(a), 0);
+			v = v + 55.0 - v*1.5;
+			hsv = hsv*(1.0 - f) + v*f;
+			hs1.ath = hs2.ath = hsh;
+			hs1.atv = hs2.atv = hsv;
+			hs1.alpha = hs2.alpha = a;
+		}
+	]]></action>
+	<!-- VR support -->
+
+
+	<action name="hotspot_animate">
+		inc(frame,1,get(lastframe),0);
+		mul(ypos,frame,frameheight);
+		txtadd(crop,'0|',get(ypos),'|',get(framewidth),'|',get(frameheight));
+		delayedcall(0.3, if(loaded, hotspot_animate() ) );
+	</action>
+
+
+
+</krpano>

+ 435 - 0
code/ui.xml

@@ -0,0 +1,435 @@
+<krpano>
+
+	<!--首屏弹出-->
+	<layer name="home" type="container" bgcolor="0x000000" keep="true" width="100%"  height="100%" align="center" zorder="900" bgalpha="1"  bgcapture="true" visible="true" onclick2="if(progress.progress GT 0.9 , set(visible,false))">
+		<layer name="homebg" type="image" url.normal="https://bigscene.4dage.com/panorama/img/pc/homebg.jpg" url.mobile="https://bigscene.4dage.com/panorama/img/mobile/homebg.png" align="top"  
+			keep="true" x="0%" y.mobile="0%" zorder="1"   width.mobile="100%"  height.mobile="prop" visible="true"  onclick2="set(layer[home].visible,false)" onloaded="resize();js(hidload)"/>
+		
+		<layer name="hometitle" type="image" url.normal="https://bigscene.4dage.com/panorama/img/pc/title.png" url.mobile="https://bigscene.4dage.com/panorama/img/mobile/title.png" align="top"  
+			keep="true" x="3%" y.mobile="40%" zorder="10"  width.normal="prop" width.mobile="80%" height.normal="46%" height.mobile="prop" visible="true" y="3%"   onloaded=""  onclick2="set(layer[home].visible,false)" />
+
+			<!--<layer name="homelogo" type="image" url="https://bigscene.4dage.com/panorama/img/pc/blogo.png"  align="top"  
+			keep="true" x="0%" y.mobile="31%" zorder="10"  width.normal="prop" width.mobile="prop" height.normal="15%" height.mobile="14%" visible="true"  onloaded="" y="84%" /> -->
+
+		<layer name="homecn" type="image" url.normal="https://bigscene.4dage.com/panorama/img/pc/cnen.png"  url.mobile="https://bigscene.4dage.com/panorama/img/mobile/cnen.png" 
+			align="top"  keep="true" x="0%" y.mobile="40%" zorder="10"  width.normal="prop" width.mobile="prop" height.normal="6%" height.mobile="6%" visible="true"  onloaded="" y="80%" ox="0%" onclick="enter(cn);js(krqstunm(1))" />
+
+
+	</layer>
+
+	<events name="ui" keep="true" onresize="resize" />
+	<action name="resize" autorun="onstart">
+		if(device.mobile,
+			div(bl,stagewidth,stageheight);
+			set(layer[scene_info_text].css,color:#fff; font-family:Arial; font-weight:500; font-size:50px; line-height:66px; text-indent:50px;);
+			if(device.iphone,
+				set(layer[homebg].height,prop);
+				set(layer[homebg].width,100%);
+				,
+				set(layer[homebg].height,100%);
+				set(layer[homebg].width,100%);
+			);
+			
+			set(layer[homebg].y,0);
+			if(bl GT 1.77,
+				set(layer[homebg].url,https://bigscene.4dage.com/panorama/img/pc/homebg.jpg);
+					<!--set(layer[hometitle].url,https://bigscene.4dage.com/panorama/img/mobile/title.png); -->
+					<!--set(layer[hometitle].y,15%);set(layer[hometitle].width,prop);set(layer[hometitle].height,40%); -->
+				set(layer[infoimg].width,prop);
+				set(layer[infoimg].height,60%);
+				
+				set(layer[fxmask].height,70%);
+				set(layer[fxmask].width,prop);
+				,
+				set(layer[homebg].url,https://bigscene.4dage.com/panorama/img/mobile/homebg.png);
+					<!--set(layer[hometitle].url,https://bigscene.4dage.com/panorama/img/mobile/title.png); -->
+					<!--set(layer[hometitle].y,10%);set(layer[hometitle].width,50%);set(layer[hometitle].height,prop); -->
+				set(layer[infoimg].width,80%);
+				set(layer[infoimg].height,prop);
+				
+				
+				set(layer[fxmask].height,prop);
+				set(layer[fxmask].width,80%);
+
+			);
+
+
+
+
+		,
+			div(bl,stagewidth,stageheight);
+			
+			if(bl GT 1.77,
+				copy(layer[homebg].width,stagewidth);
+				set(layer[homebg].height,prop);
+				set(layer[fxmask].height,40%);
+				set(layer[fxmask].width,prop);
+				,
+				copy(layer[homebg].height,stageheight);
+				set(layer[homebg].width,prop);
+				set(layer[fxmask].height,40%);
+				set(layer[fxmask].width,prop);
+
+			);
+		);
+		
+	</action>
+
+
+	<!--场景信息-->
+	<events name="scene_info"  keep="true" onnewpano="initsceneinfo"/>   
+
+	<action name="initsceneinfo">
+		trace(info);
+		
+		txtadd(layer[scene_info].url,https://bigscene.4dage.com/panorama/img/cninfo/,get(scene[get(xml.scene)].gid),.png);
+		set(layer[scene_info_text].html,get(scene[get(xml.scene)].title));
+		set(layer[scene_info].height,0);
+		nav_control();
+	</action> 
+
+
+
+	<layer name="scene_info_bg" type="container" handcursor="true" bgcolor="0x000000" bgalpha="0.3" keep="true" x="0%" y.mobile="5%" y.normal="5%" zorder="100"  width.normal="24%" width.mobile="60%" height.normal="5%"  height.mobile="6%" visible="true"  onloaded=""  >
+		<layer name="scene_info_text" keep="true"
+		       url="https://bigscene.4dage.com/panorama/plugins/textfield.swf"
+		       align="centercenter"
+		       y="0%"
+					 x="0"
+					 width="100%"
+					 height="100%"
+		       background="false"
+		       css="color:#fff; font-family:Arial; font-weight:500; font-size:40px; line-height:40px; text-indent:50px; "
+		       html=""
+					 onclick="dropDown();"
+			>
+		 </layer>
+		 <layer name="scene_cnicon" type="image"  url="https://bigscene.4dage.com/panorama/images/cnicon.png"  align="topleft"  
+			keep="true" x="0%" y="0%"   zorder="10"  width.normal="prop" width.mobile="prop" height="100%"  height.mobile="100%"  visible="true"  onloaded=""  />
+		<layer name="scene_info" type="image"  url.normal="https://bigscene.4dage.com/panorama/img/pc/info.png"  align="topleft"  
+			keep="true" x="0%" y="100%"   zorder="0"  width.normal="100%" width.mobile="100%" height="0%"  height.mobile="0%" visible="true"  onloaded=""  />
+	</layer>
+
+	<action name="dropDown">
+		if(layer[scene_info].height == 0, set(layer[scene_info].height,prop), set(layer[scene_info].height,0))
+	</action>
+
+
+	<!--点赞-->
+	<!-- <layer name="dianzhan" type="image" url.normal="https://bigscene.4dage.com/panorama/img/pc/zhan.png" crop="0|80|135|80" crop1="0|0|135|80" crop2="0|80|135|80" 
+			align="topright"  keep="true" x="100"  y="5%" zorder="10"  width="prop" height="30" visible="false"  onloaded=""  
+			onclick="if(crop == '0|0|135|80',js(like),js(unlike))" >
+			<layer name="zhannum" url="https://bigscene.4dage.com/panorama/plugins/textfield.swf" align="right" edge="left"  x="-5"  autowidth="true" background="false" border="false" padding="5 6" html="999"
+					css.normal="color:#FFFFFF; font-family:Arial; font-size:18px;"
+					css.mobile="color:#FFFFFF; font-family:Arial; font-size:18px;"
+					/>
+			<layer name="zhanleft" url="https://bigscene.4dage.com/panorama/plugins/textfield.swf" align="left" edge="right"  x="-10"  autowidth="true" background="false" border="false" padding="5 6" html="9999"
+					css.normal="color:#FFFFFF; font-family:Arial; font-size:18px;"
+					css.mobile="color:#FFFFFF; font-family:Arial; font-size:18px;"
+			>
+				<layer name="llsimg" type="image" url.normal="https://bigscene.4dage.com/panorama/img/pc/lls.png" edge="right"
+				align="left"  keep="true" x="-5%" zorder="10"  width="prop" height="30" visible="true"  
+				/>
+			</layer>
+		</layer>
+	<action name="like">
+		copy(layer[dianzhan].crop,layer[dianzhan].crop2);
+		add(layer[zhannum].html,1);
+	</action>
+	<action name="unlike">
+		copy(layer[dianzhan].crop,layer[dianzhan].crop1);
+		sub(layer[zhannum].html,1);
+	</action> -->
+
+	<!--热点-->
+	<style name="skin_hotspotstyle" url="https://bigscene.4dage.com/panorama/img/spot.png" scale="0.5" scale.mobile="0.7" edge="top" distorted="false"
+		       tooltip=""
+		       onclick="loadscene(get(linkedscene));skin_updatescroll();"
+		       onover="tween(scale,0.55);"
+		       onout="tween(scale,0.5);"
+		      
+		       />
+	<style name="hp_hotspotstyle" url="https://bigscene.4dage.com/panorama/img/pc/hotspot/ll.jpg" scale="0.5" edge="bottom" distorted="false"
+		       tooltip=""  onloaded="add_img" onclick="lookto(get(hotspot[get(linkedscene)].ath),get(hotspot[get(linkedscene)].atv),50,linear(50),,,
+		       	loadscene(get(linkedscene),,MERGE,ZOOMBLEND(2.0, 2.0, easeInOutSine));skin_updatescroll();
+		       	);"
+		      
+		       />
+	<style name="hp2_hotspotstyle"  scale="0.4" edge="bottom" distorted="false"
+		       tooltip=""  onclick="lookto(get(hotspot[get(name)].ath),get(hotspot[get(name)].atv),80,linear(50),,,
+		       	loadscene(get(name),,MERGE,ZOOMBLEND(2.0, 2.0, easeInOutSine));skin_updatescroll();
+		       	);"
+		      
+		       />
+
+	<style name="small_hotspotstyle" 
+		scale="1" edge="bottom" distorted="false"
+		tooltip=""
+		zorder="1"
+		url="https://bigscene.4dage.com/panorama/img/pc/hotspot2.png"
+		onclick="looktohotspot(get(name),50);"
+		onloaded="add_hotspot_text();"
+		>
+	</style>
+
+	<action name="add_hotspot_text">
+	    txtadd(tooltipname, 'tooltip_', get(name));
+	    addplugin(get(tooltipname));
+	    txtadd(plugin[get(tooltipname)].parent, 'hotspot[', get(name), ']');
+	    set(plugin[get(tooltipname)].url,'https://bigscene.4dage.com/panorama/plugins/textfield.swf');
+	    set(plugin[get(tooltipname)].align,top);
+	    set(plugin[get(tooltipname)].edge,bottom);
+	    set(plugin[get(tooltipname)].x,0);
+	    set(plugin[get(tooltipname)].y,0);
+	    set(plugin[get(tooltipname)].width,auto);
+	    set(plugin[get(tooltipname)].autoheight,true);
+	    set(plugin[get(tooltipname)].background,true);
+	    set(plugin[get(tooltipname)].backgroundcolor,0x000000);
+	    set(plugin[get(tooltipname)].roundedge,8);
+	    set(plugin[get(tooltipname)].backgroundalpha,0.7);
+	    set(plugin[get(tooltipname)].border,true);
+	    set(plugin[get(tooltipname)].glow,4);
+	    set(plugin[get(tooltipname)].glowcolor,0xFFFFFF);
+	    set(plugin[get(tooltipname)].css,'text-align:center; color:#FFFFFF; font-family:Arial; font-weight:bold; font-size:28px; padding: 0 10px;');
+	    set(plugin[get(tooltipname)].textshadow,1);
+	    set(plugin[get(tooltipname)].textshadowrange,6.0);
+	    set(plugin[get(tooltipname)].textshadowangle,90);
+	    set(plugin[get(tooltipname)].html,get(title));
+	    set(plugin[get(tooltipname)].enabled,false);	
+	</action>
+
+
+		
+	<style name="ar_hotspotstyle"  url="https://bigscene.4dage.com/panorama/img/ar_hotspot.png" scale="0.5" devices="mobile" scale.mobile="0.7" edge="top" distorted="false"
+		       tooltip=""
+		       onclick="js(callar)"
+		       onover="tween(scale,0.55);"
+		       onout="tween(scale,0.5);"
+		      
+		       />
+		      
+    
+
+	<!--控制栏-->
+
+	<style name="btn_base" url="https://bigscene.4dage.com/panorama/img/pc/btn.png" keep="true"   align="lefttop" edge="center" height.normal="20%"  width="prop"/>
+
+	<layer name="btnbar" type="container" keep="true" width="96" visible.mobile="false"
+		height="36%"  align="rightcenter"  x="0.5%" zorder="100" >
+		
+
+		<layer name="btn7" style="btn_base|show_tip" crop="136|20|96|96"  x="49%" y="12%" text="返回主页" etext="Home"
+			onclick="if(xml.scene == scene_01, set(crop,136|20|96|96); , loadscene(scene_01,,,BLEND(1.0, easeInCubic));skin_updatescroll();
+		       	set(inscene,false);  set(inscene,false); )"/>
+
+		<layer name="btn1" style="btn_base|show_tip" crop="20|136|96|96" x="49%" y="62%" text="切换场景" etext="Switch the Scene"
+			onclick="skin_showthumbs();"/>
+
+		<layer name="btn2" style="btn_base|show_tip" crop="136|136|96|96" x="49%" y="37%" text="背景音乐" etext="Music"
+		onclick="if(crop == '136|136|96|96'
+			,set(crop,20|136|96|96);pausesound(bgm);pausesound(sp);
+			,set(crop,20|136|96|96);resumesound(bgm);autosp(true);)" />
+		
+
+		<layer name="btn4" style="btn_base|show_tip" crop="20|368|96|96" x="49%"  y="87%" text="自动旋转" etext="Autorotation"
+		onclick="if(crop == '20|368|96|96'
+				,startview();
+				,stopview();)"/>
+	
+		
+	</layer>
+
+ 
+	<style  name="mobbtn" url="https://bigscene.4dage.com/panorama/img/pc/btn.png" width="12%" height="prop" x="3%" keep="true" visible.normal="false" align="righttop" zorder="100"/>
+	
+	<layer name="mbtn7" style="mobbtn" y="5%" crop="136|20|96|96" onclick="if(xml.scene == scene_01, set(crop,136|20|96|96); , loadscene(scene_01,,,BLEND(1.0, easeInCubic));skin_updatescroll();
+		       	set(inscene,false);  set(inscene,false); )"/>
+	<layer name="mbtn1" style="mobbtn" y="15%" crop="20|252|96|96" onclick="skin_showthumbs();"/>
+	<layer name="mbtn2" style="mobbtn" y="25%" crop="136|136|96|96" 
+		onclick="if(crop == '136|136|96|96'
+			,set(crop,20|136|96|96);pausesound(bgm);pausesound(sp);
+			,set(crop,136|136|96|96);resumesound(bgm);autosp(true);)"/>
+	<layer name="mbtn6" style="mobbtn" y="35%" crop="20|368|96|96" onclick="if(crop == '20|368|96|96'
+		,set(crop,'136|368|96|96');set(plugin[gyro].enabled,true);stopview();
+		,set(crop,'20|368|96|96');set(plugin[gyro].enabled,false););"/>
+	
+	<!-- <layer name="mbtn" style="mobbtn" y="50%"   crop="0|300|75|80" onclick=""/>
+	<layer name="mbtn8" style="mobbtn" y="57.5%" crop="0|497|75|80" onclick=""/> -->
+	
+	<events name="btnbarevt" keep="true" onnewpano="
+		if(device.mobile,
+			if(scene[get(xml.scene)].isar
+			,set(layer[mbtnar].visible,true);
+			,set(layer[mbtnar].visible,false);
+			);
+		);
+
+		" 
+		
+		/>
+	
+	<action name="qiandao">
+		<!-- if(%1 == 1,
+			set(layer[btn5].crop,'450|80|56|56');set(layer[mbtn4].crop,'75|284|75|80');
+			set(layer[btn5].onclick,null);set(layer[mbtn4].onclick,null);
+			,
+			set(layer[btn6].crop,'540|80|56|56');set(layer[mbtn5].crop,'71|355|75|80');
+			set(layer[btn6].onclick,null);set(layer[mbtn5].onclick,null);
+		); -->
+		if(%1 == 1,
+			set(layer[fxmask].url,https://bigscene.4dage.com/panorama/images/alert_bg.png);
+			,
+			set(layer[fxmask].url,https://bigscene.4dage.com/panorama/images/alert_bg2.png);
+
+		);
+		
+		openlayer(fxpano);
+	</action>
+
+
+	<!--热点弹出-->
+	<!-- <layer name="infopano" type="container" keep="true" width="100%" height="100%" align="center" edge="center" zorder="200" bgcolor="0x000000" bgcapture="true" bgalpha="0.8" visible="false" onclick="hidinfo();">
+		<layer name="infoimg" type="image" url="%HTMLPATH%/img/null.png" align="center"  height="prop" width.normal="30%" width.mobile="80%"  enabled="false" zorder="400">
+			<layer name="infox" type="image" url="%HTMLPATH%/img/pc/x.png" align="bottom" edge="top"  height="40" width="prop" enabled="false" zorder="400" y="-30" onclick="hidinfo();"/>
+		</layer>
+	</layer>
+	
+	<action name="showinfo">
+		if(isen,
+			if(device.mobile,
+				txtadd(layer[infoimg].url,https://bigscene.4dage.com/panorama/img/mobile/einfo/,get(name),.jpg);
+				,
+				txtadd(layer[infoimg].url,https://bigscene.4dage.com/panorama/img/pc/einfo/,get(name),.jpg);
+			);
+		,
+			if(device.mobile,
+				txtadd(layer[infoimg].url,https://bigscene.4dage.com/panorama/img/mobile/info/,get(name),.jpg);
+				,
+				txtadd(layer[infoimg].url,https://bigscene.4dage.com/panorama/img/pc/info/,get(name),.jpg);
+			);
+
+		);
+		openlayer(infopano);
+	</action>
+	<action name="hidinfo">
+		set(layer[infoimg].url,https://bigscene.4dage.com/panorama/img/null.png);
+		
+		closelayer(infopano);
+	</action> -->
+
+
+
+
+
+	<style name="info_style" fillcolor="0xFFFFFF" fillalpha="0.1"  borderwidth="0"
+		         depth="-1000"
+		         scaleflying="false"
+		         tx="0"
+		         ty="0"
+		         tz="0"
+
+		         onloaded="tween(fillalpha,0,1,,tween(fillalpha,0.6,1,,onloaded))"
+		         onclick="showinfo"
+		         />
+
+	<style name="infospot_style" url="https://bigscene.4dage.com/panorama/img/infospot.png" scale="0.8" scale.mobile="1" onclick="showinfo"
+	       crop="0|0|60|60"
+	       framewidth="60" frameheight="60" frame="0" lastframe="1"
+	       onloaded="hotspot_animate();"
+		 
+		         
+		         />
+
+	<style name="sound_style" url="https://bigscene.4dage.com/panorama/img/sound.png" scale="0.8" scale.mobile="1.2" onclick="stopsound(sp);playsound(sp,get(sdul),1);"
+	       crop="0|0|60|60"
+	       framewidth="60" frameheight="60" frame="0" lastframe="1"
+	       onloaded="hotspot_animate();"
+		 
+		         
+		         />
+
+
+
+
+	<!--切换大场景-->
+	<layer name="inpano" type="container" bgcolor="0x000000" keep="true" width="100%"  height="100%" align="center" zorder="900" bgalpha="1"  bgcapture="true" visible="false" >
+		<layer name="inimg" type="image" url="https://bigscene.4dage.com/panorama/img/in.jpg"  align="top"  width.normal="100%" height.normal="100%"
+			keep="true"  width.mobile="prop"  height.mobile="100%" 
+			crop="0|0|1000|562.5" framewidth="1000" frameheight="562.5" frame="0" lastframe="29"
+			/>
+
+	</layer>
+
+	<action name="inpano_animate">
+		
+		inc(layer[inimg].frame,1);
+		if(layer[inimg].frame LE layer[inimg].lastframe,
+			mul(ypos,layer[inimg].frame,layer[inimg].frameheight);
+			txtadd(layer[inimg].crop,'0|',get(ypos),'|',get(layer[inimg].framewidth),'|',get(layer[inimg].frameheight));
+			delayedcall(0.1, if(loaded, inpano_animate() ) );
+			,
+			set(layer[inimg].frame,0);
+			closelayer(inpano);
+			loadscene(get(linkedscene));skin_updatescroll();
+		);
+		
+	</action>
+
+
+	<!--手机分享-->
+	<!-- <layer name="fxpano" type="container" bgcolor="0x000000" keep="true" width="100%"  height="100%" align="center" zorder="900" bgalpha="0.6"  bgcapture="true" visible="false" onclick="closelayer(get(name))">
+		<layer name="fxjt" type="image" url="https://bigscene.4dage.com/panorama/img/fx.png"  align="topright"  x="3%" y="3%"
+			keep="true"  width="15%"  height="prop" onloaded="isweixin"
+			/>
+		<layer name="fxmask" url="https://bigscene.4dage.com/panorama/images/alert_bg.png" keep="true" width="80%"  height="prop" align="center" zorder="900"  >
+			<layer name="fxtext" url="https://bigscene.4dage.com/panorama/plugins/textfield.swf" align="center" edge="center"  y="-10%" width="80%" autoheight="true" background="false" bgcolor="0xFF0000" border="false" bgalpha="0.8" padding="5 6" html="9999"
+						css.normal="color:#FF0000; font-family:Arial; font-size:24px;"
+						css.mobile="color:#FF0000; font-family:Arial; font-size:24px;"
+				/>
+			<layer name="fxerm"	type="image" url="https://bigscene.4dage.com/panorama/img/fxerm.png"  align="bottomright"  x="3%" y="3%" keep="true"  width="prop"  height="30%" visible.mobile="false"/>
+		</layer>
+	</layer>
+
+	<action name="isweixin" type="Javascript">
+		<![CDATA[
+			var krpano = document.getElementById("krpanoSWFObject");
+			var ua = navigator.userAgent.toLowerCase();
+			if(ua.match(/MicroMessenger/i)=="micromessenger") {
+				
+		 	} else {
+				if(ua.match(/baiduboxapp/i)=="baiduboxapp") {
+				}else{
+				krpano.set("layer[fxjt].visible",false);
+				}
+			}
+		]]>
+	</action> -->
+
+	
+
+
+
+
+
+
+	<control mousetype="drag2d"
+	         zoomtocursor="false"
+	         zoomoutcursor="false"
+	         mouseaccelerate="1.0"
+	         mousespeed="10.0"
+	         mousefriction="0.8"
+	         mousefovchange="1.0"
+	         keybaccelerate="0.09"
+	         keybfriction="0.94"
+	         keybfovchange="0.25"
+	         fovspeed="3.0"
+	         fovfriction="0.9"
+	         bouncinglimits="true"
+	         touchfriction="0.9"
+	         />
+
+
+
+
+	
+</krpano>

+ 21 - 0
code/view.xml

@@ -0,0 +1,21 @@
+<view 
+	     
+	      camroll       ="0.000000"
+	      fovtype       ="MFOV"
+	      fov       ="120"
+	      fovmin        ="80"
+	      fovmax        ="120"
+	      maxpixelzoom  ="1"
+	      limitfov      ="true"
+	      fisheye       ="0.00"
+	      fisheyefovlink ="0.50"
+	      stereographic ="false"
+	      pannini       ="false"
+	      architectural ="1"
+	     
+
+	      
+	      limitview     ="range"
+	    
+	
+	      />

+ 80 - 0
common/adaptive.js

@@ -0,0 +1,80 @@
+;(function (win, lib) {
+    var doc = win.document;
+    var docEl = doc.documentElement;
+
+    var devicePixelRatio = win.devicePixelRatio;
+    var dpr = 1; // 物理像素与逻辑像素的对应关系
+    var scale = 1; // css像素缩放比率
+    // 设置viewport
+    function setViewport() {
+        var isIPhone = !!win.navigator.appVersion.match(/iphone/gi);
+        if (isIPhone) {
+            if (devicePixelRatio >= 3) {
+                dpr = 3;
+            }
+            else if (devicePixelRatio === 2) {
+                dpr = 2;
+            }
+            else {
+                dpr = 1;
+            }
+        }
+        win.devicePixelRatioValue = dpr;
+        //win.devicePixelRatio = win.devicePixelRatio*win.devicePixelRatio;
+        scale = 1 / dpr;
+        if(scale < 1){
+        	scale = 1;
+        }
+        
+      //  alert(devicePixelRatio +"==="+dpr+"==="+scale);
+        var metaEl = doc.createElement('meta');
+        metaEl.setAttribute('name', 'viewport');
+        metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');
+        if (docEl.firstElementChild) {
+            docEl.firstElementChild.appendChild(metaEl);
+        }
+        else {
+            var wrap = doc.createElement('div');
+            wrap.appendChild(metaEl);
+            doc.write(wrap.innerHTML);
+        }
+    }
+    setViewport();
+    var newBase = 100;
+
+    function setRem() {
+        var visualView = Math.min(docEl.getBoundingClientRect().width, lib.maxWidth * dpr); // visual viewport
+        newBase = 100 * visualView / lib.desinWidth;
+        docEl.style.fontSize = newBase + 'px';
+    }
+    var tid;
+    lib.desinWidth = 640;
+    lib.baseFont = 18;
+    lib.maxWidth = 540;
+    lib.init = function () {
+        win.addEventListener('resize', function () {
+            clearTimeout(tid);
+            tid = setTimeout(setRem, 300);
+        }, false);
+        /*win.addEventListener('onorientationchange', function () {
+            clearTimeout(tid);
+            tid = setTimeout(setRem, 300);
+        }, false);*/
+        win.addEventListener('pageshow', function (e) {
+            if (e.persisted) {
+                clearTimeout(tid);
+                tid = setTimeout(setRem, 300);
+            }
+        }, false);
+        if (doc.readyState === 'complete') {
+            doc.body.style.fontSize = lib.baseFont * dpr + 'px';
+        }
+        else {
+            doc.addEventListener('DOMContentLoaded', function (e) {
+                doc.body.style.fontSize = lib.baseFont * dpr + 'px';
+            }, false);
+        }
+        setRem();
+        docEl.setAttribute('data-dpr', dpr);
+    };
+})(window, window['adaptive'] || (window['adaptive'] = {}));

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 70 - 0
common/openjs/aio.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 57 - 0
common/openjs/openBox.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
common/openjs/openjs_shareconfig.min.js


+ 83 - 0
common/openjs/statistics_b3ce6b5.js

@@ -0,0 +1,83 @@
+/**
+ * @file Describe the file
+ * @author liumengjie
+ */
+var ajax = {};
+window.__statis = {
+    push: function (data) {
+        /* eslint fecs-camelcase: [2, {ignore: ["/^ar_/"]}, {ignore: ["/^event_/"]}] */
+        ajax.get('/artrack/count_ar', {
+            event_id: 'share_page_pv',
+            ar_key: data['arkey'],
+            ar_type: data['artype']
+        });
+    }
+};
+ajax.x = function () {
+    if (typeof XMLHttpRequest !== 'undefined') {
+        return new XMLHttpRequest();
+    }
+    var versions = [
+        'MSXML2.XmlHttp.6.0',
+        'MSXML2.XmlHttp.5.0',
+        'MSXML2.XmlHttp.4.0',
+        'MSXML2.XmlHttp.3.0',
+        'MSXML2.XmlHttp.2.0',
+        'Microsoft.XmlHttp'
+    ];
+
+    var xhr;
+    for (var i = 0; i < versions.length; i++) {
+        try {
+            xhr = new ActiveXObject(versions[i]);
+            break;
+        } catch (e) {}
+    }
+    return xhr;
+};
+
+ajax.send = function (url, method, data, success, fail, async) {
+    if (async === undefined) {
+        async = true;
+    }
+    var x = ajax.x();
+    x.open(method, url, async);
+    x.onreadystatechange = function () {
+        if (x.readyState === 4) {
+            var status = x.status;
+            if (status >= 200 && status < 300) {
+                success && success(x.responseText, x.responseXML);
+            } else {
+                fail && fail(status);
+            }
+
+        }
+    };
+    if (method === 'POST') {
+        x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
+    }
+    x.send(data);
+};
+
+ajax.get = function (url, data, callback, fail, async) {
+    var query = [];
+    for (var key in data) {
+        query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
+    }
+    ajax.send(url + (query.length ? '?' + query.join('&') : ''), 'GET', null, callback, fail, async);
+};
+
+ajax.post = function (url, data, callback, fail, async) {
+    var query = [];
+    for (var key in data) {
+        query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
+    }
+    ajax.send(url, 'POST', query.join('&'), callback, fail, async);
+};
+
+// 发送统计请求
+// ajax.get('/artrack/count_ar', {
+//     event_id: 'share_page_pv',
+//     ar_key: arDatas['arkey'],
+//     ar_type: arDatas['artype']
+// });

+ 169 - 0
css/alert.css

@@ -0,0 +1,169 @@
+html,body,dl,dt,dd,ol,ul,pre,form,field,p,blockquote,h1,h2,h3,h4,h5,h6,div,img,td {
+	font-family: "microsoft yahei", "宋体", Tahoma, Arial, Helvetica, sans-serif;
+	margin: 0;
+	padding: 0;
+	color: #333333;
+	font-size: 0.26rem;
+}
+
+body {
+	background: #fff;
+}
+
+th,td {
+	font-family: "microsoft yahei", Tahoma, Arial, Helvetica, sans-serif;
+	color: #333333;
+	font-size: 0.12rem;
+}
+
+h1,h2,h3,h4,h5 {
+	font-family: "microsoft yahei", Tahoma, Arial, Helvetica, sans-serif;
+}
+
+a {
+	text-decoration: none;
+	color: #454545;
+}
+
+a:link,a:visited { text-decoration: none;}
+
+a:hover,a:active {
+	text-decoration: none;
+	color: #336699;
+}
+
+a,img,button,input,textarea,li,span,div {
+	-webkit-tap-highlight-color: rgba(255, 255, 255, 0);
+}
+
+ul,ol {
+	list-style: none;
+	list-style-type: none;
+}
+
+input,textarea,select,button,file {
+	font-size: 0.26rem;
+}
+
+img {
+	border: 0;
+}
+
+.img {
+	display: block;
+}
+
+b {
+	font-size: bold;
+}
+
+.clear {
+	*zoom: 1;
+}
+
+.clear:before,
+.clear:after {
+	display: table;
+	content: "";
+	line-height: 0;
+}
+
+.clear:after {
+	clear: both;
+}
+
+.clear {
+	font-size: 0;
+	height: 0px;
+	overflow: hidden;
+	clear: both;
+}
+
+#full_screen {
+	position: absolute;
+	left: 0;
+	top: 0;
+	width: 100%;
+	height: 100%;
+	z-index: 9998;
+	background: rgba(0, 0, 0, 0.3);
+	display: block;
+}
+
+
+.alert-div{
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	width:6.30rem;
+	height: 4.80rem;
+	margin-top:-2.40rem;
+	margin-left:-3.15rem;
+	z-index:9999;
+
+	/*border:1px solid #999;*/
+}
+
+.alert-bg{
+	
+	width:6.3rem;
+	min-height: 2.98rem;
+	padding-top:1rem;
+	padding-bottom: 0.2rem;
+}
+#danzb{
+	background:url(../images/alert_bg.png?v=1) no-repeat;
+	background-size:6.3rem auto;
+	
+}
+#zhiqin{
+	background:url(../images/alert_bg2.png?v=1) no-repeat;
+	background-size:6.3rem auto;
+	
+}
+.alert-bg .alert-text{
+	width:4.6rem;
+	height:	0.35rem;
+	margin:0 auto;
+	margin-top:0.2rem;
+
+}
+
+.alert-bg .alert-text input{
+	border:none;
+	border-bottom: 1px solid #A1969A;
+	width:3rem;
+	background:none;
+}
+
+.alert-bg .alert-text span{
+	color:#BD1112;
+}
+
+.alert-bg .btn1{
+	width:2rem;
+	height: 0.56rem;
+	line-height: 0.56rem;
+	margin:0 auto;
+	display: block;
+	margin-top:0.2rem;
+	background: #BD1112;
+	color:#fff;
+	border-radius: 5px;
+	text-align: center;
+	cursor: pointer;
+}
+
+
+.close{
+	width:100%;
+	text-align: center;
+}
+
+.close img{
+	width:0.5rem;
+	height: 0.5rem;
+	margin:0 auto;
+	margin-top:0.6rem;
+}
+

+ 304 - 0
css/style.css

@@ -0,0 +1,304 @@
+BODY {
+  background: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0) 48%, rgba(255, 255, 255, 0.05) 50%, rgba(255, 255, 255, 0) 52%), -webkit-linear-gradient(135deg, rgba(255, 255, 255, 0) 48%, rgba(255, 255, 255, 0.05) 50%, rgba(255, 255, 255, 0) 52%);
+  background: linear-gradient(45deg, rgba(255, 255, 255, 0) 48%, rgba(255, 255, 255, 0.05) 50%, rgba(255, 255, 255, 0) 52%), linear-gradient(-45deg, rgba(255, 255, 255, 0) 48%, rgba(255, 255, 255, 0.05) 50%, rgba(255, 255, 255, 0) 52%);
+  -webkit-background-size: 1em 1em;
+  background-size: 1em 1em;
+  background-color: #000;
+}
+
+.l-wrapper {
+  position: absolute;
+  width: 300px;
+  height: 200px;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  margin: auto;
+  text-align: center;
+  z-index: 9999;
+}
+
+svg {
+  height: 60px;
+  width: 60px;
+  margin: 0 2em 2em;
+  overflow: visible;
+  /*   border: 1px solid red; */
+}
+
+.g-circles {
+  -webkit-transform: scale(0.9) translate(7px, 7px);
+  -ms-transform: scale(0.9) translate(7px, 7px);
+  transform: scale(0.9) translate(7px, 7px);
+}
+
+circle {
+  fill: #0e89fc;
+  fill-opacity: 0;
+  -webkit-animation: opacity 1.2s linear infinite;
+  animation: opacity 1.2s linear infinite;
+}
+circle:nth-child(12n + 1) {
+  -webkit-animation-delay: -0.1s;
+  animation-delay: -0.1s;
+}
+circle:nth-child(12n + 2) {
+  -webkit-animation-delay: -0.2s;
+  animation-delay: -0.2s;
+}
+circle:nth-child(12n + 3) {
+  -webkit-animation-delay: -0.3s;
+  animation-delay: -0.3s;
+}
+circle:nth-child(12n + 4) {
+  -webkit-animation-delay: -0.4s;
+  animation-delay: -0.4s;
+}
+circle:nth-child(12n + 5) {
+  -webkit-animation-delay: -0.5s;
+  animation-delay: -0.5s;
+}
+circle:nth-child(12n + 6) {
+  -webkit-animation-delay: -0.6s;
+  animation-delay: -0.6s;
+}
+circle:nth-child(12n + 7) {
+  -webkit-animation-delay: -0.7s;
+  animation-delay: -0.7s;
+}
+circle:nth-child(12n + 8) {
+  -webkit-animation-delay: -0.8s;
+  animation-delay: -0.8s;
+}
+circle:nth-child(12n + 9) {
+  -webkit-animation-delay: -0.9s;
+  animation-delay: -0.9s;
+}
+circle:nth-child(12n + 10) {
+  -webkit-animation-delay: -1s;
+  animation-delay: -1s;
+}
+circle:nth-child(12n + 11) {
+  -webkit-animation-delay: -1.1s;
+  animation-delay: -1.1s;
+}
+circle:nth-child(12n + 12) {
+  -webkit-animation-delay: -1.2s;
+  animation-delay: -1.2s;
+}
+
+.g-circles--v2 circle {
+  fill-opacity: 0;
+  stroke-opacity: 0;
+  stroke-width: 1;
+  stroke: yellowgreen;
+  -webkit-animation-name: opacity-stroke, colors, colors-stroke, transform-2;
+  animation-name: opacity-stroke, colors, colors-stroke, transform-2;
+}
+
+.g-circles--v3 circle {
+  fill-opacity: 1;
+  -webkit-animation-name: opacity, colors;
+  animation-name: opacity, colors;
+}
+
+.g-circles--v4 circle {
+  fill-opacity: 1;
+  fill: orange;
+  -webkit-transform-origin: 60px 60px;
+  -ms-transform-origin: 60px 60px;
+  transform-origin: 60px 60px;
+  -webkit-animation-name: opacity, colors-3, transform;
+  animation-name: opacity, colors-3, transform;
+}
+
+@-webkit-keyframes opacity {
+  3% {
+    fill-opacity: 1;
+  }
+
+  75% {
+    fill-opacity: 0;
+  }
+}
+
+@keyframes opacity {
+  3% {
+    fill-opacity: 1;
+  }
+
+  75% {
+    fill-opacity: 0;
+  }
+}
+@-webkit-keyframes opacity-stroke {
+  10% {
+    stroke-opacity: 1;
+  }
+
+  85% {
+    stroke-opacity: 0;
+  }
+}
+@keyframes opacity-stroke {
+  10% {
+    stroke-opacity: 1;
+  }
+
+  85% {
+    stroke-opacity: 0;
+  }
+}
+@-webkit-keyframes colors {
+  0% {
+    fill: yellowgreen;
+  }
+
+  10% {
+    fill: gold;
+  }
+
+  75% {
+    fill: crimson;
+  }
+}
+@keyframes colors {
+  0% {
+    fill: yellowgreen;
+  }
+
+  10% {
+    fill: gold;
+  }
+
+  75% {
+    fill: crimson;
+  }
+}
+@-webkit-keyframes colors-stroke {
+  0% {
+    stroke: yellowgreen;
+  }
+
+  10% {
+    stroke: gold;
+  }
+
+  75% {
+    stroke: crimson;
+  }
+}
+@keyframes colors-stroke {
+  0% {
+    stroke: yellowgreen;
+  }
+
+  10% {
+    stroke: gold;
+  }
+
+  75% {
+    stroke: crimson;
+  }
+}
+@-webkit-keyframes colors-2 {
+  0% {
+    fill: yellow;
+  }
+
+  50% {
+    fill: red;
+  }
+
+  65% {
+    fill: orangered;
+  }
+
+  95% {
+    fill: gold;
+  }
+}
+@keyframes colors-2 {
+  0% {
+    fill: yellow;
+  }
+
+  50% {
+    fill: red;
+  }
+
+  65% {
+    fill: orangered;
+  }
+
+  95% {
+    fill: gold;
+  }
+}
+@-webkit-keyframes colors-3 {
+  0% {
+    fill: yellowgreen;
+  }
+
+  50% {
+    fill: turquoise;
+  }
+
+  65% {
+    fill: yellow;
+  }
+
+  95% {
+    fill: orange;
+  }
+}
+@keyframes colors-3 {
+  0% {
+    fill: yellowgreen;
+  }
+
+  50% {
+    fill: turquoise;
+  }
+
+  65% {
+    fill: yellow;
+  }
+
+  95% {
+    fill: orange;
+  }
+}
+@-webkit-keyframes transform {
+  10% {
+    -webkit-transform: scale(0.75);
+    transform: scale(0.75);
+  }
+}
+@keyframes transform {
+  10% {
+    -webkit-transform: scale(0.75);
+    transform: scale(0.75);
+  }
+}
+@-webkit-keyframes transform-2 {
+  40% {
+    -webkit-transform: scale(0.85);
+    transform: scale(0.85);
+  }
+
+  60% {
+    stroke-width: 20;
+  }
+}
+@keyframes transform-2 {
+  40% {
+    -webkit-transform: scale(0.85);
+    transform: scale(0.85);
+  }
+
+  60% {
+    stroke-width: 20;
+  }
+}

BIN
images/close.png


BIN
images/cnicon.png


BIN
images/favicon.png


BIN
images/share.jpg


+ 291 - 0
index.html

@@ -0,0 +1,291 @@
+<!DOCTYPE html>
+<html>
+<head>
+	<title>点我,带你上港珠澳大桥</title>
+	<meta name="viewport" content="target-densitydpi=device-dpi, width=device-width, initial-scale=1.0,
+minimum-scale=1.0, maximum-scale=1.0, minimal-ui" />
+	<meta name="apple-mobile-web-app-capable" content="yes" />
+	<meta name="apple-mobile-web-app-status-bar-style" content="black" />
+	<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+	<meta http-equiv="x-ua-compatible" content="IE=edge"  />
+	<link rel="icon" type="image/png" sizes="32x32" href="images/favicon.png" class="keep">
+	<style>
+		@-ms-viewport { width:device-width; }
+		@media only screen and (min-device-width:800px) { html { overflow:hidden;  }  }
+		html { height:100%; }
+		body { height:100%; overflow:hidden; margin:0; padding:0; font-family:Arial, Helvetica, sans-serif; font-size:16px; color:#FF0000; background-color:#000000; }
+	</style>
+	
+	<script type="text/javascript" src="plugins/jquery-2.1.1.min.js"></script>
+	<script src="layer/layer.js"></script>
+	<link rel="stylesheet" href="css/alert.css" />
+	<link rel="stylesheet" href="css/style.css" media="screen" type="text/css" />
+
+</head>
+<body>
+<!-- <div class="button" onclick="track_mouse();" style=" position: fixed; z-index: 10; left: 0; top: 0; ">Track mouse position</div> <span id="mousepos" style="color: #000; padding-left:16px; font-family:monospace; position: fixed; z-index: 200; left: 200px; top: 50;"></span><br> -->
+<script src="tour.js"></script>
+<div id="pano" style="width:100%;height:100%;">
+
+	<div class="l-wrapper" id="loadid">
+
+	    <svg viewBox="0 0 120 120" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+
+	      <g id="circle" class="g-circles g-circles--v1">
+	          <circle id="12" transform="translate(35, 16.698730) rotate(-30) translate(-35, -16.698730) " cx="35" cy="16.6987298" r="10"></circle>
+	          <circle id="11" transform="translate(16.698730, 35) rotate(-60) translate(-16.698730, -35) " cx="16.6987298" cy="35" r="10"></circle>
+	          <circle id="10" transform="translate(10, 60) rotate(-90) translate(-10, -60) " cx="10" cy="60" r="10"></circle>
+	          
+	          <circle id="8" transform="translate(35, 103.301270) rotate(-150) translate(-35, -103.301270) " cx="35" cy="103.30127" r="10"></circle>
+	          <circle id="7" cx="60" cy="110" r="10"></circle>
+	          <circle id="6" transform="translate(85, 103.301270) rotate(-30) translate(-85, -103.301270) " cx="85" cy="103.30127" r="10"></circle>
+	          <circle id="5" transform="translate(103.301270, 85) rotate(-60) translate(-103.301270, -85) " cx="103.30127" cy="85" r="10"></circle>
+	          <circle id="4" transform="translate(110, 60) rotate(-90) translate(-110, -60) " cx="110" cy="60" r="10"></circle>
+	          <circle id="3" transform="translate(103.301270, 35) rotate(-120) translate(-103.301270, -35) " cx="103.30127" cy="35" r="10"></circle>
+	          <circle id="2" transform="translate(85, 16.698730) rotate(-150) translate(-85, -16.698730) " cx="85" cy="16.6987298" r="10"></circle>
+	          <circle id="1" cx="60" cy="10" r="10"></circle>
+	      </g>
+
+	      <use xlink:href="#circle" class="use"/>
+	  </svg>
+
+	  
+	  
+	</div>
+
+
+	<noscript><table style="width:100%;height:100%;"><tr style="vertical-align:middle;"><td><div style="text-align:center;">ERROR:<br/><br/>Javascript not activated<br/><br/></div></td></tr></table></noscript>
+	<script>
+		embedpano({swf:"tour.swf", xml:"tour.xml"+"?"+new Date().getTime(), target:"pano", html5:"auto",id:"krpanoSWFObject", initvars:{design:"default"}, passQueryParameters:true});
+		var krpano = document.getElementById("krpanoSWFObject");
+		
+		
+		
+	</script>
+
+
+<script src="plugins/jweixin-1.2.0.js"></script>
+<!-- <script src="nice-validator/jquery.validator.min.js"></script> -->
+<script src="common/adaptive.js"></script>
+	<script>
+
+		// window['adaptive'].desinWidth = 750;
+		// window['adaptive'].baseFont = 42;
+		// window['adaptive'].maxWidth = 1024;
+		// window['adaptive'].init();
+		
+		function direction() {
+			 if(window.orientation == 90 || window.orientation == -90 ) {
+//			    alert("横屏");
+		        return true;
+		    }else{
+		    	return false;
+		    }
+   		}
+		
+		function hsp(){
+		    if(direction()){
+			     window['adaptive'].desinWidth = 1334;
+			     window['adaptive'].baseFont = 18;
+			     window['adaptive'].maxWidth = 2048;
+			     window['adaptive'].init();
+		    }else{
+			     window['adaptive'].desinWidth = 750;
+			     window['adaptive'].baseFont = 18;
+			     window['adaptive'].maxWidth = 750;
+			     window['adaptive'].init();
+		    }
+		}
+		 
+		hsp();
+	    window.setInterval(function(){hsp()},500);
+
+		
+		$(".alert-div").hide();
+		$("#full_screen").hide();
+		$(document).ready(function(){
+			$(".close").bind("click",function(){
+				$("#full_screen").hide();
+				$(".alert-div").hide();
+			})
+			// rqstunm("https://baike.baidu.com/activity/liangjiahe/trace?callback=traceindex&type=index");
+		})
+
+		function loaded(bf){
+			$("#bfb").html(bf);
+		}
+
+		function showlay(id){
+			$("#full_screen").show();
+			$("#"+id).show();
+		}
+
+		function hidload(){
+			var target=document.getElementById("loadid");
+      		target.style.display="none";
+		}
+
+		function weixinShare() {
+		    g_weixinObj = {
+		        "lineLink" : window.location.href,
+		        "imgUrl" : "http://www.4dmodel.com/SpecialBigScene/ZGABridge/images/share.jpg",
+		        "desc" : "身临其境",
+		    }
+
+	        $.ajax({    
+	            url:'http://www.4dage.com/Weixin3/wechatconfig/jssdk', 
+	            type: "post",
+	            data : {
+	                'url' : location.href.split('#')[0]
+	            }, 
+	            dataType:"jsonp",     
+	            jsonpCallback:"success_jsonp",         
+	            success:function(data,textStatus){
+	                wx.config({
+	                    //debug : true,
+	                    appId : data.appId,
+	                    timestamp : data.timestamp,
+	                    nonceStr : data.nonceStr,
+	                    signature : data.signature,
+	                    jsApiList : [ 'checkJsApi', 'onMenuShareTimeline',
+	                            'onMenuShareAppMessage', 'onMenuShareQQ',
+	                            'onMenuShareWeibo', 'hideMenuItems',
+	                            'showMenuItems', 'hideAllNonBaseMenuItem',
+	                            'showAllNonBaseMenuItem', 'translateVoice',
+	                            'startRecord', 'stopRecord', 'onRecordEnd',
+	                            'playVoice', 'pauseVoice', 'stopVoice',
+	                            'uploadVoice', 'downloadVoice', 'chooseImage',
+	                            'previewImage', 'uploadImage', 'downloadImage',
+	                            'getNetworkType', 'openLocation', 'getLocation',
+	                            'hideOptionMenu', 'showOptionMenu', 'closeWindow',
+	                            'scanQRCode', 'chooseWXPay',
+	                            'openProductSpecificView', 'addCard', 'chooseCard',
+	                            'openCard' ]
+	                });
+	            },    
+	            error:function(XMLHttpRequest,textStatus,errorThrown){    
+	                console.log("jsonp.error:"+textStatus);    
+	            }    
+	         }); 
+	        
+	         var success_jsonp = function(json){
+	            console.log(json);
+	         };
+
+
+	        wx.ready(function(){ 
+	            // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行〿
+	            //对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中〿
+	            //分享到朋友圈 
+	            wx.onMenuShareTimeline({ 
+	            title: document.querySelector("head title").innerHTML, // 分享标题 
+	            link: g_weixinObj.lineLink, // 分享链接 
+	            imgUrl: g_weixinObj.imgUrl, // 分享图标 
+	            desc: g_weixinObj.desc
+	            }); 
+
+	            //获取“分享给朋友”按钮点击状态及自定义分享内容接叿
+	            wx.onMenuShareAppMessage({ 
+	            title: document.querySelector("head title").innerHTML, // 分享标题 
+	            desc: g_weixinObj.desc,  // 分享描述 
+	            link: g_weixinObj.lineLink, // 分享链接 
+	            imgUrl: g_weixinObj.imgUrl, // 分享图标 
+	            type: '', // 分享类型,music、video或link,不填默认为link 
+	            dataUrl: '' // 如果type是music或video,则要提供数据链接,默认为空 
+	            }); 
+	        });
+
+	        wx.onMenuShareWeibo({
+	            title: document.querySelector("head title").innerHTML, // 分享标题
+	            desc: g_weixinObj.desc, // 分享描述
+	            link: g_weixinObj.lineLink, // 分享链接
+	            imgUrl: g_weixinObj.imgUrl, // 分享图标
+	            success: function () { 
+	               // 用户确认分享后执行的回调函数
+	            },
+	            cancel: function () { 
+	                // 用户取消分享后执行的回调函数
+	            }
+	        });
+
+	        wx.onMenuShareQZone({
+	            title: document.querySelector("head title").innerHTML, // 分享标题
+	            desc: g_weixinObj.desc, // 分享描述
+	            link: g_weixinObj.lineLink, // 分享链接
+	            imgUrl: g_weixinObj.imgUrl, // 分享图标
+	            success: function () { 
+	               // 用户确认分享后执行的回调函数
+	            },
+	            cancel: function () { 
+	                // 用户取消分享后执行的回调函数
+	            }
+	        });
+
+	        wx.onMenuShareQQ({
+	            title: document.querySelector("head title").innerHTML, // 分享标题
+	            desc: g_weixinObj.desc, // 分享描述
+	            link: g_weixinObj.lineLink, // 分享链接
+	            imgUrl: g_weixinObj.imgUrl, // 分享图标
+	            success: function () { 
+	               // 用户确认分享后执行的回调函数
+	            },
+	            cancel: function () { 
+	               // 用户取消分享后执行的回调函数
+	            }
+	        });
+
+	        wx.error(function(res){ 
+	        // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名〿
+
+	        });
+		    
+		}
+		weixinShare();
+
+
+// var track_mouse_enabled = false;
+// 	var track_mouse_interval_id = null;
+	
+// 	function track_mouse_interval_callback()
+// 	{
+// 		var mx = krpano.get("mouse.x");
+// 		var my = krpano.get("mouse.y");
+// 		var pnt = krpano.screentosphere(mx,my);
+// 		var h = pnt.x;
+// 		var v = pnt.y;
+// 		document.getElementById("mousepos").innerHTML = 'x="' + mx + '" y="' + my + '" ath="' + h.toFixed(2) + '" atv="' + v.toFixed(2) + '"';
+// 	}
+	
+// 	function track_mouse()
+// 	{
+// 		if (krpano)
+// 		{
+// 			if (track_mouse_enabled == false)
+// 			{
+// 				// enable - call 60 times per second
+// 				track_mouse_interval_id = setInterval(track_mouse_interval_callback, 1000.0 / 60.0);
+				
+// 				track_mouse_enabled = true;
+// 			}
+// 			else
+// 			{
+// 				// disable
+// 				clearInterval(track_mouse_interval_id);
+// 				document.getElementById("mousepos").innerHTML = "";
+				
+// 				track_mouse_enabled = false;
+// 			}
+// 		}
+// 	}
+
+	</script>
+
+	<!-- <script src="https://wapbaike.baidu.com/operation/api/getwxsign?callback=weixin_callback"></script> -->
+	
+</div>
+<!-- <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
+<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
+<script src="plugins/weixin.js"></script> -->
+</body>
+</html>
+

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 2 - 0
layer/layer.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
layer/theme/default/layer.css


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 5 - 0
plugins/bingmaps.js


BIN
plugins/bingmaps.swf


+ 37 - 0
plugins/fps.xml

@@ -0,0 +1,37 @@
+<krpano>
+	
+	<!--
+		fps (frames per second) xml plugin
+		- this plugin shows the current average rendering frame-rate 
+		- krpano 1.18
+	-->
+	
+	<action name="fps_install" autorun="preinit">
+		delayedcall(1.0,
+			addlayer(fps_display);
+			set(layer[fps_display].keep, true);
+			set(layer[fps_display].align, 'lefttop');
+			if(device.mobile AND stagescale LT 1.0,
+				<!-- a larger font for mobiles -->
+				set(layer[fps_display].css, 'font-size:24px; color:#FFFFFF;');
+			  ,
+				<!-- and a smaller font for desktop and tablets -->
+				set(layer[fps_display].css, 'font-size:12px; color:#FFFFFF;');
+			  );
+			set(layer[fps_display].textshadow, 0.01);
+			set(layer[fps_display].background, false);
+			set(layer[fps_display].parent, STAGE);
+			set(layer[fps_display].enabled, false);
+			set(layer[fps_display].url, '%SWFPATH%/plugins/textfield.swf');
+			fps_update();
+		);
+	</action>
+	
+	<action name="fps_update">
+		copy(tmp, display.currentfps);
+		roundval(tmp);
+		txtadd(layer[fps_display].html, 'FPS: ', get(tmp));
+		delayedcall(0.5, fps_update());
+	</action>
+	
+</krpano>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 5 - 0
plugins/googlemaps.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 18 - 0
plugins/gyro.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 5 - 0
plugins/gyro2.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 4 - 0
plugins/jquery-2.1.1.min.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 1 - 0
plugins/jweixin-1.2.0.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 18 - 0
plugins/scrollarea.js


BIN
plugins/scrollarea.swf


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 5 - 0
plugins/soundinterface.js


BIN
plugins/soundinterface.swf


BIN
plugins/textfield.swf


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 5 - 0
plugins/videoplayer.js


BIN
plugins/videoplayer.swf


BIN
plugins/vtoureditor.swf


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 5 - 0
plugins/webvr.js


+ 732 - 0
plugins/webvr.xml

@@ -0,0 +1,732 @@
+<krpano>
+
+	<!-- load the WebVR plugin and assign it to a 'webvr' variable for easier usage -->
+	<plugin name="WebVR" devices="html5" keep="true"
+	        url="webvr.js"
+	        onloaded="copy(webvr, plugin[WebVR]);"
+	        mousespeed="0.00125"
+	        mobilevr_support="true"
+	        mobilevr_ipd="63.5"
+	        mobilevr_screensize="auto"
+	        mobilevr_lens_fov="96"
+	        mobilevr_lens_dist="0.6"
+	        mobilevr_lens_vign="100"
+	        mobilevr_lens_overlap="1.0"
+	        mobilevr_webvr_dist="false"
+	        mobilevr_sensor_mode="3"
+	        mobilevr_fake_support="false"
+	        vr_cursor="hotspot[vr_cursor]"
+	        vr_cursor_onover="if(handcursor, tween(hotspot[vr_cursor].scale,0.4,0.1); vr_auto_click(get(vr_timeout)); );"
+	        vr_cursor_onout="tween(hotspot[vr_cursor].scale,0.3,0.1);"
+	        onavailable="webvr_onavailable();"
+	        onunavailable=""
+	        onunknowndevice="set(ask_user_for_screensize,true);"
+	        onentervr="webvr_onentervr();"
+	        onexitvr="webvr_onexitvr();"
+	        />
+
+	
+	<!-- a custom xml data structure with the supported VR headsets -->
+	<vrheadsets>
+		<headset name="cb1" caption="Cardboard A"   fov="96.0"  dist="1.00" vig="100" overlap="1.1" />
+		<headset name="cb2" caption="Cardboard B"   fov="96.0"  dist="0.60" vig="100" overlap="1.0" />
+		<headset name="gvr" caption="GearVR"        fov="112.0" dist="0.95" vig="100" overlap="1.0" />
+		<headset name="one" caption="VR ONE"        fov="179.0" dist="5.00" vig="53"  overlap="1.0" />
+		<headset name="hom" caption="HOMiDO"        fov="101.0" dist="1.10" vig="70"  overlap="1.0" />
+		<headset name="ccr" caption="ColorCross VR" fov="70.0"  dist="0.65" vig="100" overlap="1.0" />
+	</vrheadsets>
+
+
+	<!-- the VR cursor hotspot -->
+	<hotspot name="vr_cursor" keep="true"
+	         url="webvr_cursor_80x80_17f.png"
+	         visible="false"
+	         enabled="false"
+	         distorted="true"
+	         crop="0|0|80|80"
+	         scale="0.3"
+	         depth="1000"
+	         />
+
+
+	<!-- vr_auto_click() - call this action in the onover event of a
+	     hotspot to trigger automatically a click after some time.  -->
+	<action name="vr_auto_click">
+		if(webvr.isenabled,
+			if(%1 != null, set(vr_aclk_timeout, %1), set(vr_aclk_timeout, 2000));
+			copy(vr_aclk_t1, timertick);
+			set(vr_aclk_waiting, true);
+			set(hotspot[vr_cursor].crop,'0|0|80|80');
+
+			asyncloop(vr_aclk_waiting,
+				sub(dt, timertick,vr_aclk_t1);
+
+				if(!hovering,
+					set(vr_aclk_waiting, false);
+					set(hotspot[vr_cursor].crop,'0|0|80|80');
+				  ,
+					div(f, dt, vr_aclk_timeout);
+					mul(f, 16);
+					roundval(f);
+					Math.min(f, 16);
+					mul(f, 80);
+
+					txtadd(hotspot[vr_cursor].crop,get(f),'|0|80|80');
+
+					<!-- wait another 100ms delay after finishing the animation before doing the click -->
+					sub(dt, 100);
+					if(dt GT vr_aclk_timeout,
+						set(vr_aclk_waiting,false);
+						set(hotspot[vr_cursor].crop,'0|0|80|80');
+						<!-- call onclick -->
+						onclick();
+					  );
+				  );
+				);
+		  );
+	</action>
+
+
+	<!-- by pressing SPACE the Oculus Rift could be re-centered -->
+	<events name="webvr_events" devices="html5" keep="true"
+	        onkeydown="if(keycode==32, webvr.resetSensor(0) );"
+	        onmousedown="if(webvr AND webvr.isenabled, webvr_showbuttons() );"
+	        />
+
+
+	<!-- when WebVR support is available show an EnterVR button loadsettings();-->
+	<action name="webvr_onavailable">
+		
+		delayedcall(0.5, tween(layer[webvr_enterbutton].alpha,1.0); );
+	</action>
+
+
+	<action name="webvr_onentervr">
+		tween(layer[webvr_enterbutton].alpha,0,0);
+
+		webvr_showbuttons();
+		webvr_hide_all_non_vr_layers();
+
+		<!-- when vr_setup(); the screen size is unknown an no custom size is set, open the setup screen on entering the VR mode -->
+		if(webvr.ismobilevr == true AND !webvr.isfake AND ask_user_for_screensize == true AND webvr.mobilevr_screensize == 'auto',
+			set(ask_user_for_screensize, false);
+			
+		  );
+	</action>
+
+
+	<action name="webvr_onexitvr">
+		stopdelayedcall(vr_button_fadeout);
+
+		tween(layer[webvr_enterbutton].alpha,1);
+		tween(layer[webvr_exitbutton].alpha,0);
+		tween(layer[webvr_setupbutton].alpha,0);
+
+		webvr_restore_layers();
+	</action>
+
+
+	<action name="webvr_hide_all_non_vr_layers">
+		for(set(i,0), i LT layer.count, inc(i),
+			copy(lr, layer[get(i)]);
+			if(lr.vr !== true,
+				copy(lr.vr_backup_visible, lr.visible);
+				set(lr.visible, false);
+			  );
+		  );
+	</action>
+
+	<action name="webvr_restore_layers">
+		for(set(i,0), i LT layer.count, inc(i),
+			copy(lr, layer[get(i)]);
+			if(lr.vr_backup_visible,
+				copy(lr.visible, lr.vr_backup_visible);
+				delete(lr.vr_backup_visible);
+			  );
+		  );
+	</action>
+	
+	
+	<!-- ensure the same scaling on mobiles (regardless if mobilescale is 0.5 or 1.0) -->
+	<krpano webvr_setup_scale="calc:(1.0 + 1.0*(device.mobile AND stagescale LT 1.0)) / (1.0 + 1.0*device.mobile)"
+	        webvr_button_scale.normal="1.0"
+	        webvr_button_scale.mobile="1.6"
+	        />
+
+	
+	<!-- the EnterVR/ExitVR and SetupVR buttons -->
+	<style name="webvr_button_style"
+	       url="%SWFPATH%/plugins/textfield.swf"
+	       backgroundcolor="0x000000"
+	       backgroundalpha="0.5"
+	       roundedge="calc:9*webvr_setup_scale*webvr_button_scale"
+	       css="calc:'color:#FFFFFF;font-size:' + 20*webvr_setup_scale*webvr_button_scale + 'px;'"
+	       padding="calc:6*webvr_setup_scale*webvr_button_scale + ' ' + 10*webvr_setup_scale*webvr_button_scale"
+	       />
+	
+	<layer name="webvr_enterbutton" keep="true" vr="true"
+	       style="webvr_button_style"
+	       html="启动 VR"
+	       align="top" y="24"
+	       autoalpha="true" alpha="0.0"
+	       onclick="webvr.enterVR();"
+	       />
+
+	<layer name="webvr_exitbutton" keep="true" vr="true"
+	       style="webvr_button_style"
+	       html="退出"
+	       align="top" y="24"
+	       autoalpha="true" alpha="0.0"
+	       onclick="webvr.exitVR();"
+	       />
+
+	<layer name="webvr_setupbutton" keep="true" vr="true"
+	       style="webvr_button_style"
+	       html="设置"
+	       align="bottom" y="24"
+	       autoalpha="true" alpha="0.0"
+	       onclick="vr_setup()"
+	       />
+
+
+	<action name="webvr_showbuttons">
+		stopdelayedcall(vr_button_fadeout);
+		if(webvr.ismobilevr,
+			tween(layer[webvr_exitbutton].alpha|layer[webvr_setupbutton].alpha, 1.0|1.0, 0.25);
+			
+		  ,
+			tween(layer[webvr_exitbutton].alpha, 1.0, 0.25);
+			
+		  );
+	</action>
+
+	<action name="webvr_showbuttons2">
+		stopdelayedcall(vr_button_fadeout);
+		if(webvr.ismobilevr,
+			tween(layer[webvr_exitbutton].alpha|layer[webvr_setupbutton].alpha, 1.0|1.0, 0.25);
+			delayedcall(vr_button_fadeout, 3.0, tween(layer[webvr_exitbutton].alpha|layer[webvr_setupbutton].alpha, 0.0|0.0, 1.0); );
+		  ,
+			tween(layer[webvr_exitbutton].alpha, 1.0, 0.25);
+			delayedcall(vr_button_fadeout, 3.0, tween(layer[webvr_exitbutton].alpha, 0.0, 1.0); );
+		  );
+	</action>
+
+
+
+	<!--
+		VR Setup
+	-->
+
+	<action name="vr_setup">
+		<!-- disable cursor -->
+		set(webvr.vr_cursor_enabled, false);
+		
+		<!-- hide VR buttons -->
+		tween(layer[webvr_exitbutton].alpha,0);
+		tween(layer[webvr_setupbutton].alpha,0);
+		
+		<!-- create background layer -->
+		addlayer(vr_setup_bg);
+		set(layer[vr_setup_bg].type, container);
+		set(layer[vr_setup_bg].bgcolor, 0x000000);
+		set(layer[vr_setup_bg].bgalpha, 0.5);
+		set(layer[vr_setup_bg].bgcapture, true);
+		set(layer[vr_setup_bg].handcursor, false);
+		set(layer[vr_setup_bg].align, lefttop);
+		set(layer[vr_setup_bg].width, 100%);
+		set(layer[vr_setup_bg].height, 100%);
+		set(layer[vr_setup_bg].zorder, 99999);
+		
+		<!-- get and prepare device infos and settings -->
+		copy(i_screensize, webvr.mobilevr_screensize);
+		if(i_screensize == 'auto', copy(i_screensize, webvr.devicesize));
+		if(i_screensize LE 0, set(i_screensize, 5.0));
+		roundval(i_screensize, 1);
+		txtadd(i_screensize, ' inch');
+
+		copy(i_ipd, webvr.mobilevr_ipd);
+		roundval(i_ipd, 1);
+		txtadd(i_ipd, ' mm');
+
+		copy(i_fov, webvr.mobilevr_lens_fov);
+		roundval(i_fov, 0);
+
+		copy(i_dist, webvr.mobilevr_lens_dist);
+		roundval(i_dist, 2);
+
+		copy(i_vig, webvr.mobilevr_lens_vign);
+		roundval(i_vig, 0);
+		
+		copy(i_overlap, webvr.mobilevr_lens_overlap);
+		roundval(i_overlap, 2);
+
+		set(i_headset, 'Custom');
+		for(set(i,0), i LT vrheadsets.headset.count, inc(i),
+			copy(hs, vrheadsets.headset[get(i)]);
+			if(i_fov == hs.fov AND i_dist == hs.dist AND i_vig == hs.vig AND i_overlap == hs.overlap, copy(i_headset, hs.caption));
+		   );
+
+		<!-- when the screen size is unknown, mark it red -->
+		set(known_size, true);
+		set(sizcol, #FFFFFF);
+		copy(i_devicename, webvr.devicename);
+		if(i_devicename == 'Unknown',
+			if(webvr.mobilevr_screensize == 'auto',
+				set(sizcol, #AA0000);
+				set(known_size, false);
+			  ,
+				set(i_devicename, 'Custom');
+			  );
+		  );
+
+		
+		<!-- create layer for the main menu -->
+		addlayer(vr_setup_m1);
+		set(layer[vr_setup_m1].type, container);
+		set(layer[vr_setup_m1].parent, vr_setup_bg);
+		set(layer[vr_setup_m1].align, lefttop);
+		set(layer[vr_setup_m1].width, 100%);
+		set(layer[vr_setup_m1].height, 100%);
+		
+		<!-- create layer for the headset customization menu -->
+		addlayer(vr_setup_m3);
+		set(layer[vr_setup_m3].type, container);
+		set(layer[vr_setup_m3].parent, vr_setup_bg);
+		set(layer[vr_setup_m3].align, lefttop);
+		set(layer[vr_setup_m3].width, 100%);
+		set(layer[vr_setup_m3].height, 100%);
+		set(layer[vr_setup_m3].visible, false);
+		
+		<!-- create layer for the calibration menu -->
+		addlayer(vr_setup_m2);
+		set(layer[vr_setup_m2].type, container);
+		set(layer[vr_setup_m2].parent, vr_setup_bg);
+		set(layer[vr_setup_m2].align, lefttop);
+		set(layer[vr_setup_m2].width, 100%);
+		set(layer[vr_setup_m2].height, 100%);
+		set(layer[vr_setup_m2].visible, false);
+		
+		<!-- create the text elements -->
+		set(vr_setup_text_parent, 'vr_setup_m1');
+		vr_setup_createtext(vr_setup_title, 'VR SETUP',       center, center, 0, -225, #FFFFFF,     false);
+
+		vr_setup_createtext(vr_setup_dvn1, 'Device:',         center, right,  0, -145, #FFFFFF,     true, vr_setup_select('screen') );
+		vr_setup_createtext(vr_setup_dvn2, get(i_devicename), center, left,   0, -145, get(sizcol), true, vr_setup_select('screen') );
+		vr_setup_createtext(vr_setup_siz1, 'Screensize:',     center, right,  0, -105, #FFFFFF,     true, vr_setup_select('screen') );
+		vr_setup_createtext(vr_setup_siz2, get(i_screensize), center, left,   0, -105, get(sizcol), true, vr_setup_select('screen') );
+
+		vr_setup_createtext(vr_setup_ipd1, 'IPD:',            center, right,  0,  -35, #FFFFFF,     true, vr_setup_select('ipd') );
+		vr_setup_createtext(vr_setup_ipd2, get(i_ipd),        center, left,   0,  -35, #FFFFFF,     true, vr_setup_select('ipd') );
+
+		vr_setup_createtext(vr_setup_hmd1, 'VR Headset:',     center, right,  0,  +35, #FFFFFF,     true, vr_setup_select('headset') );
+		vr_setup_createtext(vr_setup_hmd2, get(i_headset),    center, left,   0,  +35, #FFFFFF,     true, vr_setup_select('headset') );
+		
+		vr_setup_createtext(vr_setup_hmd3, 'Customize',       center, center, 0,  +75, #FFFFFF,     true, set(background,true), set(background,false), vr_setup_customize_headset() );
+
+		
+
+		if(webvr.iswebvr == false,
+			vr_setup_createtext(vr_setup_cal, 'Calibrate Gyroscope',   center, center,    0, +145, #FFFFFF,     true, set(background,true), set(background,false), vr_setup_calibration() );
+		  );
+
+		vr_setup_createtext(vr_setup_sav, 'SAVE',          center, center, -200, +225, #FFFFFF,     true, set(background,true), set(background,false), vr_setup_save() );
+		vr_setup_createtext(vr_setup_rst, 'RESET',         center, center,    0, +225, #FFFFFF,     true, set(background,true), set(background,false), vr_setup_reset() );
+		vr_setup_createtext(vr_setup_cls, 'CLOSE',         center, center, +200, +225, #FFFFFF,     true, set(background,true), set(background,false), vr_setup_close() );
+		
+		<!-- and the adjusting buttons -->
+		vr_setup_createbutton(vr_setup_btn1, '&#60;', left,  left,  5%, -35, #FFFFFF, true, null);
+		vr_setup_createbutton(vr_setup_btn2, '&#62;', right, right, 5%, -35, #FFFFFF, true, null);
+		
+		
+		<!-- create the customize_headset text elements -->
+		set(vr_setup_text_parent, 'vr_setup_m3');
+		vr_setup_createtext(vr_setup_m31, 'VR HEADSET', center, center, 0, -225, #FFFFFF, false);
+		
+		vr_setup_createtext(vr_setup_fov1,  'FOV:',           center, right,  0,  -42,  #FFFFFF,    true, vr_setup_select('fov') );
+		vr_setup_createtext(vr_setup_fov2, get(i_fov),        center, left,   0,  -42,  #FFFFFF,    true, vr_setup_select('fov') );
+		vr_setup_createtext(vr_setup_dst1, 'Distortion:',     center, right,  0,   +6,  #FFFFFF,    true, vr_setup_select('dist') );
+		vr_setup_createtext(vr_setup_dst2, get(i_dist),       center, left,   0,   +6,  #FFFFFF,    true, vr_setup_select('dist') );
+		vr_setup_createtext(vr_setup_vig1, 'Vignette:',       center, right,  0,  +54,  #FFFFFF,    true, vr_setup_select('vignette') );
+		vr_setup_createtext(vr_setup_vig2, get(i_vig),        center, left,   0,  +54,  #FFFFFF,    true, vr_setup_select('vignette') );
+		vr_setup_createtext(vr_setup_olp1, 'Overlap:',        center, right,  0, +102,  #FFFFFF,    true, vr_setup_select('overlap') );
+		vr_setup_createtext(vr_setup_olp2, get(i_overlap),    center, left,   0, +102,  #FFFFFF,    true, vr_setup_select('overlap') );
+				
+		vr_setup_createtext(vr_setup_m35, 'CLOSE',       center, center, 0, +225, #FFFFFF, true, set(background,true), set(background,false), vr_setup_close_sub_menus() );
+		
+		
+		<!-- create the calibration text elements -->
+		set(vr_setup_text_parent, 'vr_setup_m2');
+		vr_setup_createtext(vr_setup_cb1, 'GYROSCOPE', center, center, 0, -225, #FFFFFF, false);
+		vr_setup_createtext(vr_setup_cb2, 'Place the device on a flat and[br]stable surface and tab calibrate[br]to correct a gyroscope drifting.', center, center, 0, -95, #FFFFFF, false, vr_setup_select('screen') );
+		vr_setup_createtext(vr_setup_cb3, 'CALIBRATE',   center, center, 0,  +55, #FFFFFF, true, set(background,true), set(background,false), vr_setup_do_calibration() );
+		vr_setup_createtext(vr_setup_cb4, 'RESET',       center, center, 0, +125, #FFFFFF, true, set(background,true), set(background,false), webvr.resetcalibration() );
+		vr_setup_createtext(vr_setup_cb5, 'CLOSE',       center, center, 0, +225, #FFFFFF, true, set(background,true), set(background,false), vr_setup_close_sub_menus() );
+		
+		vr_setup_createtext(vr_setup_cb6, 'Calibrating...',      bottom, center, 0, 40, #FFFFFF, false, null );
+		vr_setup_createtext(vr_setup_cb7, 'Calibration okay.',   bottom, center, 0, 40, #FFFFFF, false, null );
+		vr_setup_createtext(vr_setup_cb8, 'Calibration failed!', bottom, center, 0, 40, #FFFFFF, false, null );
+		set(layer[vr_setup_cb6].autoalpha, true);
+		set(layer[vr_setup_cb7].autoalpha, true);
+		set(layer[vr_setup_cb8].autoalpha, true);
+		set(layer[vr_setup_cb6].alpha, 0.0);
+		set(layer[vr_setup_cb7].alpha, 0.0);
+		set(layer[vr_setup_cb8].alpha, 0.0);
+		
+		
+		<!-- pre-select the screen size for adjusting when it is unknown, otherwise the IPD -->
+		if(known_size == false,
+			vr_setup_select('screen', true);
+		  ,
+			vr_setup_select('ipd', true);
+		  );
+	</action>
+
+
+	<action name="vr_setup_createtext">
+		<!--
+			%1 = name
+			%2 = text
+			%3 = align
+			%4 = edge
+			%5 = x
+			%6 = y
+			%7 = color
+			%8 = enabled
+			%9 = ondown
+			%10 = onup
+			%11 = onclick
+		-->
+		addlayer(%1);
+		set(layer[%1].parent, get(vr_setup_text_parent));
+		set(layer[%1].url, '%SWFPATH%/plugins/textfield.swf');
+		set(layer[%1].css, calc('text-align:%3;color:%7;font-size:'+40*webvr_setup_scale+'px;font-weight:bold;'));
+		set(layer[%1].padding, calc(0 + ' ' + 8*webvr_setup_scale));
+		set(layer[%1].roundedge, calc(8*webvr_setup_scale));
+		set(layer[%1].background, false);
+		set(layer[%1].backgroundcolor, 0xFFFFFF);
+		set(layer[%1].backgroundalpha, 0.25);
+		set(layer[%1].align, %3);
+		set(layer[%1].edge, %4);
+		set(layer[%1].x, calc(%5 * webvr_setup_scale));
+		set(layer[%1].y, calc(%6 * webvr_setup_scale));
+		set(layer[%1].html, %2);
+		set(layer[%1].enabled, %8);
+		set(layer[%1].ondown, %9);
+		set(layer[%1].onup, %10);
+		set(layer[%1].onclick, %11);
+	</action>
+
+
+	<action name="vr_setup_createbutton">
+		vr_setup_createtext(%1,%2,%3,%4,%5,%6,%7,%8,%9);
+		set(layer[%1].css, calc('vertical-align:middle;text-align:center;color:%7;font-size:'+60*webvr_setup_scale+'px;font-weight:bold;'));
+		set(layer[%1].background, true);
+		set(layer[%1].padding, 0);
+		set(layer[%1].roundedge, calc(40 * webvr_setup_scale));
+		set(layer[%1].width, calc(70 * webvr_setup_scale));
+		set(layer[%1].height, calc(70 * webvr_setup_scale));
+		set(layer[%1].vcenter, true);
+	</action>
+
+
+	<action name="vr_setup_reset">
+		<!-- reset to the defaults -->
+		set(webvr.mobilevr_screensize, 'auto');
+		copy(i_screensize, webvr.devicesize);
+		if(i_screensize LE 0, set(i_screensize, 5.0));
+		roundval(i_screensize, 1);
+		set(layer[vr_setup_dvn2].html, get(webvr.devicename));
+		txtadd(layer[vr_setup_siz2].html, get(i_screensize), ' inch');
+
+		set(webvr.mobilevr_ipd, 63.5);
+		copy(i_ipd, webvr.mobilevr_ipd);
+		roundval(i_ipd, 1);
+		txtadd(layer[vr_setup_ipd2].html, get(i_ipd), ' mm');
+
+		<!-- set fake custom lens settings and call 'next' headset to switch to the default 'Cardboard' settings -->
+		set(webvr.mobilevr_lens_fov, 100);
+		set(webvr.mobilevr_lens_dist, 0.5);
+		set(webvr.mobilevr_lens_vign, 100);
+		set(webvr.mobilevr_lens_overlap, 1.0);
+		vr_setup_change_headset(+1);
+
+		vr_setup_select(get(selected_var));
+	</action>
+
+
+	<action name="vr_setup_close">
+		<!-- 2. parameter == true => remove children elements too -->
+		removelayer(vr_setup_bg, true);
+		
+		<!-- enable cursor -->
+		set(webvr.vr_cursor_enabled, true);
+	</action>
+
+	<!-- webvr.saveSettings(); -->
+	<action name="vr_setup_save">
+		
+		vr_setup_close();
+	</action>
+	
+	
+	<action name="vr_setup_customize_headset">
+		set(layer[vr_setup_m1].visible,false);
+		set(layer[vr_setup_m2].visible,false);
+		set(layer[vr_setup_m3].visible,true);
+		
+		set(layer[vr_setup_hmd1].parent, vr_setup_m3);
+		set(layer[vr_setup_hmd2].parent, vr_setup_m3);
+		set(layer[vr_setup_btn1].parent, vr_setup_m3);
+		set(layer[vr_setup_btn2].parent, vr_setup_m3);
+		
+		set(layer[vr_setup_hmd1].y, calc(-145 * webvr_setup_scale));
+		set(layer[vr_setup_hmd2].y, calc(-145 * webvr_setup_scale));
+		
+		copy(old_selection, selected_var);
+		vr_setup_select('headset');
+	</action>
+	
+	
+
+	<action name="vr_setup_calibration">
+		set(layer[vr_setup_m1].visible,false);
+		set(layer[vr_setup_m2].visible,true);
+	</action>
+	
+	<action name="vr_setup_close_sub_menus">
+		set(layer[vr_setup_m1].visible,true);
+		set(layer[vr_setup_m2].visible,false);
+		set(layer[vr_setup_m3].visible,false);
+		
+		set(layer[vr_setup_hmd1].parent, vr_setup_m1);
+		set(layer[vr_setup_hmd2].parent, vr_setup_m1);
+		set(layer[vr_setup_btn1].parent, vr_setup_m1);
+		set(layer[vr_setup_btn2].parent, vr_setup_m1);
+		
+		set(layer[vr_setup_hmd1].y, calc(+35 * webvr_setup_scale));
+		set(layer[vr_setup_hmd2].y, calc(+35 * webvr_setup_scale));
+		
+		if(old_selection,
+			vr_setup_select(get(old_selection));
+			delete(old_selection);
+		  );
+	</action>
+	
+	<action name="vr_setup_do_calibration">
+		if(!webvr.isfake,
+			tween(layer[vr_setup_cb6].alpha, 1.0, 0.1);
+			tween(layer[vr_setup_cb7].alpha, 0.0, 0.1);
+			tween(layer[vr_setup_cb8].alpha, 0.0, 0.1);
+			webvr.calibrate(
+				tween(layer[vr_setup_cb6].alpha, 0.0, 0.1);
+				tween(layer[vr_setup_cb7].alpha, 1.0, 0.1);
+				delayedcall(2.0, tween(layer[vr_setup_cb7].alpha, 0.0, 0.25) );
+			  ,
+				tween(layer[vr_setup_cb6].alpha, 0.0, 0.1);
+				tween(layer[vr_setup_cb8].alpha, 1.0, 0.1);
+				delayedcall(2.0, tween(layer[vr_setup_cb8].alpha, 0.0, 0.25) );
+			  );
+		  );
+	</action>
+
+
+	<action name="vr_setup_select">
+		<!-- select a setting for adjusting -->
+		set(layer[vr_setup_siz2].background, false);
+		set(layer[vr_setup_ipd2].background, false);
+		set(layer[vr_setup_hmd2].background, false);
+		set(layer[vr_setup_fov2].background, false);
+		set(layer[vr_setup_dst2].background, false);
+		set(layer[vr_setup_vig2].background, false);
+		set(layer[vr_setup_olp2].background, false);
+
+		set(selected_setting, null);
+		delete(selected_var_value);
+
+		set(layer[vr_setup_btn1].ondown, vr_setup_change_ondown(-1) );
+		set(layer[vr_setup_btn2].ondown, vr_setup_change_ondown(+1) );
+		set(selected_var_callback, null);
+
+		set(selected_var, %1);
+
+		if(selected_var == 'screen',
+			set(selected_setting,      vr_setup_siz2);
+			set(selected_var_name,     'webvr.mobilevr_screensize');
+			set(selected_var_postfix,  ' inch');
+			copy(selected_var_value,   get(selected_var_name));
+			if(selected_var_value == 'auto', copy(selected_var_value, webvr.devicesize));
+			if(selected_var_value LE 0, set(selected_var_value, 5.0));
+			set(selected_var_step,     0.1);
+			set(selected_var_min,      4);
+			set(selected_var_max,      10);
+			set(selected_var_round,    1);
+			set(selected_var_callback, vr_setup_change_screen() );
+		  );
+
+		if(selected_var == 'ipd',
+			set(selected_setting,      vr_setup_ipd2);
+			set(selected_var_name,     'webvr.mobilevr_ipd');
+			set(selected_var_postfix,  ' mm');
+			copy(selected_var_value,   get(selected_var_name));
+			set(selected_var_step,     0.1);
+			set(selected_var_min,      40);
+			set(selected_var_max,      80);
+			set(selected_var_round,    1);
+		  );
+
+		if(selected_var == 'headset',
+			set(selected_setting,      vr_setup_hmd2);
+			set(layer[vr_setup_btn1].ondown, vr_setup_change_headset(-1) );
+			set(layer[vr_setup_btn2].ondown, vr_setup_change_headset(+1) );
+		  );
+
+		if(selected_var == 'fov',
+			set(selected_setting,      vr_setup_fov2);
+			set(selected_var_name,     'webvr.mobilevr_lens_fov');
+			set(selected_var_postfix,  '');
+			copy(selected_var_value,   get(selected_var_name));
+			set(selected_var_step,     0.1);
+			set(selected_var_min,      40);
+			set(selected_var_max,      179);
+			set(selected_var_round,    1);
+			set(selected_var_callback, vr_setup_change_headset(0) );
+		  );
+
+		if(selected_var == 'dist',
+			set(selected_setting,      vr_setup_dst2);
+			set(selected_var_name,     'webvr.mobilevr_lens_dist');
+			set(selected_var_postfix,  '');
+			copy(selected_var_value,   get(selected_var_name));
+			set(selected_var_step,     0.01);
+			set(selected_var_min,      0);
+			set(selected_var_max,      5);
+			set(selected_var_round,    2);
+			set(selected_var_callback, vr_setup_change_headset(0) );
+		  );
+
+		if(selected_var == 'vignette',
+			set(selected_setting,      vr_setup_vig2);
+			set(selected_var_name,     'webvr.mobilevr_lens_vign');
+			set(selected_var_postfix,  '');
+			copy(selected_var_value,   get(selected_var_name));
+			set(selected_var_step,     1);
+			set(selected_var_min,      10);
+			set(selected_var_max,      200);
+			set(selected_var_round,    0);
+			set(selected_var_callback, vr_setup_change_headset(0) );
+		  );
+		  
+		if(selected_var == 'overlap',
+			set(selected_setting,      vr_setup_olp2);
+			set(selected_var_name,     'webvr.mobilevr_lens_overlap');
+			set(selected_var_postfix,  '');
+			copy(selected_var_value,   get(selected_var_name));
+			set(selected_var_step,     0.01);
+			set(selected_var_min,      0.5);
+			set(selected_var_max,      2.0);
+			set(selected_var_round,    2);
+			set(selected_var_callback, vr_setup_change_headset(0) );
+		  );
+
+		if(selected_setting != null,
+			set(layer[get(selected_setting)].background, true);
+			if(%2 == true,
+				set(layer[vr_setup_btn1].y, get(layer[get(selected_setting)].y));
+				set(layer[vr_setup_btn2].y, get(layer[get(selected_setting)].y));
+			  ,
+				tween(layer[vr_setup_btn1].y, get(layer[get(selected_setting)].y));
+				tween(layer[vr_setup_btn2].y, get(layer[get(selected_setting)].y));
+			  );
+		  );
+	</action>
+
+
+	<action name="vr_setup_change_screen">
+		set(layer[vr_setup_dvn2].html, 'Custom');
+		set(layer[vr_setup_dvn2].css, 'color:#FFFFFF;font-size:40px;font-weight:bold;');
+		set(layer[vr_setup_siz2].css, 'color:#FFFFFF;font-size:40px;font-weight:bold;');
+	</action>
+
+
+	<action name="vr_setup_change_ondown">
+		copy(t0,timertick);
+		set(t1,0);
+		asyncloop(pressed,
+			copy(t2,timertick);
+			sub(dt,t2,t1);
+			if(dt GT 100,
+				copy(t1,t2);
+				sub(dt,t1,t0);
+				div(dt,1000);
+				Math.max(dt,1);
+				mul(dt,%1);
+				vr_setup_adjust(get(dt));
+			  );
+		  );
+	</action>
+
+
+	<action name="vr_setup_adjust">
+		if(selected_setting != null,
+			mul(change, selected_var_step, %1);
+			add(selected_var_value, change);
+			Math.max(selected_var_value, selected_var_min);
+			Math.min(selected_var_value, selected_var_max);
+			roundval(selected_var_value, get(selected_var_round));
+			tween(get(selected_var_name), get(selected_var_value), 0.1);
+			txtadd(layer[get(selected_setting)].html, get(selected_var_value), get(selected_var_postfix));
+			if(selected_var_callback != null, selected_var_callback());
+		  );
+	</action>
+
+
+	<action name="vr_setup_change_headset">
+		set(i_headset, 'Custom');
+		if(%1 != 0,
+			copy(i_fov, webvr.mobilevr_lens_fov);
+			roundval(i_fov, 0);
+			copy(i_dist, webvr.mobilevr_lens_dist);
+			roundval(i_dist, 2);
+			copy(i_vig, webvr.mobilevr_lens_vign);
+			roundval(i_vig, 0);
+			copy(i_overlap, webvr.mobilevr_lens_overlap);
+			roundval(i_overlap, 2);
+			set(i_hsindex, -1);
+			copy(i_hscount, vrheadsets.headset.count);
+			for(set(i,0), i LT i_hscount, inc(i),
+				copy(hs, vrheadsets.headset[get(i)]);
+				if(i_fov == hs.fov AND i_dist == hs.dist AND i_vig == hs.vig AND i_overlap == hs.overlap, copy(i_hsindex, i); copy(i_headset, hs.caption); );
+			   );
+
+			if(%1 GT 0,
+				<!-- loop right -->
+				add(i_hsindex, 1);
+				if(i_hsindex GE i_hscount, set(i_hsindex,0));
+			  ,
+				<!-- loop left -->
+				sub(i_hsindex, 1);
+				if(i_hsindex LT 0, sub(i_hsindex,i_hscount,1));
+			  );
+
+			copy(hs, vrheadsets.headset[get(i_hsindex)]);
+			copy(i_headset, hs.caption);
+			copy(i_fov,     hs.fov);
+			copy(i_dist,    hs.dist);
+			copy(i_vig,     hs.vig);
+			copy(i_overlap, hs.overlap);
+		  );
+
+		copy(layer[vr_setup_hmd2].html, i_headset);
+		if(%1 != 0,
+			copy(webvr.mobilevr_lens_fov, i_fov);
+			copy(webvr.mobilevr_lens_dist, i_dist);
+			copy(webvr.mobilevr_lens_vign, i_vig);
+			copy(webvr.mobilevr_lens_overlap, i_overlap);
+			copy(layer[vr_setup_fov2].html, i_fov);
+			copy(layer[vr_setup_dst2].html, i_dist);
+			copy(layer[vr_setup_vig2].html, i_vig);
+			copy(layer[vr_setup_olp2].html, i_overlap);
+		  );
+	</action>
+
+</krpano>

BIN
plugins/webvr_cursor_80x80_17f.png


+ 117 - 0
plugins/weixin.js

@@ -0,0 +1,117 @@
+function jssdk() {
+	 $.ajax({    
+		url:'http://www.4dage.com/Weixin3/wechatconfig/jssdk', 
+		type: "post",
+		data : {
+			'url' : location.href.split('#')[0]
+		}, 
+		dataType:"jsonp",     
+		jsonpCallback:"success_jsonp",         
+		success:function(data,textStatus){
+			wx.config({
+				debug : false,
+				appId : data.appId,
+				timestamp : data.timestamp,
+				nonceStr : data.nonceStr,
+				signature : data.signature,
+				jsApiList : [ 'checkJsApi', 'onMenuShareTimeline',
+						'onMenuShareAppMessage', 'onMenuShareQQ',
+						'onMenuShareWeibo', 'hideMenuItems',
+						'showMenuItems', 'hideAllNonBaseMenuItem',
+						'showAllNonBaseMenuItem', 'translateVoice',
+						'startRecord', 'stopRecord', 'onRecordEnd',
+						'playVoice', 'pauseVoice', 'stopVoice',
+						'uploadVoice', 'downloadVoice', 'chooseImage',
+						'previewImage', 'uploadImage', 'downloadImage',
+						'getNetworkType', 'openLocation', 'getLocation',
+						'hideOptionMenu', 'showOptionMenu', 'closeWindow',
+						'scanQRCode', 'chooseWXPay',
+						'openProductSpecificView', 'addCard', 'chooseCard',
+						'openCard' ]
+			});
+		},    
+		error:function(XMLHttpRequest,textStatus,errorThrown){    
+			//console.log("jsonp.error:"+textStatus);    
+		}    
+	 }); 
+	
+	 var success_jsonp = function(json){
+		//console.log(json);
+	 };
+}
+jssdk();
+//var lineLink = window.location.href;
+// var imgUrl = 'http://www.4dage.com/overview/images/yuhai/Flogo.jpg';
+//imgUrl = 'http://scene3d.4dage.com/images/images'+window.number+'/thumbSmallImg.jpg';
+//var desc = '四维看看';
+//var title = '四维看看';
+var lineLink = window.location.href;
+// var desc = '钰海国际样板房';
+
+wx.ready(function(){ 
+
+		// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行〿
+		//对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中〿
+		//分享到朋友圈 
+		wx.onMenuShareTimeline({ 
+		title: titleObj.tltleWenxin, // 分享标题 
+		link: lineLink, // 分享链接 
+		imgUrl: titleObj.imgUrl, // 分享图标 
+		desc: titleObj["descWenxin"]
+		}); 
+
+		//获取“分享给朋友”按钮点击状态及自定义分享内容接叿
+		wx.onMenuShareAppMessage({ 
+		title: titleObj.tltleWenxin, // 分享标题 
+		desc: titleObj["descWenxin"],  // 分享描述 
+		link: lineLink, // 分享链接 
+		imgUrl: titleObj.imgUrl, // 分享图标 
+		type: '', // 分享类型,music、video或link,不填默认为link 
+		dataUrl: '' // 如果type是music或video,则要提供数据链接,默认为空 
+		}); 
+});
+
+
+wx.onMenuShareWeibo({
+	title: titleObj.tltleWenxin, // 分享标题
+	desc: titleObj["descWenxin"], // 分享描述
+	link: lineLink, // 分享链接
+	imgUrl: titleObj.imgUrl, // 分享图标
+	success: function () { 
+	   // 用户确认分享后执行的回调函数
+	},
+	cancel: function () { 
+		// 用户取消分享后执行的回调函数
+	}
+});
+
+wx.onMenuShareQZone({
+	title: titleObj.tltleWenxin, // 分享标题
+	desc: titleObj["descWenxin"], // 分享描述
+	link: lineLink, // 分享链接
+	imgUrl: titleObj.imgUrl, // 分享图标
+	success: function () { 
+	   // 用户确认分享后执行的回调函数
+	},
+	cancel: function () { 
+		// 用户取消分享后执行的回调函数
+	}
+});
+
+wx.onMenuShareQQ({
+	title: titleObj.tltleWenxin, // 分享标题
+	desc: titleObj["descWenxin"], // 分享描述
+	link: lineLink, // 分享链接
+	imgUrl: titleObj.imgUrl, // 分享图标
+	success: function () { 
+	   // 用户确认分享后执行的回调函数
+	},
+	cancel: function () { 
+	   // 用户取消分享后执行的回调函数
+	}
+});
+
+wx.error(function(res){ 
+// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名〿
+
+});

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 14 - 0
tour.js


BIN
tour.swf


+ 411 - 0
tour.xml

@@ -0,0 +1,411 @@
+<krpano  idletime="3" showerrors="false" onstart="skin_showthumbs(false);loadscene(scene_01);">
+
+	<!-- <include url="skin/vtourskin.xml" /> -->
+	<include url="code/ui.xml"/>
+	<include url="code/tools.xml"/>
+	<include url="code/thumbs.xml"/>
+	<!-- 插入平面视屏 -->
+	<include url="youtube-player.xml" />
+	<!-- <include url="edit/edit.xml"/> -->
+
+	
+    
+   
+
+
+	<action name="enter">
+		closelayer(homecn);
+		closelayer(homeen);
+		
+		if(%1 == en, 
+			set(isen,true);
+			set(skin_settings.thumbscc,flase);
+			skin_startup();
+			initsceneinfo();
+			set(layer[btn5].visible,false);
+			set(layer[btn6].visible,false);
+			set(layer[mbtn4].visible,false);
+			set(layer[mbtn5].visible,false);
+			playsound('https://bigscene.4dage.com/panorama/sound/001.mp3');autosp();pausesound(bgm);pausesound(sp);
+			loadscene(scene_01,,,BLEND(1.0, easeInCubic));
+				resumesound(bgm);autosp(true);
+				set(layer[home].visible,false);
+				startview();
+				
+			,
+
+
+			playsound('https://bigscene.4dage.com/panorama/sound/001.mp3');autosp();pausesound(bgm);pausesound(sp);
+			loadscene(scene_01,,,BLEND(1.0, easeInCubic));
+				resumesound(bgm);autosp(true);
+				set(layer[home].visible,false);
+				startview();
+
+		);
+		
+	
+	</action>
+	<action name="entervr">
+		
+		playsound('https://bigscene.4dage.com/panorama/sound/001.mp3');
+		autosp();
+		
+		set(hopenvr,true);
+		
+	</action>
+
+
+	<style name="inscene_style" url="img/bigspot.png" scale="0.5" scale.mobile="0.8" edge="bottom" distorted="false"
+		       tooltip=""  onloaded="addhottip" 
+		       onclick2="lookto(get(hotspot[get(name)].ath),0,50,linear(50),,,
+		       	loadscene(get(linkedscene),,MERGE,OPENBLEND(1.0, 0.0, 0.2, 0.0, linear));skin_updatescroll();
+		       	);"
+			   onclick="openlayer(inpano);inpano_animate()"
+
+		       	/>
+
+	<action name="switchscene">
+		set(inscene,%1);
+		skin_view_littleplanet();
+		delayedcall(1,
+		loadscene(scene_01, null, KEEPALL, BLEND(1));
+		);
+
+	</action>
+	
+	<action name="switchscene2">
+		skin_view_normal();
+		lookto(get(hotspot[get(inscene)].ath),get(hotspot[get(inscene)].atv),50,linear(50),,,
+		       	loadscene(get(inscene),,MERGE,OPENBLEND(1.0, 0.0, 0.2, 0.0, linear));skin_updatescroll();
+		       	set(inscene,false);
+		       	);"
+	</action>
+
+	<action name="loadIframe">
+		iframe_embed(iframesrc,iframelayer,%1);
+	</action>
+	
+
+<control mousetype="drag2d" />
+		
+		<preview type="grid();" />
+
+
+		<action name="iframe_embed">
+		    removelayer(%1);
+		    addlayer(%1);
+		    set(layer[%1].parent, %2);
+		    set(layer[%1].align, lefttop);
+		    set(layer[%1].width, 100%);
+		    set(layer[%1].height, 100%);
+
+		    if(device.html5,
+		        txtadd(iframecode, '[iframe  id="krpano_iframe_',%1,'" width="100%" height="100%" src="',%3,'" frameborder="0" allow-same-origin allowfullscreen][/iframe]');
+		        copy(layer[%1].html, iframecode);
+		        set(layer[%1].padding, 0);
+		        set(layer[%1].url, 'textfield.swf');
+		        set(layer[%1].interactivecontent, true);
+		        set(layer[%1].onloaded, iframe_resize(%1); );
+		        set(layer[%2].visible,true);
+		    ,
+		        showlog();
+		        trace(error,'iframe无法在Flash下运行!');
+		    );
+		</action>
+
+		<action name="iframe_resize" type="Javascript" devices="html5"><![CDATA[
+		    document.querySelector("#krpano_iframe_"+args[1]).parentNode.style.height="100%";
+		]]></action>
+	
+
+	<scene name="scene_02" title="珠澳口岸人工岛" etitle="No.1 Former Residence" gid="1"  onstart="" thumburl="https://bigscene.4dage.com/panorama/panos/02.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="156" vlookat="20" fovtype="MFOV" fov="100" maxpixelzoom="2.0" fovmin="70" fovmax="110" limitview="auto" />
+
+		<preview url="https://bigscene.4dage.com/panorama/panos/02.tiles/preview.jpg" />
+
+		<image type="CUBE" multires="true" tilesize="512">
+			<level tiledimagewidth="5376" tiledimageheight="5376">
+				<cube url="https://bigscene.4dage.com/panorama/panos/02.tiles/%s/l4/%v/l4_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="2688" tiledimageheight="2688">
+				<cube url="https://bigscene.4dage.com/panorama/panos/02.tiles/%s/l3/%v/l3_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="1280" tiledimageheight="1280">
+				<cube url="https://bigscene.4dage.com/panorama/panos/02.tiles/%s/l2/%v/l2_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="640" tiledimageheight="640">
+				<cube url="https://bigscene.4dage.com/panorama/panos/02.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+		<hotspot name="scene_KA" style="hp2_hotspotstyle" ath="155" atv="35" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_KA.png" />
+		<hotspot name="scene_01" style="hp2_hotspotstyle" ath="-84" atv="17" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_01.png" />
+		<hotspot name="scene_01" style="hp2_hotspotstyle" ath="-84" atv="17" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_01.png" />
+		<hotspot name="spot1_1" style="small_hotspotstyle"  title="澳门"  ath="158" atv="1.4" />
+		<hotspot name="spot1_2" style="small_hotspotstyle"  title="珠海"  ath="-166" atv="0.44" />
+		<hotspot name="spot1_3" style="small_hotspotstyle"  title="港珠澳大桥珠海连接线"  ath="178" atv="4.7" />
+
+	</scene>
+
+	<scene name="scene_01" title="港珠澳大桥" gid="2" sp="" onstart="if(inscene,delayedcall(2,switchscene2))" thumburl="https://bigscene.4dage.com/panorama/panos/01.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="-104" vlookat="26" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="110" limitview="auto" />
+
+		<preview url="https://bigscene.4dage.com/panorama/panos/01.tiles/preview.jpg" />
+
+		<image type="CUBE" multires="true" tilesize="512">
+			<level tiledimagewidth="5376" tiledimageheight="5376">
+				<cube url="https://bigscene.4dage.com/panorama/panos/01.tiles/%s/l4/%v/l4_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="2688" tiledimageheight="2688">
+				<cube url="https://bigscene.4dage.com/panorama/panos/01.tiles/%s/l3/%v/l3_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="1280" tiledimageheight="1280">
+				<cube url="https://bigscene.4dage.com/panorama/panos/01.tiles/%s/l2/%v/l2_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="640" tiledimageheight="640">
+				<cube url="https://bigscene.4dage.com/panorama/panos/01.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+		<events onviewchange="if(view.fov LT 80,set(view.fov,80))" onloadcomplete="if(hopenvr,webvr.enterVR();loadscene(scene_01,,,BLEND(1.0, easeInCubic));set(hopenvr,false))"/>
+
+		<!-- place your scene hotspots here  hp_hotspotstyle-->
+		<hotspot name="scene_SFZ" style="hp2_hotspotstyle" ath="-104" atv="58" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_SFZ.png" />
+		<hotspot name="scene_02" style="hp2_hotspotstyle" ath="66" atv="7" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_KA-2.png" />
+		<!-- <hotspot name="scene_FFQ" style="hp2_hotspotstyle" ath="-102" atv="13" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_SCDF.png"  onclick="youtubeplayer_open('http://www.4dmodel.com/SpecialBigScene/ZGABridge/media/video.html?m=FF')"/> -->
+
+		<hotspot name="scene_03" style="hp2_hotspotstyle" ath="-103" atv="2" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_FFQ-2.png" />
+
+		<hotspot name="spot2_1" style="small_hotspotstyle"  title="澳门"  ath="96" atv="-0.7" />
+		<hotspot name="spot1_2" style="small_hotspotstyle"  title="珠海"  ath="140" atv="-1.1" />
+		<hotspot name="spot1_3" style="small_hotspotstyle"  title="港珠澳大桥珠海连接线"  ath="120" atv="2" />
+
+
+	</scene>
+
+
+
+
+		
+	<scene name="scene_03" title="九洲航道桥" etitle="No.2 Former Residence" gid="3" isar="true" sp="" onstart="" thumburl="https://bigscene.4dage.com/panorama/panos/03.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="230" vlookat="10" fovtype="MFOV" fov="100" maxpixelzoom="2.0" fovmin="70" fovmax="100" limitview="auto" />
+
+		<preview url="https://bigscene.4dage.com/panorama/panos/03.tiles/preview.jpg" />
+
+		<image type="CUBE" multires="true" tilesize="512">
+			<level tiledimagewidth="5376" tiledimageheight="5376">
+				<cube url="https://bigscene.4dage.com/panorama/panos/03.tiles/%s/l4/%v/l4_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="2688" tiledimageheight="2688">
+				<cube url="https://bigscene.4dage.com/panorama/panos/03.tiles/%s/l3/%v/l3_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="1280" tiledimageheight="1280">
+				<cube url="https://bigscene.4dage.com/panorama/panos/03.tiles/%s/l2/%v/l2_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="640" tiledimageheight="640">
+				<cube url="https://bigscene.4dage.com/panorama/panos/03.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+
+		<hotspot name="scene_01" style="hp2_hotspotstyle" ath="52.4" atv="4" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_01.png" />
+		<!-- <hotspot name="scene_HT" style="hp2_hotspotstyle" ath="-128" atv="15" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_SCDF.png" onclick="youtubeplayer_open('http://www.4dmodel.com/SpecialBigScene/ZGABridge/media/video.html?m=HT')"  /> -->
+		<hotspot name="scene_FFQ" style="hp2_hotspotstyle"  ath="-123" atv="39" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_SQZZ.png" onclick=" loadIframe('http://www.4dkankan.com/show.html?m=Jy9WSRgX')" />
+		<hotspot name="scene_04" style="hp2_hotspotstyle" ath="-126.8" atv="2.28" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_HT-2.png"   />
+
+		<!-- <hotspot name="spot1_1" style="small_hotspotstyle"  title="澳门"  ath="71.22" atv="-0.33" /> -->
+		<hotspot name="spot1_2" style="small_hotspotstyle"  title="珠海"  ath="97.7" atv="-0.5" />
+		<hotspot name="spot1_3" style="small_hotspotstyle"  title="港珠澳大桥珠海连接线"  ath="73.33" atv="2" />	
+		<hotspot name="spot1_4" style="small_hotspotstyle"  title="风帆造型桥塔"  ath="-127" atv="23" />		
+
+	</scene>
+
+		<scene name="scene_04" title="江海直达船航道桥" etitle="No.2 Former Residence" gid="4" isar="true" sp="" onstart="" thumburl="https://bigscene.4dage.com/panorama/panos/04.tiles/thumb.jpg" lat="" lng="" heading="">
+
+			<view hlookat="200" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="120" limitview="auto" />
+
+		<preview url="https://bigscene.4dage.com/panorama/panos/04.tiles/preview.jpg" />
+
+		<image type="CUBE" multires="true" tilesize="512">
+			<level tiledimagewidth="5376" tiledimageheight="5376">
+				<cube url="https://bigscene.4dage.com/panorama/panos/04.tiles/%s/l4/%v/l4_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="2688" tiledimageheight="2688">
+				<cube url="https://bigscene.4dage.com/panorama/panos/04.tiles/%s/l3/%v/l3_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="1280" tiledimageheight="1280">
+				<cube url="https://bigscene.4dage.com/panorama/panos/04.tiles/%s/l2/%v/l2_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="640" tiledimageheight="640">
+				<cube url="https://bigscene.4dage.com/panorama/panos/04.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+
+		<hotspot name="scene_HT" style="hp2_hotspotstyle"  ath="-145" atv="39" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_SQZZ.png" onclick=" loadIframe('http://www.4dkankan.com/show.html?m=aa4dwQxv')" />
+		<hotspot name="scene_03" style="hp2_hotspotstyle" ath="24.6" atv="0.14" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_FFQ-2.png" />
+		<hotspot name="scene_05" style="hp2_hotspotstyle" ath="-155" atv="0.42" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_ZGJ-2.png"  />
+
+		<hotspot name="spot1_3" style="small_hotspotstyle"  title="珠海"  ath="60.6" atv="-1" />	
+		<hotspot name="spot1_4" style="small_hotspotstyle"  title="海豚造型桥塔"  ath="-147" atv="11" />	
+	
+	</scene>
+
+	<scene name="scene_05" title="青州航道桥" onstart="" gid="5" isar="true" sp="" thumburl="https://bigscene.4dage.com/panorama/panos/05.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="170" vlookat="20" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="120" limitview="auto" />
+
+		<preview url="https://bigscene.4dage.com/panorama/panos/05.tiles/preview.jpg" />
+
+		<image type="CUBE" multires="true" tilesize="512">
+			<level tiledimagewidth="5376" tiledimageheight="5376">
+				<cube url="https://bigscene.4dage.com/panorama/panos/05.tiles/%s/l4/%v/l4_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="2688" tiledimageheight="2688">
+				<cube url="https://bigscene.4dage.com/panorama/panos/05.tiles/%s/l3/%v/l3_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="1280" tiledimageheight="1280">
+				<cube url="https://bigscene.4dage.com/panorama/panos/05.tiles/%s/l2/%v/l2_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="640" tiledimageheight="640">
+				<cube url="https://bigscene.4dage.com/panorama/panos/05.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+
+		<hotspot name="scene_ZGJ" style="hp2_hotspotstyle"  ath="168" atv="63" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_SQZZ.png" onclick=" loadIframe('http://www.4dkankan.com/show.html?m=OZKR8ziA')" />
+		<!-- <hotspot name="scene_HT" style="hp2_hotspotstyle" ath="-12" atv="21" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_SCDF.png" onclick="youtubeplayer_open('http://www.4dmodel.com/SpecialBigScene/ZGABridge/media/video.html?m=ZGJ');"  /> -->
+		<hotspot name="scene_04" style="hp2_hotspotstyle" ath="-37.2" atv="0.95" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_HT-2.png"   />
+		<hotspot name="scene_06" style="hp2_hotspotstyle" ath="170" atv="2.4" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_XRGD.png"  />
+
+		<hotspot name="spot1_3" style="small_hotspotstyle"  title="伶仃洋"  ath="-157" atv="16" />	
+		<hotspot name="spot1_4" style="small_hotspotstyle"  title="中国结造型桥塔"  ath="170" atv="28" />	
+
+	</scene>
+
+	<scene name="scene_06" title="西人工岛" onstart="" gid="6" isar="true" sp="" thumburl="https://bigscene.4dage.com/panorama/panos/06.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="-10" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="120" limitview="auto" />
+
+		<preview url="https://bigscene.4dage.com/panorama/panos/06.tiles/preview.jpg" />
+
+		<image type="CUBE" multires="true" tilesize="512">
+			<level tiledimagewidth="5376" tiledimageheight="5376">
+				<cube url="https://bigscene.4dage.com/panorama/panos/06.tiles/%s/l4/%v/l4_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="2688" tiledimageheight="2688">
+				<cube url="https://bigscene.4dage.com/panorama/panos/06.tiles/%s/l3/%v/l3_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="1280" tiledimageheight="1280">
+				<cube url="https://bigscene.4dage.com/panorama/panos/06.tiles/%s/l2/%v/l2_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="640" tiledimageheight="640">
+				<cube url="https://bigscene.4dage.com/panorama/panos/06.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+
+		<hotspot name="scene_05" style="hp2_hotspotstyle" ath="170" atv="0.05" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_ZGJ-2.png" />
+		<hotspot name="scene_DRGD" style="hp2_hotspotstyle" ath="-10.5" atv="31" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_CY.png" onclick="youtubeplayer_open('https://bigscene.4dage.com/panorama/media/video.html?m=HD');"  />
+		<hotspot name="scene_07" style="hp2_hotspotstyle" ath="-10.5" atv="-1.3" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_DRGD.png"   />
+
+		<hotspot name="spot1_3" style="small_hotspotstyle"  title="香港"  ath="26" atv="-2.2" />	
+		<hotspot name="spot1_4" style="small_hotspotstyle"  title="海底隧道入口"  ath="-10" atv="58" />	
+		<hotspot name="spot1_5" style="small_hotspotstyle"  title="海底隧道"  ath="-10" atv="6.69"/>	
+
+	</scene>
+
+
+		<scene name="scene_07" title="东人工岛" onstart="" gid="7" isar="true" sp="" thumburl="https://bigscene.4dage.com/panorama/panos/07.tiles/thumb.jpg" lat="" lng="" heading="">
+
+			<view hlookat="-10" vlookat="20" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="120" limitview="auto" />
+
+		<preview url="https://bigscene.4dage.com/panorama/panos/07.tiles/preview.jpg" />
+
+		<image type="CUBE" multires="true" tilesize="512">
+			<level tiledimagewidth="5376" tiledimageheight="5376">
+				<cube url="https://bigscene.4dage.com/panorama/panos/07.tiles/%s/l4/%v/l4_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="2688" tiledimageheight="2688">
+				<cube url="https://bigscene.4dage.com/panorama/panos/07.tiles/%s/l3/%v/l3_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="1280" tiledimageheight="1280">
+				<cube url="https://bigscene.4dage.com/panorama/panos/07.tiles/%s/l2/%v/l2_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="640" tiledimageheight="640">
+				<cube url="https://bigscene.4dage.com/panorama/panos/07.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+
+		<hotspot name="scene_RGD" style="hp2_hotspotstyle" ath="166" atv="45" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_SDZZ.png" />
+		<hotspot name="scene_06" style="hp2_hotspotstyle" ath="168" atv="0.45" url="https://bigscene.4dage.com/panorama//img/hotspot/scene_XRGD.png"  />
+
+			<hotspot name="spot1_3" style="small_hotspotstyle"  title="香港"  ath="20.39" atv="-4" />	
+		<hotspot name="spot1_4" style="small_hotspotstyle"  title="海底隧道入口"  ath="-8" atv="27" />	
+		<hotspot name="spot1_5" style="small_hotspotstyle"  title="港珠澳大桥香港连接线"  ath="-1.5" atv="1.4"/>
+		<hotspot name="spot1_6" style="small_hotspotstyle"  title="海底隧道"  ath="168.8" atv="13.7"/>
+		
+	</scene>
+
+		<scene name="scene_SFZ" title="收费站入口" etitle="No.2 Former Residence" gid="8" isar="true" sp="" onstart="" thumburl="https://bigscene.4dage.com/panorama/panos/SFZ.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="0.0" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="120" limitview="auto" />
+
+		<preview url="https://bigscene.4dage.com/panorama/panos/SFZ.tiles/preview.jpg" />
+
+		<image type="CUBE" prealign="0|0.0|0" multires="true" tilesize="512">
+			<level tiledimagewidth="1024" tiledimageheight="1024">
+				<cube url="https://bigscene.4dage.com/panorama/panos/SFZ.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+	
+	</scene>
+
+	<scene name="scene_RGD" title="上岛走走" etitle="No.3 Former Residence" gid="9" sp="" onstart="" thumburl="https://bigscene.4dage.com/panorama/panos/RGD.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="0.0" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="120" limitview="auto" />
+
+		<preview url="https://bigscene.4dage.com/panorama/panos/RGD.tiles/preview.jpg" />
+		
+		<image type="CUBE" prealign="0|0.0|0" multires="true" tilesize="512">
+			<level tiledimagewidth="1024" tiledimageheight="1024">
+				<cube url="https://bigscene.4dage.com/panorama/panos/RGD.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+
+	</scene>
+
+	<scene name="scene_KA" title="口岸入口"   onstart="" gid="10" sp="" thumburl="https://bigscene.4dage.com/panorama/panos/KA.tiles/thumb.jpg" lat="22.27285600" lng="113.54413200"  heading="0.0">
+
+		<view hlookat="0.0" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="120" limitview="auto" />
+
+		<preview url="https://bigscene.4dage.com/panorama/panos/KA.tiles/preview.jpg" />
+
+		<image type="CUBE" prealign="0|0.0|0" multires="true" tilesize="512">
+			<level tiledimagewidth="1024" tiledimageheight="1024">
+				<cube url="https://bigscene.4dage.com/panorama/panos/KA.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+		
+	</scene>
+
+
+	<scene name="scene_iframe" title="iframe" etitle="No.3 Former Residence" gid="11" onstart="" thumburl="https://bigscene.4dage.com/panorama/panos/01.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="0" vlookat="0"    />
+
+		<preview url="https://bigscene.4dage.com/panorama/panos/01.tiles/preview.jpg" />
+		
+		<layer   name="iframelayer"
+						type="container"
+						width="100%"
+						height="100%"
+						align="center"
+								zorder="10" 
+								bgcolor="0xffffff"
+								bgalpha="1"
+								visible="true"
+								onloaded="iframe_embed(iframesrc,iframelayer,'');"
+						>
+			</layer>
+
+	</scene>
+
+</krpano>

+ 329 - 0
tour.xml.bak

@@ -0,0 +1,329 @@
+<krpano  idletime="3" showerrors="true" onstart="skin_showthumbs(false);loadscene(scene_PANO0001-Panorama);">
+
+	<!-- <include url="skin/vtourskin.xml" /> -->
+	<include url="code/ui.xml"/>
+	<include url="code/tools.xml"/>
+	<include url="code/thumbs.xml"/>
+	<!-- <include url="edit/edit.xml"/> -->
+
+	
+    
+   
+
+
+	<action name="enter">
+		closelayer(homecn);
+		closelayer(homeen);
+		
+		if(%1 == en, 
+			set(isen,true);
+			set(skin_settings.thumbscc,flase);
+			skin_startup();
+			initsceneinfo();
+			set(layer[btn5].visible,false);
+			set(layer[btn6].visible,false);
+			set(layer[mbtn4].visible,false);
+			set(layer[mbtn5].visible,false);
+			playsound(bgm, '001.mp3', 0);autosp();pausesound(bgm);pausesound(sp);
+			playsound(start, 'esp/start.mp3', 1,
+				loadscene(scene_PANO0001-Panorama,,,BLEND(1.0, easeInCubic));
+				resumesound(bgm);autosp(true);
+				set(layer[home].visible,false);
+				startview();
+			);
+				
+			,
+
+
+			playsound(bgm, '001.mp3', 0);autosp();pausesound(bgm);pausesound(sp);
+			playsound(start, 'sp/start.mp3', 1,
+				loadscene(scene_PANO0001-Panorama,,,BLEND(1.0, easeInCubic));
+				resumesound(bgm);autosp(true);
+				set(layer[home].visible,false);
+				startview();
+				
+			);
+
+		);
+		
+	
+	</action>
+	<action name="entervr">
+		
+		playsound(bgm, '001.mp3', 0);
+		autosp();
+		
+		set(hopenvr,true);
+		
+	</action>
+
+
+	<style name="inscene_style" url="img/bigspot.png" scale="0.5" scale.mobile="0.8" edge="bottom" distorted="false"
+		       tooltip=""  onloaded="addhottip" 
+		       onclick2="lookto(get(hotspot[get(name)].ath),0,50,linear(50),,,
+		       	loadscene(get(linkedscene),,MERGE,ZOOMBLEND(2.0, 2.0, easeInOutSine));skin_updatescroll();
+		       	);"
+			   onclick="openlayer(inpano);inpano_animate()"
+
+		       	/>
+
+	<action name="switchscene">
+		set(inscene,%1);
+		skin_view_littleplanet();
+		delayedcall(1,
+		loadscene(scene_PANO0001-Panorama, null, KEEPALL, BLEND(1));
+		);
+
+	</action>
+	
+	<action name="switchscene2">
+		skin_view_normal();
+		lookto(get(hotspot[get(inscene)].ath),get(hotspot[get(inscene)].atv),50,linear(50),,,
+		       	loadscene(get(inscene),,MERGE,ZOOMBLEND(2.0, 2.0, easeInOutSine));skin_updatescroll();
+		       	set(inscene,false);
+		       	);"
+	</action>
+	
+
+<control mousetype="drag2d" />
+		
+		<preview type="grid();" />
+
+
+		<action name="iframe_embed">
+		    removelayer(%1);
+		    addlayer(%1);
+		    set(layer[%1].parent, %2);
+		    set(layer[%1].align, lefttop);
+		    set(layer[%1].width, 100%);
+		    set(layer[%1].height, 100%);
+
+		    if(device.html5,
+		        txtadd(iframecode, '[iframe  id="krpano_iframe_',%1,'" width="100%" height="100%" src="',%3,'" frameborder="0" allow-same-origin allowfullscreen][/iframe]');
+		        copy(layer[%1].html, iframecode);
+		        set(layer[%1].padding, 0);
+		        set(layer[%1].url, 'textfield.swf');
+		        set(layer[%1].interactivecontent, true);
+		        set(layer[%1].onloaded, iframe_resize(%1); );
+		        set(layer[%2].visible,true);
+		    ,
+		        showlog();
+		        trace(error,'iframe无法在Flash下运行!');
+		    );
+		</action>
+
+		<action name="iframe_resize" type="Javascript" devices="html5"><![CDATA[
+		    document.querySelector("#krpano_iframe_"+args[1]).parentNode.style.height="100%";
+		]]></action>
+	
+	<scene name="scene_PANO0001-Panorama" title="港珠澳大桥" gid="1" sp="" onstart="if(inscene,delayedcall(2,switchscene2))" thumburl="panos/PANO0001-Panorama.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="-104" vlookat="40" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="110" limitview="auto" />
+
+		<preview url="panos/PANO0001-Panorama.tiles/preview.jpg" />
+
+		<image type="CUBE" multires="true" tilesize="512">
+			<level tiledimagewidth="5376" tiledimageheight="5376">
+				<cube url="panos/PANO0001-Panorama.tiles/%s/l4/%v/l4_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="2688" tiledimageheight="2688">
+				<cube url="panos/PANO0001-Panorama.tiles/%s/l3/%v/l3_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="1280" tiledimageheight="1280">
+				<cube url="panos/PANO0001-Panorama.tiles/%s/l2/%v/l2_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="640" tiledimageheight="640">
+				<cube url="panos/PANO0001-Panorama.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+		<events onviewchange="if(view.fov LT 80,set(view.fov,80))" onloadcomplete="if(hopenvr,webvr.enterVR();loadscene(scene_PANO0001-Panorama,,,BLEND(1.0, easeInCubic));set(hopenvr,false))"/>
+
+		<!-- place your scene hotspots here  hp_hotspotstyle-->
+		<hotspot name="scene_PANO00011-Panorama" style="hp2_hotspotstyle" ath="68.906" atv="60.094" url="%SWFPATH%/img/hotspot/scene_02.png" />
+
+	</scene>
+
+	<scene name="scene_PANO0005-Panorama" title="珠海公路口岸" etitle="No.1 Former Residence" gid="2" sp="sp/3.mp3" onstart="" thumburl="panos/PANO0005-Panorama.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="156" vlookat="0.0" fovtype="MFOV" fov="100" maxpixelzoom="2.0" fovmin="70" fovmax="110" limitview="auto" />
+		<include  url="%SWFPATH%/code/view.xml" />
+
+		<preview url="panos/PANO0005-Panorama.tiles/preview.jpg" />
+
+		<image type="CUBE" multires="true" tilesize="512">
+			<level tiledimagewidth="5376" tiledimageheight="5376">
+				<cube url="panos/PANO0005-Panorama.tiles/%s/l4/%v/l4_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="2688" tiledimageheight="2688">
+				<cube url="panos/PANO0005-Panorama.tiles/%s/l3/%v/l3_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="1280" tiledimageheight="1280">
+				<cube url="panos/PANO0005-Panorama.tiles/%s/l2/%v/l2_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="640" tiledimageheight="640">
+				<cube url="panos/PANO0005-Panorama.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+
+	</scene>
+
+
+
+
+		
+	<scene name="scene_PANO00011-Panorama" title="风帆造型桥" etitle="No.2 Former Residence" gid="3" isar="true" sp="" onstart="" thumburl="panos/PANO00011-Panorama.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="50" vlookat="0.0" fovtype="MFOV" fov="100" maxpixelzoom="2.0" fovmin="70" fovmax="100" limitview="auto" />
+		<image type="CUBE" multires="true" tilesize="512">
+			<level tiledimagewidth="5376" tiledimageheight="5376">
+				<cube url="panos/PANO00011-Panorama.tiles/%s/l4/%v/l4_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="2688" tiledimageheight="2688">
+				<cube url="panos/PANO00011-Panorama.tiles/%s/l3/%v/l3_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="1280" tiledimageheight="1280">
+				<cube url="panos/PANO00011-Panorama.tiles/%s/l2/%v/l2_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="640" tiledimageheight="640">
+				<cube url="panos/PANO00011-Panorama.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+
+	</scene>
+
+		<scene name="scene_PANO00016-Panorama" title="海豚造型桥" etitle="No.2 Former Residence" gid="4" isar="true" sp="" onstart="" thumburl="panos/PANO00016-Panorama.tiles/thumb.jpg" lat="" lng="" heading="">
+
+			<view hlookat="0.0" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="120" limitview="auto" />
+
+			<preview url="panos/PANO00016-Panorama.tiles/preview.jpg" />
+
+			<image type="CUBE" multires="true" tilesize="512">
+				<level tiledimagewidth="5376" tiledimageheight="5376">
+					<cube url="panos/PANO00016-Panorama.tiles/%s/l4/%v/l4_%s_%v_%h.jpg" />
+				</level>
+				<level tiledimagewidth="2688" tiledimageheight="2688">
+					<cube url="panos/PANO00016-Panorama.tiles/%s/l3/%v/l3_%s_%v_%h.jpg" />
+				</level>
+				<level tiledimagewidth="1280" tiledimageheight="1280">
+					<cube url="panos/PANO00016-Panorama.tiles/%s/l2/%v/l2_%s_%v_%h.jpg" />
+				</level>
+				<level tiledimagewidth="640" tiledimageheight="640">
+					<cube url="panos/PANO00016-Panorama.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+				</level>
+			</image>
+
+		</scene>
+
+	<scene name="scene_PANO00018-Panorama" title="中国结造型桥" onstart="" gid="5" isar="true" sp="" thumburl="panos/PANO00018-Panorama.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="0.0" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="120" limitview="auto" />
+
+		<preview url="panos/PANO00018-Panorama.tiles/preview.jpg" />
+
+		<image type="CUBE" multires="true" tilesize="512">
+			<level tiledimagewidth="5376" tiledimageheight="5376">
+				<cube url="panos/PANO00018-Panorama.tiles/%s/l4/%v/l4_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="2688" tiledimageheight="2688">
+				<cube url="panos/PANO00018-Panorama.tiles/%s/l3/%v/l3_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="1280" tiledimageheight="1280">
+				<cube url="panos/PANO00018-Panorama.tiles/%s/l2/%v/l2_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="640" tiledimageheight="640">
+				<cube url="panos/PANO00018-Panorama.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+
+	</scene>
+	
+
+	<scene name="scene_PANO00023-Panorama" title="西人工岛" onstart="" gid="6" isar="true" sp="" thumburl="panos/PANO00023-Panorama.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="0.0" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="120" limitview="auto" />
+
+		<preview url="panos/PANO00023-Panorama.tiles/preview.jpg" />
+
+		<image type="CUBE" multires="true" tilesize="512">
+			<level tiledimagewidth="5376" tiledimageheight="5376">
+				<cube url="panos/PANO00023-Panorama.tiles/%s/l4/%v/l4_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="2688" tiledimageheight="2688">
+				<cube url="panos/PANO00023-Panorama.tiles/%s/l3/%v/l3_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="1280" tiledimageheight="1280">
+				<cube url="panos/PANO00023-Panorama.tiles/%s/l2/%v/l2_%s_%v_%h.jpg" />
+			</level>
+			<level tiledimagewidth="640" tiledimageheight="640">
+				<cube url="panos/PANO00023-Panorama.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+
+	</scene>
+
+		<scene name="scene_PANO00027-Panorama" title="东人工岛" onstart="" gid="7" isar="true" sp="" thumburl="panos/PANO00027-Panorama.tiles/thumb.jpg" lat="" lng="" heading="">
+
+			<view hlookat="0.0" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="120" limitview="auto" />
+
+			<preview url="panos/PANO00027-Panorama.tiles/preview.jpg" />
+
+			<image type="CUBE" multires="true" tilesize="512">
+				<level tiledimagewidth="5376" tiledimageheight="5376">
+					<cube url="panos/PANO00027-Panorama.tiles/%s/l4/%v/l4_%s_%v_%h.jpg" />
+				</level>
+				<level tiledimagewidth="2688" tiledimageheight="2688">
+					<cube url="panos/PANO00027-Panorama.tiles/%s/l3/%v/l3_%s_%v_%h.jpg" />
+				</level>
+				<level tiledimagewidth="1280" tiledimageheight="1280">
+					<cube url="panos/PANO00027-Panorama.tiles/%s/l2/%v/l2_%s_%v_%h.jpg" />
+				</level>
+				<level tiledimagewidth="640" tiledimageheight="640">
+					<cube url="panos/PANO00027-Panorama.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+				</level>
+			</image>
+
+		</scene>
+
+
+	<scene name="scene_SFZ" title="梁启超铜像" etitle="No.2 Former Residence" gid="8" isar="true" sp="" onstart="" thumburl="panos/SFZ.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="0.0" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="120" limitview="auto" />
+
+		<preview url="panos/SFZ.tiles/preview.jpg" />
+
+		<image type="CUBE" prealign="0|0.0|0" multires="true" tilesize="512">
+			<level tiledimagewidth="1024" tiledimageheight="1024">
+				<cube url="panos/SFZ.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+	
+	</scene>
+
+	<scene name="scene_RGD" title="纪念馆" etitle="No.3 Former Residence" gid="9" sp="" onstart="" thumburl="panos/RGD.tiles/thumb.jpg" lat="" lng="" heading="">
+
+		<view hlookat="0.0" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="120" limitview="auto" />
+
+		<preview url="panos/RGD.tiles/preview.jpg" />
+		
+		<image type="CUBE" prealign="0|0.0|0" multires="true" tilesize="512">
+			<level tiledimagewidth="1024" tiledimageheight="1024">
+				<cube url="panos/RGD.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+
+	</scene>
+
+	<scene name="scene_KA" title="入口处"   onstart="" gid="10" sp="" thumburl="panos/KA.tiles/thumb.jpg" lat="22.27285600" lng="113.54413200"  heading="0.0">
+
+		<view hlookat="0.0" vlookat="0.0" fovtype="MFOV" fov="120" maxpixelzoom="2.0" fovmin="70" fovmax="120" limitview="auto" />
+
+		<preview url="panos/KA.tiles/preview.jpg" />
+
+		<image type="CUBE" prealign="0|0.0|0" multires="true" tilesize="512">
+			<level tiledimagewidth="1024" tiledimageheight="1024">
+				<cube url="panos/KA.tiles/%s/l1/%v/l1_%s_%v_%h.jpg" />
+			</level>
+		</image>
+		
+	</scene>
+</krpano>

+ 97 - 0
youtube-player.xml

@@ -0,0 +1,97 @@
+<krpano>
+	<!-- youtube-player.xml 1.19 -->
+
+	<youtubeplayer_settings
+		maxsize="0.80"
+		parameters="autoplay=1&amp;autohide=1&amp;controls=1&amp;loop=0&amp;modestbranding=0&amp;rel=0&amp;showinfo=0&amp;hd=1&amp;vq=hd720"
+		/>
+
+	<!--
+		youtubeplayer_settings
+
+		o maxsize
+			- set the max. size of the screen-size (0.80 = 80%, 1.0 = 100%)
+			- depending on the available space either the screen width or height will be used
+
+		o parameters
+			- the youtube embedding parameters
+			- see for here for the documentation of all available parameters:
+				https://developers.google.com/youtube/player_parameters#Parameters
+			- e.g. set controls=0 to remove the default youtube control
+	-->
+
+	<action name="youtubeplayer_open">
+		if(layer[youtubeplayer_bg],
+			<!-- error -->
+			trace('youtubeplayer_open - there is already a youtubeplayer!'-);
+		  ,
+			<!-- step one - add a background layer and fade it in -->
+			addlayer(youtubeplayer_bg);
+			set(layer[youtubeplayer_bg].type, container);
+			set(layer[youtubeplayer_bg].zorder, 999999);
+			set(layer[youtubeplayer_bg].align, lefttop);
+			set(layer[youtubeplayer_bg].width, 100%);
+			set(layer[youtubeplayer_bg].height, 100%);
+			set(layer[youtubeplayer_bg].bgcolor, 0x000000);
+			set(layer[youtubeplayer_bg].bgalpha, 0.8);
+			set(layer[youtubeplayer_bg].bgcapture, true);
+			set(layer[youtubeplayer_bg].handcursor, false);
+			set(layer[youtubeplayer_bg].alpha, 0.0);
+			set(layer[youtubeplayer_bg].onclick, youtubeplayer_close() );
+			tween(layer[youtubeplayer_bg].alpha, 1.0, 0.5, default,
+				<!-- step two - after the fade-in add the youtube player -->
+				addlayer(youtubeplayer_plugin);
+				set(layer[youtubeplayer_plugin].parent, layer[youtubeplayer_bg]);
+				set(layer[youtubeplayer_plugin].align, center);
+				set(layer[youtubeplayer_plugin].alpha, 0.0);
+
+				<!-- fit into the available screen space (youtube videos are always 16:9) -->
+				div(aspect, 16, 9);
+				mul(new_videowidth, stagewidth, youtubeplayer_settings.maxsize);
+				div(new_videoheight, new_videowidth, aspect);
+				mul(max_videoheight, stageheight, youtubeplayer_settings.maxsize);
+				if(new_videoheight GT max_videoheight,
+					copy(new_videoheight, max_videoheight);
+					mul(new_videowidth, new_videoheight, aspect);
+				  );
+				roundval(new_videowidth);
+				roundval(new_videoheight);
+				copy(layer[youtubeplayer_plugin].width, new_videowidth);
+				copy(layer[youtubeplayer_plugin].height, new_videoheight);
+
+				if(device.html5,
+					<!-- html5 - embed iframe via the textfield plugin -->
+					txtadd(iframecode, '[iframe width="',get(layer[youtubeplayer_plugin].width),'" height="',get(layer[youtubeplayer_plugin].height),'" src="%1','', ,'" frameborder="0" allowfullscreen][/iframe]');
+					copy(layer[youtubeplayer_plugin].html, iframecode);
+					set(layer[youtubeplayer_plugin].padding, 0);
+					set(layer[youtubeplayer_plugin].url, 'textfield.swf');
+					set(layer[youtubeplayer_plugin].interactivecontent, true);
+					set(layer[youtubeplayer_plugin].onloaded, youtubeplayer_plugin_ready() );
+				  ,
+					<!-- flash - embed the youtube flashplayer player -->
+					txtadd(embedurl, 'http://www.youtube.com/v/','%1','?version=3&amp;',get(youtubeplayer_settings.parameters));
+					set(layer[youtubeplayer_plugin].onloaded, registercontentsize(640,390); youtubeplayer_plugin_ready(); );
+					copy(layer[youtubeplayer_plugin].url, embedurl);
+				  );
+			  );
+		  );
+	</action>
+
+	<action name="youtubeplayer_plugin_ready">
+		if(layer[youtubeplayer_plugin],
+			tween(layer[youtubeplayer_plugin].alpha, 1.0);
+		  );
+	</action>
+
+	<action name="youtubeplayer_close">
+		set(layer[youtubeplayer_bg].onclick, null);
+
+		tween(layer[youtubeplayer_plugin].alpha, 0.0, 0.25, default);
+
+		tween(layer[youtubeplayer_bg].alpha,0.0, 0.50, default,
+			removelayer(youtubeplayer_bg);
+			removelayer(youtubeplayer_plugin);
+		  );
+	</action>
+
+</krpano>