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生成excel文件

    首先下载jexcelapi_2_6_12.tar.gz,解压后将里面的jxl.jar复制到WEB-INF/lib目录下面 String filePath = request.getParameter( ...

  2. POJ 2312Battle City(BFS-priority_queue 或者是建图spfa)

    /* bfs搜索!要注意的是点与点的权值是不一样的哦! 空地到空地的步数是1, 空地到墙的步数是2(轰一炮+移过去) 所以用到优先队列进行对当前节点步数的更新! */ #include<iost ...

  3. MySQL数据库工具类之——DataTable批量加入MySQL数据库(Net版)

    MySQL数据库工具类之——DataTable批量加入数据库(Net版),MySqlDbHelper通用类希望能对大家有用,代码如下: using MySql.Data.MySqlClient; us ...

  4. 数据库连接池之Proxool使用

    如果想要搭建一个高效的网站,链接池是必须用到的一部分.而连接池的选择是多种多样的.就现在的软件开发界而言,最为多用的是DBCP, c3p0, 和 proxool.而hibernate推荐使用的是c3p ...

  5. jQuery.queue源码分析

    作者:禅楼望月(http://www.cnblogs.com/yaoyinglong ) 队列是一种特殊的线性表,它的特殊之处在于他只允许在头部进行删除,在尾部进行插入.常用来表示先进先出的操作(FI ...

  6. Java开发中的高频Collections用法总结与Java平台实现源代码查看方式

    一生二,二生三,三生万物,基础永远是一个计算机人的立身之本,相信看到这篇文章的人一般都知道数据结构这门课程,要不也不会找到我的这篇文章.数据结构这门课程的分析奠定了工程师对各种平台中的容器类,集合类的 ...

  7. Windows Azure Service Bus (2) 队列(Queue)入门

    <Windows Azure Platform 系列文章目录> Service Bus 队列(Queue) Service Bus的Queue非常适合分布式应用.当使用Service Bu ...

  8. C#基础02

    学习"传智播客视频基础"做的课堂笔记,您有幸读到,若其中有错误部分,请您务必指明.另外请给出您的宝贵建议,谢谢. **************基础知识************ 1: ...

  9. C语言学习006:歌曲搜索

    #include <stdio.h> #include <string.h> //字符串处理库 ]={ "I left my heart in Harvard Med ...

  10. autofac 注入中i遇到的泛型传参问题

    using Autofac; using IService; using System; using System.Collections.Generic; using System.Linq; us ...