基于CSS3实现三维视图展示功能

注:基于CSS3和Jquery实现三维视图展示,根据自己需求可进行相应修改,由于IE对CSS3支持有限,所以此三维视图不支持IE浏览器。仅供参考,如有雷同,纯属巧合。


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >

    <html>  
    <head>  
        <title>三维展示</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <style>
            .body_all{
              width:100%;
            
            }
            .body_right{
             width:18%;
             float:left;
            }
            
            .body_left{
              width:80%;
              float:left;
            }
            
            .stage{
               perspective: 800px;
               /*初始视角*/
               perspective-origin:50% 50%;
            }   
            .container-box{
                width: 300px;
                height:300px;
                margin: 100px auto;
                position: relative;   
                transform-style: preserve-3d;
                transition:5s;
                
                /*旋转基准点*/
                transform-origin:center center 150px;
                /*Mozilla内核浏览器:firefox3.5+*/
                -moz-transform-origin: center center 150px;
               /*Webkit内核浏览器:Safari and Chrome*/
                -webkit-transform-origin: center center 150px;
                /*Opera*/
                -o-transform-origin: center center 150px ;
                /*IE9*/
                -ms-transform-origin: center center 150px;
               /*W3C标准*/
               transform-origin: center center 150px ;
               
            }   
            
            .container-box .side-bottom{
               position: absolute;
               width: 300px;
               height: 240px;
               border:1px solid #000000;
               text-align: center;
               line-height: 240px;
            }
            
            .container-box .side-right{
               position: absolute;
               width: 240px;
               height: 420px;
               border:1px solid #000000;
               text-align: center;
               line-height: 420px;
            }
            
            .container-box .side-back{
               position: absolute;
               width: 300px;
               height: 420px;
               border:1px solid #000000;
               text-align: center;
               line-height: 420px;
            }
            
            .container-box .side-layer{
               position: absolute;
               width: 300px;
               height: 420px;
               line-height: 420px;
               border:1px solid #000000;
               text-align: center;
            }
            
            .right{left:302px;
               /*围绕Y轴  */
               -moz-transform:rotateY(-90deg) ;
               -webkit-transform:rotateY(-90deg);
               -o-transform: rotateY(-90deg);
               -ms-transform:rotateY(-90deg);
               transform: rotateY(-90deg);
               /*旋转基点--X */
               -moz-transform-origin: left;
               -webkit-transform-origin: left;
               -o-transform-origin: left;
               -ms-transform-origin: left;
               transform-origin: left ;
            }   
            
             .bottom{top:422px;
               /*围绕X轴*/
               -moz-transform:rotateX(90deg) ;
               -webkit-transform:rotateX(90deg);
               -o-transform: rotateX(90deg);
               -ms-transform:rotateX(90deg);
               transform: rotateX(90deg);
               /*旋转基点--Y*/   
               -moz-transform-origin: top;
               -webkit-transform-origin: top;
               -o-transform-origin: top;
               -ms-transform-origin: top;
               transform-origin: top ;
             }   

           
            .back{z-index:1;}   
            
            .layer{
                /*top:120px;*/
                /*围绕X轴*/
               -moz-transform:rotateX(90deg) ;
               -webkit-transform:rotateX(90deg);
               -o-transform: rotateX(90deg);
               -ms-transform:rotateX(90deg);
               transform: rotateX(90deg);
               /*旋转基点--Y*/           
               -moz-transform-origin: top;
               -webkit-transform-origin: top;
               -o-transform-origin: top;
               -ms-transform-origin: top;
               transform-origin: top ;
            }
            
           
            .container:hover{
                -moz-transform:rotateX(-30deg);
                -webkit-transform:rotateX(-30deg);
                -o-transform: rotateX(-30deg);
                -ms-transform:rotateX(-30deg);
                transform: rotateX(-30deg);    
            }
            
            .blank{
              width:39px;
              height:39px;
              line-height:40px;
              float:left;
              border-right:1px solid #000000;
              border-bottom:1px solid #000000;
              background-color:#E5E5E5;
            }
            
             .blank_fill{
              width:39px;
              height:39px;
              line-height:40px;
              float:left;
              border-right:1px solid #000000;
              border-bottom:1px solid #000000;
            }
            
            .content{
              width:100%;
              float:left;
              border:1px solid black;
              border-radius:5px;
              margin-bottom:20px;
            }
            
            .color_line{
              width:100%;
              height:20px;
              margin-top:10px;
            }
            
            .line_text_left{
              width:40px;
              height:40px;
              line-height:40px;
              text-align:left;
              float:left;
            }
            .line_text_right{
              width:40px;
              height:40px;
              line-height:40px;
              float:left;
            }
            
            .operation_line{
              width:100%;
              height:55px;
              text-align:center;
            }
            
            
            
            
            .icon{
               background: url(play1.png) no-repeat; /*url为png图片的路径*/
               /*width和line-height分别对应每个小图标的宽和高*/
               width: 55px;
               height:53px;
               display: inline-block;
            }
            .icon-left{   /*png图片左上角为原点,往右往下均为负值*/
               background-position: -3px -67px;/*对应小图标的坐标*/
            }
            .icon-right{   /*png图片左上角为原点,往右往下均为负值*/
               background-position: -148px -67px;/*对应小图标的坐标*/
            }
            .icon-top{   /*png图片左上角为原点,往右往下均为负值*/
               background-position: -73px -3px;/*对应小图标的坐标*/
            }
            .icon-bottom{   /*png图片左上角为原点,往右往下均为负值*/
               background-position: -73px -140px;/*对应小图标的坐标*/
            }
            .icon-ok{   /*png图片左上角为原点,往右往下均为负值*/
               background-position: -73px -70px;/*对应小图标的坐标*/
            }
            .icon-no{   /*png图片左上角为原点,往右往下均为负值*/
               background-position: -147px -3px;/*对应小图标的坐标*/
            }
            .button{
               border:none;
            
            }
        </style>
        <script src="jquery.js"></script>
    </head>  
    <body>  
      <div class="body_all">
         <div class="body_left">
           <div class="stage">  
            <div class="container-box" id="container">
                <!-- back begin-->
                <div class="side-back back" id="back_line">
                </div>
                <!-- back begin-->
                
                <!-- right begin-->
                <div class="side-right right" id="right_line">
                </div>
                <!-- right end-->

                <!-- bottom begin-->
                <div class="side-bottom bottom" id="bottom_line">
                </div>
                <!-- bottom end-->
            </div>         
          </div>
         </div>
         <div class="body_right">
            <div class="content" id="content">
            </div>
            <div class="content" id="console">

            </div>
            <div class="content" id="operation">
               <div class="color_line" style="text-align:center; border-bottom:1px solid black;">显示旋转</div>
               <div class="operation_line">
                 
                 <input type="button" class="button icon icon-top" οnclick="rotate('x',30)" >
                
                 
               </div>
               <div class="operation_line">
               <input type="button" class="button icon icon-left" οnclick="rotate('z',-30)" >
               <input type="button" id="contr" class="button icon icon-no" οnclick="run(this)" >
               <input type="button" class="button icon icon-right" οnclick="rotate('z',30)" >  
               </div>
               <div class="operation_line">
                <input type="button" class="button icon icon-bottom" οnclick="rotate('x',-30)" >
               </div>
            </div>
            
         </div>
      </div>
       


    <script type="text/javascript" charset='utf-8'>
    
        var degXs=0;
        var degYs=0;
        var timeout = false; //启动及关闭按钮
        
        function rotate(type,degs){
            timeout = true;
            $("#contr").attr('class','button icon icon-no');
            
            if(type=='z'){
            degYs=(degs+degYs)%360;
            }
            
            if(type=='x'){
            degXs=(degs+degXs)%360;
            }
            document.getElementById('container').style.transform='rotateX('+degXs+'deg) rotateY('+degYs+'deg)';
        }
        
        
        //var degs = 0;
        
        function run(data){
            if($(data).attr('class') =='button icon icon-no'){
              $(data).attr('class','button icon icon-ok');
              timeout = false;
            }else{
              $(data).attr('class','button icon icon-no');
              timeout = true;
            };
          aaa();
        }
        var flg = false;
        function aaa(){
          if(timeout) return;  
           runy();  
           setTimeout(aaa,1000); //time是指本身,延时递归调用自己,100为间隔调用时间,单位毫秒  
           
           //setInterval (runy(), 1000);
           function runy(){
             //degYs+=15;
            
             if(!flg){
                degYs+=15;
                if(degYs>90){
                  flg=true;
                }
             }else{
               degYs-=15;
               if(degYs<-90){
                 flg = false;
               }
             }
             document.getElementById('container').style.transform='rotateY('+degYs+'deg) rotateX('+degXs+'deg)';
           }
        }
    
    
          var rows,cols,lay;  //行,列,层
          var blank_size=40;  //小方格大小
          
          var back_bg=$('#back_line');
          var right_bg=$('#right_line');
          var bottom_bg= $('#bottom_line');
          var container =$('#container');
          var consoleCon = $('#console');
          var colorarr=['#00FF00','#EEEE00','#FF7F50','#FF3030'];
          var namearr=['0℃~10℃&nbsp;','10℃~20℃&nbsp;','20℃~30℃&nbsp;','30℃~50℃&nbsp;'];
          
          var data="11.0 11.1 11.2 11.3 11.4 11.5 11.6 12.0 12.1 12.2 12.3 12.4 12.5 12.6 13.0 13.1 13.2 13.3 13.4 13.5 13.6 14.0 14.1 14.2 14.3 14.4 14.5 14.6 15.0 15.1 15.2 15.3 15.4 15.5 15.6 21.0 21.1 21.2 21.3 21.4 21.5 21.6 22.0 22.1 22.2 22.3 22.4 22.5 22.6 23.0 23.1 23.2 23.3 23.4 23.5 23.6 24.0 24.1 24.2 24.3 24.4 24.5 24.6 25.0 25.1 25.2 25.3 25.4 25.5 25.6 31.0 31.1 31.2 31.3 31.4 31.5 31.6 32.0 32.1 32.2 32.3 32.4 32.5 32.6 33.0 33.1 33.2 33.3 33.4 33.5 33.6 34.0 34.1 34.2 34.3 34.4 34.5 34.6 35.0 35.1 35.2 35.3 35.4 35.5 35.6 41.0 41.1 41.2 41.3 41.4 41.5 41.6 42.0 42.1 42.2 42.3 42.4 42.5 42.6 43.0 43.1 43.2 43.3 43.4 43.5 43.6 44.0 44.1 44.2 44.3 44.4 44.5 44.6 45.0 45.1 45.2 45.3 45.4 45.5 45.6";
          var arr = data.split(" ");
          
          
          
          function drowpanel(colorarr,namearr){
            var results="<div class='color_line' style='text-align:center;border-bottom:1px solid black;'>温度参照示图</div>";
            for(var i=0;i<colorarr.length;i++){
              results+="<div class='color_line'>";
              results+="<div style='width:50%; height:20px;display:inline; float:left; text-align:right;'>"+namearr[i]+"</div>";
              results+="<div style='width:30%; height:20px;background-color:"+colorarr[i]+";display:inline;float:left;'></div></div>";
            }
            results+="<div class='color_line'></div>";
            $("#content").append(results);
          }
         
          initcontainer(5,7,4);
          drowpanel(colorarr,namearr);
          //初始化侧面,线条,坐标
          function initcontainer(rows,cols,lay){
            lay++;
            var widths= cols*blank_size;
            var heights = rows*blank_size;
            var zHeights = lay*blank_size;
            back_bg.css("height",zHeights).css("width",widths).css("line-height",zHeights);            
            right_bg.css("height",zHeights).css("width",heights).css("left",widths+2).css("line-height",zHeights);
            bottom_bg.css("height",heights).css("width",widths).css("top",zHeights+2).css("line-height",heights);    
            drow_bg_blank(bottom_bg,rows*cols,widths,heights);
            drow_bg_blank(right_bg,rows*lay,heights,zHeights);
            drow_bg_blank(back_bg,lay*cols,widths,zHeights);
            
            
            drow_bottom_x(bottom_bg,cols,widths,heights);
            drow_top_x(back_bg,cols,widths,heights);
            
            drow_bottom_y(bottom_bg,rows,widths,heights);
            drow_top_y(right_bg,rows,widths,heights);
            
            drow_right_z(right_bg,lay,zHeights,heights);
            drow_left_z(back_bg,lay,zHeights,heights);
            
            
            drow_data(lay,widths,heights,rows,cols);
          }
          
          //侧面线条,bg_con:容器,countblank:方格改书,divwidth:宽,divheight:高
          function drow_bg_blank(bg_con,countblank,divwidth,divheight){
            var results ="<div stype='width:"+divwidth+";height:"+divheight+";'>";
            for(var i=0;i<countblank;i++){        
            results+="<div class='blank'></div>";
            }
             results+="</div>";
             bg_con.append(results);
          }
          //bg_con:容器,wid:宽度,hei:高度
          //底部X轴
          function drow_bottom_x(bg_con,cols,wid,hei){
             var results ="<div style='width:"+wid+"px;height:"+blank_size+"px;position:absolute;top:"+hei+"px;left:-"+blank_size/6+"px;'>";
             for(var i=0;i<cols-1;i++){
                results+="<div class='line_text_left'>";
                results+=i;
                results+="</div>"
             }
             results+="<div class='line_text_left'>X</div>"
             results+="</div>";
            bg_con.append(results);
          }
          //bg_con:容器,wid:宽度,hei:高度
          //顶部X轴
         function drow_top_x(bg_con,cols,wid,hei){
             var results ="<div style='width:"+wid+"px;height:"+blank_size+"px;position:absolute;top:-"+blank_size+"px;left:-"+blank_size/6+"px;'>";
             for(var i=0;i<cols-1;i++){
                results+="<div class='line_text_left'>";
                results+=i;
                results+="</div>"
             }
             results+="<div class='line_text_left'>X</div>"
             results+="</div>";
            bg_con.append(results);
          }
        
          //bg_con:容器,wid:宽度,hei:高度
          //底部Y轴
          function drow_bottom_y(bg_con,cols,wid,hei){
             var results ="<div style='width:"+blank_size+"px;height:"+hei+"px;position:absolute;left:-"+blank_size+"px;top:"+blank_size/3+"px;'>";
              results+="<div class='line_text_right'>Y</div>"
             for(var i=0;i<cols-1;i++){
                results+="<div class='line_text_right'>";
                results+=cols-2-i;
                results+="</div>"
             }
            
             results+="</div>";
            bg_con.append(results);
          }
          
          //bg_con:容器,wid:宽度,hei:高度
          //顶部Y轴
          function drow_top_y(bg_con,cols,wid,hei){
             var results ="<div style='width:"+hei+"px;height:"+blank_size+"px;position:absolute;top:-"+blank_size+"px;left:"+blank_size/3+"px;'>";
              results+="<div class='line_text_right'>Y</div>"
             for(var i=0;i<cols-1;i++){
                results+="<div class='line_text_right'>";
                results+=cols-2-i;
                results+="</div>"
             }
            
             results+="</div>";
            bg_con.append(results);
          }
          
          //bg_con:容器,wid:宽度,hei:高度
          //右侧Z轴
          function drow_right_z(bg_con,cols,wid,hei){
             var results ="<div style='width:"+blank_size+"px;height:"+wid+"px;position:absolute;left:"+hei+"px;top:"+blank_size/3+"px;'>";
              results+="<div class='line_text_right'>Z</div>"
             for(var i=0;i<cols-1;i++){
                results+="<div class='line_text_right'>";
                results+=cols-2-i;
                results+="</div>"
             }
            
             results+="</div>";
            bg_con.append(results);
          }
          
          //bg_con:容器,wid:宽度,hei:高度
          //右侧Z轴
          function drow_left_z(bg_con,cols,wid,hei){
             var results ="<div style='width:"+blank_size+"px;height:"+wid+"px;position:absolute;left:-"+blank_size+"px;top:"+blank_size/3+"px;'>";
              results+="<div class='line_text_right'>Z</div>"
             for(var i=0;i<cols-1;i++){
                results+="<div class='line_text_right'>";
                results+=cols-2-i;
                results+="</div>"
             }
             results+="</div>";
            bg_con.append(results);
          }
          
          
          function drow_data(lay,wid,hei,rows,cols){
            var resu ="<div class='color_line' style='text-align:center;border-bottom:1px solid black;'>层显控制</div>";
           for(var i=0;i<lay-1;i++){
             drow_data_lay(i+1,lay-i-1,wid,hei,rows,cols);
             resu+="<input type='radio' name='radioname' οnclick='showdata("+(i+1)+")'>"
             resu+="第 "+(i+1)+" 层<br>";
           }
            
            //输出按钮
             consoleCon.append(resu);
          }
          //画层
          function drow_data_lay(lay_h,lay,wid,hei,rows,cols){
            var results="<div class='side-layer layer' id='layer_"+lay_h+"' style='height:"+hei+"px;width:"+wid+"px;line-height:"+hei+"px;top:"+lay*blank_size+"px;'>";
            //results+=lay_h;
             results+="<div style='height:"+hei+";,width:"+wid+";'>";
            for(var i=0;i<rows*cols;i++){
              var num = arr[((lay-1)*rows*cols+i)];
              var colors;
              if(num<=10){
              colors=colorarr[0];
              }else if(num>10 && num<=20){
               colors=colorarr[1];
              }else if(num>20 && num<=30){
               colors=colorarr[2];
              }else{
               colors=colorarr[3];
              }
              results+="<div class='blank_fill' style='background-color:"+colors+"'>"+num+"</div>";
            }
            
            results+="</div>";
            container.append(results)
          }
          
          function drow_data_content(results,datacount,wid,hei){
           
          
          }
   
          
          //控制层显示
          function showdata(layid){
            $('.layer').hide();
            $('#layer_'+layid).show();
          }
          
          
        </script>
                
    </body>  
    </html>  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值