CSS3构建的3D盒子之导航应用

1.在用css3构建的盒子表面,放上iframe,来加载导航页面。

2.鼠标左键按下移动可旋转盒子,寻找想要的网址。

3.左键单机盒子表面,将全屏现实所点盒子表面的网站[iframe中],并可浏览,关闭后返回原来状态。

4.PC端,将额外显示2个css3做的旋转盒子[没什么意义]

5.移动端只显示一个导航盒子[模拟器正常,真机无效,留待以后查看,兼容开发有待提高。。。]

注:原本打算排列导航盒子,这样的话导航也变得比较好玩

但是,如果使用iframe来显示网站预览的话,速度太慢,太耗内存

尝试过用html2canvas,但是由于跨域问题,直接被灭

解决方法:通过服务器返回较实时的网站预览图的方式显示

---

可执行代码下载地址

http://download.csdn.net/detail/wangxsh42/8522151

---

效果图

PC端:

 

 

在线:

http://wangxinsheng.herokuapp.com/3dboxHome

代码段:

1.css3盒子构建:

html:

 <div class="cubeOut" style="left:25%;top:35%">
<div class='cube move'>
<div class='face'><iframe scrolling="no" loaded="0" url=""></iframe><div class="label"></div><div class="over"></div></div>
<div class='face'><iframe scrolling="no" loaded="0" url=""></iframe><div class="label"></div><div class="over"></div></div>
<div class='face'><iframe scrolling="no" loaded="0" url=""></iframe><div class="label"></div><div class="over"></div></div>
<div class='face'><iframe scrolling="no" loaded="0" url=""></iframe><div class="label"></div><div class="over"></div></div>
<div class='face'><iframe scrolling="no" loaded="0" url=""></iframe><div class="label"></div><div class="over"></div></div>
<div class='face'><iframe scrolling="no" loaded="0" url=""></iframe><div class="label"></div><div class="over"></div></div>
</div>
</div>

css3:

 .cubeOut{
height: 100%;
left: 50%;
margin-left: -10em;
margin-top: -10em;
-webkit-perspective: 1000px;
-ms-perspective: 1000px;
perspective: 1000px;
position: absolute;
top: 50%;
width: 100%;
}
.cube {
height: 100%;
position: absolute;
-webkit-transform-style: preserve-3d;
-ms-transform-style: preserve-3d;
transform-style: preserve-3d;
width: 100%;
transform: rotateX(-35deg) rotateY(35deg);
}
.cubeOut .move{ -webkit-animation: 6s spin linear infinite;
animation: 6s spin linear infinite;}
.cube * {
border: 2px solid rgba(54, 226, 248, 0.5);
display: block;
height: 100%;
position: absolute;
width: 100%;
}
.face {
cursor:pointer;
height: 100%;
position: absolute;
width: 100%;
}
.face:nth-child(1) {
transform: rotateY(0deg) translateZ(150px);
background: rgba(255, 102, 102, 0.75);
}
.face:nth-child(2) {
transform: rotateY(90deg) translateZ(150px);
background: rgba(179, 255, 102, 0.75);
}
.face:nth-child(3) {
transform: rotateY(180deg) translateZ(150px);
background: rgba(102, 255, 255, 0.75);
}
.face:nth-child(4) {
transform: rotateY(270deg) translateZ(150px);
background: rgba(178, 102, 255, 0.75);
}
.face:nth-child(5) {
transform: rotateX(90deg) translateZ(150px);
background: rgba(178, 102, 255, 0.75);
}
.face:nth-child(6) {
transform: rotateX(-90deg) translateZ(150px);
background: rgba(178, 102, 255, 0.75);
}
@keyframes spin {
from {
-webkit-transform: translateZ(-10em) rotateX(0) rotateY(0deg);
transform: translateZ(-10em) rotateX(0) rotateY(0deg);
} to {
-webkit-transform: translateZ(-10em) rotateX(360deg) rotateY(360deg);
transform: translateZ(-10em) rotateX(360deg) rotateY(360deg);
}
}
@-webkit-keyframes spin {
from {
-webkit-transform: translateZ(-10em) rotateX(0) rotateY(0deg);
transform: translateZ(-10em) rotateX(0) rotateY(0deg);
} to {
-webkit-transform: translateZ(-10em) rotateX(360deg) rotateY(360deg);
transform: translateZ(-10em) rotateX(360deg) rotateY(360deg);
}
}

2.js操作代码

iframe加载操作[缩放iframe大小,默认以1024宽度访问网站]

 $(".cube").find("iframe").each(function(i){
if(this.attributes.url.value!=''){
this.style.height = 1024+"px";
this.style.width = 1024+"px";
this.onload = this.onreadystatechange = iframeload;
this.src = this.attributes.url.value;}
}); function iframeload() {
if(outFrame===this){return;}
if (!this.readyState || this.readyState == "complete") {
this.focus();
this.style.transformOrigin = "left top";
this.style.transform = "scale("+targetWidth/1024+")";
this.style.display="block";
$(this).attr("loaded","1");
}
}

盒子旋转操作

 var overs = document.querySelectorAll(".fix .over");
for(var i =0;i<overs.length;i++){
if($(overs[i]).prev().prev().attr("url")!='')
overs[i].addEventListener("click", mouseclick, false);
overs[i].addEventListener("mousedown", mousedown, false);
document.addEventListener("mouseup", mouseup, false);
overs[i].addEventListener("mousemove", mousemove, false);
} function mousedown(e){
mouse.x=e.pageX;
mouse.y=e.pageY;
canmove = true;
}
function mouseup(e){
mouse.x=null;
mouse.y=null;
canmove = false;
}
function mousemove(e){
if(canmove && mouse.x!=null && mouse.y!=null){
var ydeg=0,xdeg=0;
xdeg = e.touches[0].pageX - mouse.x;
ydeg = e.touches[0].pageY - mouse.y;
xd = (xd + xdeg)%360;
yd = (yd -ydeg)%360;
e.touches[0].target.parentNode.parentNode.style.transform = "rotateX("+yd+"deg) rotateY("+xd+"deg)";
mouse.x=e.touches[0].pageX;
mouse.y=e.touches[0].pageY; }
}

盒子点击操作

     function mouseclick(e){
var index = $(e.target.parentNode.parentNode.parentNode).find(".over").index($(e.target));
switch(index){
case 0:
xd = 0;
yd = 0;
break;
case 1:
xd = -270;
yd = 0;
break;
case 2:
xd = -180;
yd = 0;
break;
case 3:
xd = -90;
yd = 0;
break;
case 4:
xd = 0;
yd = -90;
break;
case 5:
xd = 0;
yd = 90;
break;
default:;
}
outFrame = e.target.parentNode.parentNode.getElementsByTagName("iframe")[index]; if($(outFrame).attr("loaded")=="0")
return; $(e.target).unbind();
mouse.x=null;
mouse.y=null;
canmove = false;
e.target.parentNode.parentNode.parentNode.style.zIndex="1000";
$("#grayDiv").remove();
$("body").append("<div id='grayDiv' style='position:absolute;left:0px;top:0px;background-color:rgba(0,0,0,0.8);z-index:999;width:"+window.innerWidth+"px;height:"+window.innerHeight+"px;'></div>"); e.target.parentNode.parentNode.style.transform = "rotateX("+yd+"deg) rotateY("+xd+"deg)";
$(outFrame).attr("loaded","0");
outFace = $(e.target).prev();
$(outFrame).appendTo("#grayDiv");
$(outFrame).attr("scrolling","auto");
outFrame.style.transform = "scale("+1+")";
$(outFrame).css("height",window.innerHeight+"px");
$(outFrame).css("width",window.innerWidth+"px");
e.target.parentNode.parentNode.parentNode.style.zIndex="2";
$("<div id='close' style='position:absolute;left:0;top:0;'>关闭</div>").appendTo("#grayDiv");
$("#close").click(function(e){
$(outFrame).insertBefore(outFace);
$(outFrame).attr("scrolling","no");
outFrame.style.transform = "scale("+targetWidth/1024+")";
$(outFrame).css("height",1024+"px");
$(outFrame).css("width",1024+"px");
outFrame = null;
outFace = null;
$("#grayDiv").remove();
});
}

---

css3 3D盒子代码参考:

http://www.html5tricks.com/html5-animated-cube.html

http://www.html5tricks.com/html5-3d-cube.html

---

chrome移动端模拟器效果[真机目前无效,留待以后查看问题]:

[应用][js+css3]3D盒子导航[PC端]的更多相关文章

  1. js判断用户是在PC端或移动端访问

    js如何判断用户是在PC端和还是移动端访问.  最近一直在忙我们团队的项目“咖啡之翼”,在这个项目中,我们为移动平台提供了一个优秀的体验.伴随Android平台的红火发展.不仅带动国内智能手机行业,而 ...

  2. 基于React.js网页版弹窗|react pc端自定义对话框组件RLayer

    基于React.js实现PC桌面端自定义弹窗组件RLayer. 前几天有分享一个Vue网页版弹框组件,今天分享一个最新开发的React PC桌面端自定义对话框组件. RLayer 一款基于react. ...

  3. js实现一个可以兼容PC端和移动端的div拖动效果

    前段时间写了一个简单的div拖动效果,不料昨天项目上正好需要一个相差不多的需求,就正好用上了,但是在移动端的时候却碰到了问题,拖动时候用到的三个事件:mousedown.mousemove.mouse ...

  4. JS判断android ios系统 PC端和移动端

    最近公司上线移动端,需要根据不同的系统跳转到不同的产品页面,百度后发现这一段代码很好用,不但可以判断当前是什么系统,还能知道当前浏览器是什么内核,移动端PC端都已测试无问题! var browser ...

  5. JS判断终端设备跳转PC端、移动端相应的URL

    <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta nam ...

  6. js判断当前浏览器是pc端还是移动端

    根据用户的访问设备的不同来显示不同的页面样式,主要是判断移动设备还是电脑浏览器访问的. 下面给出js判断处理代码,以作参考. <script type="text/javascript ...

  7. js判断是手机还是PC端

    有时接触一些手机上的适应,需要知道是pc 还是移动端 function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = [ ...

  8. js 判断移动设备、pc端、android、iPhone、是否为微信、微博、qq空间

    varbrowser = {   versions: function () {      var u = navigator.userAgent, app = navigator.appVersio ...

  9. js photoswipe 相册使用 移动pc端均可

    http://photoswipe.com/ 官网  这里使用的是最新 4.1.1版本 http://photoswipe.com/documentation/getting-started.html ...

随机推荐

  1. java中finally和return的执行顺序

    注意:return的位置... 从这几个例子中可以看到,如果try之前没有有条件的return,则try..catch..finally语句块中的语句都是顺序执行(如果try中或者catch中 有re ...

  2. 《BI那点儿事》Microsoft 决策树算法

    Microsoft 决策树算法是由 Microsoft SQL Server Analysis Services 提供的分类和回归算法,用于对离散和连续属性进行预测性建模.对于离散属性,该算法根据数据 ...

  3. c++ ofstream & ifstream文件流操作

    ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; //ofstream & ifstream inherit from istream class ...

  4. MySql操作时间

    今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 7天 DAY) <= date(时间字段名) 近30天 DAY) &l ...

  5. 意译:《JVM Internals》

    译者语 为加深对JVM的了解和日后查阅时更方便,于是对原文进行翻译.内容是建立在我对JVM的认识的基础上翻译的,加上本人的英语水平有限,若有纰漏请大家指正,谢谢. 原文地址:http://blog.j ...

  6. 大话ASP.NET开发(第一章 html5+css3+解耦问题的探讨)

    一.拉近我们的距离 我想,很多人会问,如今IE6还占据颇多份额的中国,html5.css3是否还很遥远?我会很直接告诉他们:其实就在你的眼前.我们来看两个图:                      ...

  7. [译]学习IPython进行交互式计算和数据可视化(六)

    第五章:高性能并行计算 一个反复被提及的反对使用Python进行高性能数值计算的言论是这种语言是动态解释型的,速度太慢.一种编译型低级语言,如C,能提供比它快几个数量级的运算速度.我们在第三章--使用 ...

  8. Git 查看文件的历史

    用惯了tfs,刚一接触git感觉很不顺手,特别是一些很基本的操作,用起来都怪怪的(可能是不习惯命令行的原因吧).下面把查看文件历史的用例小结一下. 查看某个文件的修改历史 在git中查看历史的命令主要 ...

  9. ECLIPSE ANDROID PROJECT IMPORT SUMMARY

    ECLIPSE ANDROID PROJECT IMPORT SUMMARY======================================Manifest Merging:------- ...

  10. ADB pm 命令

    usage: pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user USER_TER] pm list permission-grou ...