3dview.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>CSS 3D Panorama - Play with CSS 3D Transform</title>
<meta name="description" content="Create a panorama using just CSS3, with CSS 3D transformations and a bit a jQuery to play with." />
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="icon" type="image/png" href="images/favicon.png" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="modernizrCSS.js"></script>
<script type="text/javascript" src="pano.js"></script>
<script type="text/javascript" src="mobile.js"></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-17376769-4']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script> <meta name="viewport" content="width=820" />
</head>
<body>
<div id="logo"><a href="http://www.css3create.com">← Go back to CSS3Create</a> or <a href="http://www.css3create.com/CSS-3D-Panorama">Go back to article</a></div>
<div id="wrap">
<header>
<h1>CSS 3D Panorama ·</h1>
<select id="panoChoose">
<option value="bruxelles">Grand-Place - Brussels</option>
<option value="eiffel">Eiffel Tower - Paris</option>
<option value="vendome">Place Vendôme - Paris</option>
</select>
<div id="peel"><button>Peel it!</button></div>
</header>
<div id="container">
<div id="instructions"><p>Just move around...</p></div>
<div id="bigCube">
<div id="cube">
<div id="sousCube">
<div>
<img class="north" src="images/cube_0.jpeg" alt="" width="3000" height="3000" />
<img class="west" src="images/cube_1.jpeg" alt="" width="3000" height="3000" />
<img class="east" src="images/cube_2.jpeg" alt="" width="3000" height="3000" />
<img class="south" src="images/cube_3.jpeg" alt="" width="3000" height="3000" />
<img class="top" src="images/cube_4.jpeg" alt="" width="3000" height="3000" />
<img class="bottom" src="images/cube_5.jpeg" alt="" width="3000" height="3000" />
</div>
</div>
</div>
</div>
</div>
<div class="txt">
<p>Demo by <a href="http://www.css3create.com">Vincent De Oliveira</a> · <a href="http://twitter.com/iamvdo">@iamvdo</a></p>
</div>
<div class="txt">
<h2>Notes</h2>
<p>Desktop: Works perfectly with Safari 5.1, Firefox 10+. Chrome bug on display (Canary is better but still bug). Opera don't support 3D transform. IE10 don't support transform-style: preserve-3d, so it don't work.</p>
<p>Mobile: Works perfectly with iOS and Android 4, controlled with accelerometer. Controls on Android are weird.</p>
<p>Some random memory trouble on each platform...</p>
<p>Report any bug: <a href="mailto:vincent@iamvdo.me">vincent@iamvdo.me</a>. Keep implementing.</p>
</div>
<div class="txt">
<h2>Share</h2>
<p>
<a href="https://twitter.com/share" class="twitter-share-button" data-via="iamvdo">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
<!-- Place this tag where you want the +1 button to render -->
<g:plusone size="medium"></g:plusone>
<!-- Place this render call where appropriate -->
<script type="text/javascript">
(function() {
var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
po.src = 'https://apis.google.com/js/plusone.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
})();
</script>
<iframe src="//www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.css3create.com%2Fcss%2Fpanorama3D%2F&send=false&layout=button_count&width=450&show_faces=false&action=like&colorscheme=light&font&height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:21px;" allowTransparency="true"></iframe>
</p>
</div>
</div>
</body>
</html>
mobile.js
$(function(){
var ax, ay, az;
var ix = iy = iz = 0;
var init = true;
var angleY = 4;
var angleX = 1;
window.addEventListener('deviceorientation', function (e) {
$('#instructions').addClass('on');
ax = e.beta;
ay = e.gamma;
az = e.alpha;
// init, recup position tel pour 0,0
if(init){
ix = ax;
iy = ay;
iz = az;
//ax = ay = az = 0;
init=false;
}
// ax entre -90 et 90
// ay entre -180 et 180
// az entre 0 et 360
ax -= ix;
ay -= iy;
az -= iz;
ay *= angleY;
value = 'rotateX('+(ax)+'deg) rotateY('+(ay)+'deg)';
//apply
$('#cube').css({
WebkitTransform:value,
MozTransform:value,
msTransform:value
});
});
});
modernizrCSS.js
/* Modernizr 2.0.6 (Custom Build) | MIT & BSD
* Build: http://www.modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-iepp-cssclasses-teststyles-testprop-testallprops-prefixes-domprefixes-load
*/
;window.Modernizr=function(a,b,c){function D(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1),d=(a+" "+p.join(c+" ")+c).split(" ");return C(d,b)}function C(a,b){for(var d in a)if(k[a[d]]!==c)return b=="pfx"?a[d]:!0;return!1}function B(a,b){return!!~(""+a).indexOf(b)}function A(a,b){return typeof a===b}function z(a,b){return y(o.join(a+";")+(b||""))}function y(a){k.cssText=a}var d="2.0.6",e={},f=!0,g=b.documentElement,h=b.head||b.getElementsByTagName("head")[0],i="modernizr",j=b.createElement(i),k=j.style,l,m=":)",n=Object.prototype.toString,o=" -webkit- -moz- -o- -ms- -khtml- ".split(" "),p="Webkit Moz O ms Khtml".split(" "),q={},r={},s={},t=[],u=function(a,c,d,e){var f,h,j,k=b.createElement("div");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:i+(d+1),k.appendChild(j);f=["­","<style>",a,"</style>"].join(""),k.id=i,k.innerHTML+=f,g.appendChild(k),h=c(k,a),k.parentNode.removeChild(k);return!!h},v,w={}.hasOwnProperty,x;!A(w,c)&&!A(w.call,c)?x=function(a,b){return w.call(a,b)}:x=function(a,b){return b in a&&A(a.constructor.prototype[b],c)};var E=function(a,c){var d=a.join(""),f=c.length;u(d,function(a,c){var d=b.styleSheets[b.styleSheets.length-1],g=d.cssRules&&d.cssRules[0]?d.cssRules[0].cssText:d.cssText||"",h=a.childNodes,i={};while(f--)i[h[f].id]=h[f];e.csstransforms3d=i.csstransforms3d.offsetLeft===9,e.generatedcontent=i.generatedcontent.offsetHeight>=1,e.fontface=/src/i.test(g)&&g.indexOf(c.split(" ")[0])===0},f,c)}(['@font-face {font-family:"font";src:url("https://")}',["@media (",o.join("transform-3d),("),i,")","{#csstransforms3d{left:9px;position:absolute}}"].join(""),['#generatedcontent:after{content:"',m,'";visibility:hidden}'].join("")],["fontface","csstransforms3d","generatedcontent"]);q.flexbox=function(){function c(a,b,c,d){a.style.cssText=o.join(b+":"+c+";")+(d||"")}function a(a,b,c,d){b+=":",a.style.cssText=(b+o.join(c+";"+b)).slice(0,-b.length)+(d||"")}var d=b.createElement("div"),e=b.createElement("div");a(d,"display","box","width:42px;padding:0;"),c(e,"box-flex","1","width:10px;"),d.appendChild(e),g.appendChild(d);var f=e.offsetWidth===42;d.removeChild(e),g.removeChild(d);return f},q.rgba=function(){y("background-color:rgba(150,255,150,.5)");return B(k.backgroundColor,"rgba")},q.hsla=function(){y("background-color:hsla(120,40%,100%,.5)");return B(k.backgroundColor,"rgba")||B(k.backgroundColor,"hsla")},q.multiplebgs=function(){y("background:url(https://),url(https://),red url(https://)");return/(url\s*\(.*?){3}/.test(k.background)},q.backgroundsize=function(){return D("backgroundSize")},q.borderimage=function(){return D("borderImage")},q.borderradius=function(){return D("borderRadius")},q.boxshadow=function(){return D("boxShadow")},q.textshadow=function(){return b.createElement("div").style.textShadow===""},q.opacity=function(){z("opacity:.55");return/^0.55$/.test(k.opacity)},q.cssanimations=function(){return D("animationName")},q.csscolumns=function(){return D("columnCount")},q.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";y((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return B(k.backgroundImage,"gradient")},q.cssreflections=function(){return D("boxReflect")},q.csstransforms=function(){return!!C(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},q.csstransforms3d=function(){var a=!!C(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=e.csstransforms3d);return a},q.csstransitions=function(){return D("transitionProperty")},q.fontface=function(){return e.fontface},q.generatedcontent=function(){return e.generatedcontent};for(var F in q)x(q,F)&&(v=F.toLowerCase(),e[v]=q[F](),t.push((e[v]?"":"no-")+v));y(""),j=l=null,a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1}()&&function(a,b){function s(a){var b=-1;while(++b<g)a.createElement(f[b])}a.iepp=a.iepp||{};var d=a.iepp,e=d.html5elements||"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",f=e.split("|"),g=f.length,h=new RegExp("(^|\\s)("+e+")","gi"),i=new RegExp("<(/*)("+e+")","gi"),j=/^\s*[\{\}]\s*$/,k=new RegExp("(^|[^\\n]*?\\s)("+e+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),l=b.createDocumentFragment(),m=b.documentElement,n=m.firstChild,o=b.createElement("body"),p=b.createElement("style"),q=/print|all/,r;d.getCSS=function(a,b){if(a+""===c)return"";var e=-1,f=a.length,g,h=[];while(++e<f){g=a[e];if(g.disabled)continue;b=g.media||b,q.test(b)&&h.push(d.getCSS(g.imports,b),g.cssText),b="all"}return h.join("")},d.parseCSS=function(a){var b=[],c;while((c=k.exec(a))!=null)b.push(((j.exec(c[1])?"\n":c[1])+c[2]+c[3]).replace(h,"$1.iepp_$2")+c[4]);return b.join("\n")},d.writeHTML=function(){var a=-1;r=r||b.body;while(++a<g){var c=b.getElementsByTagName(f[a]),d=c.length,e=-1;while(++e<d)c[e].className.indexOf("iepp_")<0&&(c[e].className+=" iepp_"+f[a])}l.appendChild(r),m.appendChild(o),o.className=r.className,o.id=r.id,o.innerHTML=r.innerHTML.replace(i,"<$1font")},d._beforePrint=function(){p.styleSheet.cssText=d.parseCSS(d.getCSS(b.styleSheets,"all")),d.writeHTML()},d.restoreHTML=function(){o.innerHTML="",m.removeChild(o),m.appendChild(r)},d._afterPrint=function(){d.restoreHTML(),p.styleSheet.cssText=""},s(b),s(l);d.disablePP||(n.insertBefore(p,n.firstChild),p.media="print",p.className="iepp-printshim",a.attachEvent("onbeforeprint",d._beforePrint),a.attachEvent("onafterprint",d._afterPrint))}(a,b),e._version=d,e._prefixes=o,e._domPrefixes=p,e.testProp=function(a){return C([a])},e.testAllProps=D,e.testStyles=u,g.className=g.className.replace(/\bno-js\b/,"")+(f?" js "+t.join(" "):"");return e}(this,this.document),function(a,b,c){function k(a){return!a||a=="loaded"||a=="complete"}function j(){var a=1,b=-1;while(p.length- ++b)if(p[b].s&&!(a=p[b].r))break;a&&g()}function i(a){var c=b.createElement("script"),d;c.src=a.s,c.onreadystatechange=c.onload=function(){!d&&k(c.readyState)&&(d=1,j(),c.onload=c.onreadystatechange=null)},m(function(){d||(d=1,j())},H.errorTimeout),a.e?c.onload():n.parentNode.insertBefore(c,n)}function h(a){var c=b.createElement("link"),d;c.href=a.s,c.rel="stylesheet",c.type="text/css";if(!a.e&&(w||r)){var e=function(a){m(function(){if(!d)try{a.sheet.cssRules.length?(d=1,j()):e(a)}catch(b){b.code==1e3||b.message=="security"||b.message=="denied"?(d=1,m(function(){j()},0)):e(a)}},0)};e(c)}else c.onload=function(){d||(d=1,m(function(){j()},0))},a.e&&c.onload();m(function(){d||(d=1,j())},H.errorTimeout),!a.e&&n.parentNode.insertBefore(c,n)}function g(){var a=p.shift();q=1,a?a.t?m(function(){a.t=="c"?h(a):i(a)},0):(a(),j()):q=0}function f(a,c,d,e,f,h){function i(){!o&&k(l.readyState)&&(r.r=o=1,!q&&j(),l.onload=l.onreadystatechange=null,m(function(){u.removeChild(l)},0))}var l=b.createElement(a),o=0,r={t:d,s:c,e:h};l.src=l.data=c,!s&&(l.style.display="none"),l.width=l.height="0",a!="object"&&(l.type=d),l.onload=l.onreadystatechange=i,a=="img"?l.onerror=i:a=="script"&&(l.onerror=function(){r.e=r.r=1,g()}),p.splice(e,0,r),u.insertBefore(l,s?null:n),m(function(){o||(u.removeChild(l),r.r=r.e=o=1,j())},H.errorTimeout)}function e(a,b,c){var d=b=="c"?z:y;q=0,b=b||"j",C(a)?f(d,a,b,this.i++,l,c):(p.splice(this.i++,0,a),p.length==1&&g());return this}function d(){var a=H;a.loader={load:e,i:0};return a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=r&&!s,u=s?l:n.parentNode,v=a.opera&&o.call(a.opera)=="[object Opera]",w="webkitAppearance"in l.style,x=w&&"async"in b.createElement("script"),y=r?"object":v||x?"img":"script",z=w?"img":y,A=Array.isArray||function(a){return o.call(a)=="[object Array]"},B=function(a){return Object(a)===a},C=function(a){return typeof a=="string"},D=function(a){return o.call(a)=="[object Function]"},E=[],F={},G,H;H=function(a){function f(a){var b=a.split("!"),c=E.length,d=b.pop(),e=b.length,f={url:d,origUrl:d,prefixes:b},g,h;for(h=0;h<e;h++)g=F[b[h]],g&&(f=g(f));for(h=0;h<c;h++)f=E[h](f);return f}function e(a,b,e,g,h){var i=f(a),j=i.autoCallback;if(!i.bypass){b&&(b=D(b)?b:b[a]||b[g]||b[a.split("/").pop().split("?")[0]]);if(i.instead)return i.instead(a,b,e,g,h);e.load(i.url,i.forceCSS||!i.forceJS&&/css$/.test(i.url)?"c":c,i.noexec),(D(b)||D(j))&&e.load(function(){d(),b&&b(i.origUrl,h,g),j&&j(i.origUrl,h,g)})}}function b(a,b){function c(a){if(C(a))e(a,h,b,0,d);else if(B(a))for(i in a)a.hasOwnProperty(i)&&e(a[i],h,b,i,d)}var d=!!a.test,f=d?a.yep:a.nope,g=a.load||a.both,h=a.callback,i;c(f),c(g),a.complete&&b.load(a.complete)}var g,h,i=this.yepnope.loader;if(C(a))e(a,0,i,0);else if(A(a))for(g=0;g<a.length;g++)h=a[g],C(h)?e(h,0,i,0):A(h)?H(h):B(h)&&b(h,i);else B(a)&&b(a,i)},H.addPrefix=function(a,b){F[a]=b},H.addFilter=function(a){E.push(a)},H.errorTimeout=1e4,b.readyState==null&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",G=function(){b.removeEventListener("DOMContentLoaded",G,0),b.readyState="complete"},0)),a.yepnope=d()}(this,this.document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
style.css
html{
font-size: .7em;
font-family:sans-serif;
color:#888;
background:#eee;
background:-webkit-gradient(radial,closest-side,from(#fff),to(#eee));
background:-webkit-radial-gradient(closest-side,#fff,#eee);
background:-moz-radial-gradient(closest-side,#fff,#eee);
background:-ms-radial-gradient(closest-side,#fff,#eee);
background:-o-radial-gradient(closest-side,#fff,#eee);
background:radial-gradient(closest-side,#fff,#eee);
}
#logo{
position:absolute;
top:0;
left:0;
margin:1em;
}
#logo a{
color:#888;
text-shadow:0 1px 0 white;
text-decoration:none;
}
#logo a:hover{
color:#777;
text-decoration:underline;
}
#wrap{
width:800px;
margin:auto;
}
header{
position:relative;
width:100%;
margin:20px 0;
}
h1{
float:left;
font-size:24px;
margin:9px 0;
padding:0;
text-shadow:0 1px 0 white;
}
select{
color:#888;
text-shadow:0 1px 0 white;
background:transparent;
border:none;
font-family:sans-serif;
font-size:24px;
margin:9px 0 9px 3px;
padding:0;
border-radius:2px;
}
select:hover,select:focus{
background:#aaa;
color:#eee;
text-shadow:none;
box-shadow:0 -1px 0 rgba(255,255,255,1) inset;
}
option{
color:#555;
text-shadow:none;
background:#eee;
}
#peel{
position:absolute;
top:9px;right:0;
}
#peel button{
cursor:pointer;
font-size:14px;
font-weight:bold;
padding:5px 15px;
background:#ddd;
background:-webkit-linear-gradient(#eee,#ccc);
background:-moz-linear-gradient(#eee,#ccc);
background:-ms-linear-gradient(#eee,#ccc);
background:-o-linear-gradient(#eee,#ccc);
background:linear-gradient(#eee,#ccc);
color:#666;
border-radius:2px;
border:1px solid #888;
box-shadow:0 1px 0 #fff inset, 0 1px 0 #fff;
}
#peel button:hover,#peel button:focus{
background:#b9b9b9;
background:-webkit-linear-gradient(#ddd,#aaa);
background:-moz-linear-gradient(#ddd,#aaa);
background:-ms-linear-gradient(#ddd,#aaa);
background:-o-linear-gradient(#ddd,#aaa);
background:linear-gradient(#ddd,#aaa);
}
#peel button:active,#peel button.on{
background:#999;
background:-webkit-linear-gradient(#aaa,#888);
background:-moz-linear-gradient(#aaa,#888);
background:-ms-linear-gradient(#aaa,#888);
background:-o-linear-gradient(#aaa,#888);
background:linear-gradient(#aaa,#888);
box-shadow:0 1px 0 #888 inset, 0 1px 0 #fff;
border-color:#666;
color:#444;
text-shadow:0 1px 0 #aaa;
}
#peel button.on::before{
content:'\2714' ' ';
line-height:0;
font-size:inherit;
/*position:absolute;*/
}
#instructions{
position:absolute;
top:0;left:0;
z-index:1000;
/*box-sizing:border-box; ff,saf lag*/
width:800px;height:280px;
padding-top:220px;
background:rgba(0,0,0,.5);
font-size:1.4em;
font-style:italic;
text-shadow:0 -1px 0 #000;
color:#ccc;
text-align:center;
opacity:1;
-webkit-transition:opacity .5s ease;
-moz-transition:opacity .5s ease;
-ms-transition:opacity .5s ease;
-o-transition:opacity .5s ease;
transition:opacity .5s ease;
}
#instructions.on{
opacity:0;
}
#copy{
position:absolute;
z-index:1000;
bottom:0;
right:0;
font-size:.7em;
font-style:italic;
color:#fff;
display:none;
}
#copy.on{
display:block;
}
#container{
position:relative;
width:800px;
height:500px;
overflow:hidden;
/*border-radius:3px; FF lag */
/*box-shadow*/
-webkit-box-shadow:0 0 3px black;
-moz-box-shadow:0 0 3px black;
box-shadow:0 0 3px black;
}
#container.on{cursor:move;}
#bigCube{
width:6000px;
height:6000px;
margin-left:-2600px;
margin-top:-2750px;
/*perspective*/
-webkit-perspective:420px;
-moz-perspective:420px;
-ms-perspective:420px;
-o-perspective:420px;
perspective:420px;
/*transform-origin*/
-webkit-transform-origin:3000px 3000px 0;
-moz-transform-origin:3000px 3000px 0;
-ms-transform-origin:3000px 3000px 0;
-o-transform-origin:3000px 3000px 0;
transform-origin:3000px 3000px 0;
/*transform-style*/
-webkit-transform-style:preserve-3d;
-moz-transform-style:preserve-3d;
-ms-transform-style:preserve-3d;
-o-transform-style:preserve-3d;
transform-style:preserve-3d;
}
#cube{
position:relative;
width:6000px;
height:6000px;
/*transform-style*/
-webkit-transform-style:preserve-3d;
-moz-transform-style:preserve-3d;
-ms-transform-style:preserve-3d;
-o-transform-style:preserve-3d;
transform-style:preserve-3d;
/*transform*/
-webkit-transform:rotateX(0) rotateY(0);
-moz-transform:rotateX(0) rotateY(0);
-ms-transform:rotateX(0) rotateY(0);
-o-transform:rotateX(0) rotateY(0);
transform:rotateX(0) rotateY(0);
}
#sousCube{
width:6000px;
height:6000px;
/*transform-style*/
-webkit-transform-style:preserve-3d;
-moz-transform-style:preserve-3d;
-ms-transform-style:preserve-3d;
-o-transform-style:preserve-3d;
transform-style:preserve-3d;
}
#sousCube img{
opacity:0;
position:absolute;
top:1500px;
left:1500px;
width:3000px;
height:3000px;
/*transform-origin*/
-webkit-transform-origin:0 0 0;
-moz-transform-origin:0 0 0;
-ms-transform-origin:0 0 0;
-o-transform-origin:0 0 0;
transform-origin:0 0 0;
-webkit-transition:all .5s ease;
-moz-transition:all .5s ease;
-ms-transition:all .5s ease;
-o-transition:all .5s ease;
transition:all .5s ease;
}
#sousCube div.on img{
opacity:1;
}
img.north{
/*transform*/
-webkit-transform:translate3d(0,0,-1497px);
-moz-transform:translate3d(0,0,-1497px);
-ms-transform:translate3d(0,0,-1497px);
-o-transform:translate3d(0,0,-1497px);
transform:translate3d(0,0,-1497px);
}
img.west{
/*transform*/
-webkit-transform:rotate3d(0,1,0,90deg) translate3d(-1500px,0,3px);
-moz-transform:rotate3d(0,1,0,90deg) translate3d(-1500px,0,3px);
-ms-transform:rotate3d(0,1,0,90deg) translate3d(-1500px,0,3px);
-o-transform:rotate3d(0,1,0,90deg) translate3d(-1500px,0,3px);
transform:rotate3d(0,1,0,90deg) translate3d(-1500px,0,3px);
}
img.east{
/*transform*/
-webkit-transform:rotate3d(0,-1,0,90deg) translate3d(-1500px,0,-2997px);
-moz-transform:rotate3d(0,-1,0,90deg) translate3d(-1500px,0,-2997px);
-ms-transform:rotate3d(0,-1,0,90deg) translate3d(-1500px,0,-2997px);
-o-transform:rotate3d(0,-1,0,90deg) translate3d(-1500px,0,-2997px);
transform:rotate3d(0,-1,0,90deg) translate3d(-1500px,0,-2997px);
}
img.south{
/*transform*/
-webkit-transform:rotate3d(0,1,0,180deg) translate3d(-3000px,0,-1497px);
-moz-transform:rotate3d(0,1,0,180deg) translate3d(-3000px,0,-1497px);
-ms-transform:rotate3d(0,1,0,180deg) translate3d(-3000px,0,-1497px);
-o-transform:rotate3d(0,1,0,180deg) translate3d(-3000px,0,-1497px);
transform:rotate3d(0,1,0,180deg) translate3d(-3000px,0,-1497px);
}
img.top{
/*transform*/
-webkit-transform:rotateY(180deg) rotateX(-90deg) translate3d(-3000px,-1500px,3px);
-moz-transform:rotateY(180deg) rotateX(-90deg) translate3d(-3000px,-1500px,3px);
-ms-transform:rotateY(180deg) rotateX(-90deg) translate3d(-3000px,-1500px,3px);
-o-transform:rotateY(180deg) rotateX(-90deg) translate3d(-3000px,-1500px,3px);
transform:rotateY(180deg) rotateX(-90deg) translate3d(-3000px,-1500px,3px);
}
img.bottom{
/*transform*/
-webkit-transform:rotate3d(1,0,0,90deg) translate3d(0,-1500px,-2997px);
-moz-transform:rotate3d(1,0,0,90deg) translate3d(0,-1500px,-2997px);
-ms-transform:rotate3d(1,0,0,90deg) translate3d(0,-1500px,-2997px);
-o-transform:rotate3d(1,0,0,90deg) translate3d(0,-1500px,-2997px);
transform:rotate3d(1,0,0,90deg) translate3d(0,-1500px,-2997px);
}
/**/
#sousCube.peel img.north{
/*transform*/
-webkit-transform:translate3d(0,0,-1600px);
-moz-transform:translate3d(0,0,-1600px);
-ms-transform:translate3d(0,0,-1600px);
-o-transform:translate3d(0,0,-1600px);
transform:translate3d(0,0,-1600px);
}
#sousCube.peel img.west{
/*transform*/
-webkit-transform:rotate3d(0,1,0,90deg) translate3d(-1500px,0,-100px);
-moz-transform:rotate3d(0,1,0,90deg) translate3d(-1500px,0,-100px);
-ms-transform:rotate3d(0,1,0,90deg) translate3d(-1500px,0,-100px);
-o-transform:rotate3d(0,1,0,90deg) translate3d(-1500px,0,-100px);
transform:rotate3d(0,1,0,90deg) translate3d(-1500px,0,-100px);
}
#sousCube.peel img.east{
/*transform*/
-webkit-transform:rotate3d(0,-1,0,90deg) translate3d(-1500px,0,-3100px);
-moz-transform:rotate3d(0,-1,0,90deg) translate3d(-1500px,0,-3100px);
-ms-transform:rotate3d(0,-1,0,90deg) translate3d(-1500px,0,-3100px);
-o-transform:rotate3d(0,-1,0,90deg) translate3d(-1500px,0,-3100px);
transform:rotate3d(0,-1,0,90deg) translate3d(-1500px,0,-3100px);
}
#sousCube.peel img.south{
/*transform*/
-webkit-transform:rotate3d(0,1,0,180deg) translate3d(-3000px,0,-1600px);
-moz-transform:rotate3d(0,1,0,180deg) translate3d(-3000px,0,-1600px);
-ms-transform:rotate3d(0,1,0,180deg) translate3d(-3000px,0,-1600px);
-o-transform:rotate3d(0,1,0,180deg) translate3d(-3000px,0,-1600px);
transform:rotate3d(0,1,0,180deg) translate3d(-3000px,0,-1600px);
}
#sousCube.peel img.top{
/*transform*/
-webkit-transform:rotateY(180deg) rotateX(-90deg) translate3d(-3000px,-1500px,-100px);
-moz-transform:rotateY(180deg) rotateX(-90deg) translate3d(-3000px,-1500px,-100px);
-ms-transform:rotateY(180deg) rotateX(-90deg) translate3d(-3000px,-1500px,-100px);
-o-transform:rotateY(180deg) rotateX(-90deg) translate3d(-3000px,-1500px,-100px);
transform:rotateY(180deg) rotateX(-90deg) translate3d(-3000px,-1500px,-100px);
}
#sousCube.peel img.bottom{
/*transform*/
-webkit-transform:rotate3d(1,0,0,90deg) translate3d(0,-1500px,-3100px);
-moz-transform:rotate3d(1,0,0,90deg) translate3d(0,-1500px,-3100px);
-ms-transform:rotate3d(1,0,0,90deg) translate3d(0,-1500px,-3100px);
-o-transform:rotate3d(1,0,0,90deg) translate3d(0,-1500px,-3100px);
transform:rotate3d(1,0,0,90deg) translate3d(0,-1500px,-3100px);
}
/*fallback*/
.no-csstransforms3d #bigCube, .no-csstransforms3d #cube{
width:800px;
height:500px;
margin:0;
}
.no-csstransforms3d #sousCube{
width:800px;
height:500px;
}
.no-csstransforms3d #sousCube img{
top:-150px;left:0;
width:800px;
height:auto;
}
.no-csstransforms3d #sousCube img.bottom,
.no-csstransforms3d #sousCube img.top{
display:none;
}
.txt{
color:#888;
text-shadow:0 1px 0 white;
padding:0 0 30px 0;
font:1em/1.5em sans-serif;
}
#container + .txt{
text-align:center;
}
.txt a{
color:#888;
text-decoration:none;
border-bottom:1px solid #aaa;
}
.txt a:hover{
color:#555;
border-bottom:2px solid #555;
}
.txt p{
vertical-align:baseline;
}
pano.js
$(function(){
var tabClass = new Array('north','west','east','south','top','bottom');
var w = $('#container').width();
var h = $('#container').height();
var hH = 2; // hauteur horizon: centre
var off = $('#container').offset();
var angleX = 180;
var angleY = 45;
var xi,yi,xf,yf;
var valLR = valTB = value = 0;
var move = false;
var axT = ayT = 0; //angle en cours
$('#container').mousedown(function(e){
// x y du clic init
xi = e.pageX - off.left;
yi = e.pageY - off.top;
// move oui
move=true;
// cosmetics
$(this).addClass('on'); // add cursor
$('#instructions').addClass('on');
e.preventDefault();
}).mousemove(function(e){
if(move){
// x y du clic mouse
xf = e.pageX - off.left;
yf = e.pageY - off.top;
// px et py entre -1 et 1
var pxi = (xi-(w/2))/(w/2);
var pyi = -((yi-(h/hH))/(h/hH));
var pxf = (xf-(w/2))/(w/2);
var pyf = -((yf-(h/hH))/(h/hH));
//diff
var dx = pxf-pxi;
var dy = pyf-pyi;
//angle (avec ajout de angle en cours)
valLR = angleX*dx + axT;
valTB = angleY*dy + ayT;
// angle 0 a -180:180 a 0
valLR = valLR % 360;
valTB = valTB % 360;
// val
value = 'rotateX('+(-valTB)+'deg) rotateY('+(-valLR)+'deg)';
$('#cube').css({
WebkitTransform:value,
MozTransform:value,
msTransform:value
});
e.preventDefault();
}
}).mouseup(function(){
move = false;
axT = valLR;
ayT = valTB;
$(this).removeClass('on');
}).mouseleave(function(){
move = false;
axT = valLR;
ayT = valTB;
$(this).removeClass('on');
});
//peel : click marche aussi avec navigation clavier
$('#peel button').click(function(){
$('#sousCube').toggleClass('peel');
$(this).toggleClass('on');
});
// menu de selection
$('#panoChoose').change(function(){
var name = $(this).val();
$('#sousCube div').empty().removeClass('on');
for(var i=0;i<6;i++){
var img = new Image();
img.src = "images/"+name+"/cube_"+i+".jpeg";
img.className = img.alt = tabClass[i];
img.width = 3000;
img.height = 3000;
$('#sousCube div').append(img);
}
$('#sousCube div').addClass('on');
$('#instructions').removeClass('on');
});
$('#sousCube div').addClass('on');
});
Installation Steps:
create the sub folder like bruxelles,eiffel,vendome in your main folder.
And then attached the below all images to bruxelles folder and main folder also.
The image name shoul be cube_0.jpeg, cube_1.jpeg, cube_2.jpeg, cube_3.jpeg, cube_4.jpeg, cube_5.jpeg.
And then attached the below all images to eiffel folder.
The image name shoul be cube_0.jpeg, cube_1.jpeg, cube_2.jpeg, cube_3.jpeg, cube_4.jpeg, cube_5.jpeg.
The image name shoul be cube_0.jpeg, cube_1.jpeg, cube_2.jpeg, cube_3.jpeg, cube_4.jpeg, cube_5.jpeg.
No comments:
Post a Comment