krpano 1.19版本的新技能,就是可将html页面(iframe)作为热点放到3D空间中。
你可以如封面那样放入一个youku的embed视频,或者像下图那样直接放入一个html页面。因为这个就是一个可以变形的iframe。
首先你必须使用krpano 1.19,目前最新版本的是krpano 1.19 pr6。尽管这个是一个预览版,但据klaus所说,这个预览版已经相当稳定,之所以不出正式版,正应了那句话:万事俱备只欠东风。
其次你必须在html5内核下使用,也就是不支持flash。
最后你使用下面一段代码。注意需要确定iframe的尺寸。因为目前还不支持直接放入html元素,因此需要一个黑色或透明图片作为url的图片。
var iframe = document.createElement("iframe");
iframe.style.position = "absolute";
iframe.style.left = 0;
iframe.style.top = 0;
iframe.style.width = "100%";
iframe.style.height = "100%";
iframe.style.border = 0;
iframe.src = args[1];
iframe.setAttribute('id',resolve(caller.name));
caller.registercontentsize(args[2], args[3]);
caller.sprite.appendChild(iframe);
caller.sprite.style.webkitOverflowScrolling = "touch";
caller.sprite.style.overflowY = "auto";
caller.sprite.style.overflowX = "auto";
注意,hotspot的sprite属性调用只能是css3d渲染下。
renderer="css3d"
当然使用layer元素也是可以的。
var iframe = document.createElement("iframe");
iframe.style.position = "absolute";
iframe.style.left = 0;
iframe.style.top = 0;
iframe.style.width = "100%";
iframe.style.height = "100%";
iframe.style.border = 0;
iframe.src = args[1];
iframe.setAttribute('id',resolve(caller.name));
caller.registercontentsize(args[2], args[3]);
caller.sprite.appendChild(iframe);
caller.sprite.style.webkitOverflowScrolling = "touch";
caller.sprite.style.overflowY = "auto";
caller.sprite.style.overflowX = "auto";
移除iframe的方法:
demo完整代码
callwith(layer[iframelayer],add_iframe(%1, 100%, 100%);set(visible,true));
在使用之前,请注意demo是没有keep属性,正常要为iframelayer这个layer增加 keep="true"
以下部分是载入iframe用的iframelayer以及对应的关闭按钮部分。
放在scene的外面
关闭按钮closeiframe_button的url、align、x、y可自行修改。
注意,你需要准备一张纯黑色的jpg或png图片。几k的体积就可以了。
以下部分是实现嵌入网页的action。
放在scene的外面
callwith(layer[iframelayer],add_iframe(%1, 100%, 100%);set(visible,true));
下面是实现弹出网页的action,你可以在任意可以写action的位置写,包括onclick等。
call_iframe('http://www.baidu.com/')
非常简单,直接替换里面的网址换成你的网址即可。
demo完整代码:
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, '[div style="position:absolute; right:0; bottom:0; left:0; top:0; overflow-y: scroll; -webkit-overflow-scrolling:touch;"][iframe id="krpano_iframe_',%1,'" width="100%" height="100%" src="',%3,'" frameborder="0" allow-same-origin allowfullscreen][/iframe][/div]');
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下运行!');
);
在使用之前,请注意demo是没有keep属性,正常要为iframelayer这个layer增加 keep="true"
以下部分是载入iframe用的iframelayer以及对应的关闭按钮部分。
放在scene的外面
关闭按钮closeiframe_button的url、align、x、y可自行修改。
以下部分是实现嵌入网页的action。
放在scene的外面
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, '[div style="position:absolute; right:0; bottom:0; left:0; top:0; overflow-y: scroll; -webkit-overflow-scrolling:touch;"] [iframe id="krpano_iframe_',%1,'" width="100%" height="100%" src="',%3,'" frameborder="0" scrolling="yes" allow-same-origin allowfullscreen][/iframe][/div]');
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的位置写,包括onclick等。
iframe_embed(iframesrc,iframelayer,'http://www.qq.com/');
直接替换里面的网址换成你的网址即可。
第一个参数里iframesrc是要新建layer的name,iframelayer是第一个参数中新建layer指定的父元素,就是说iframesrc是iframelayer的子元素。