<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>3D球體</title> <style> html,body{ height: 100%; background-color: white; } .box{ width: 100%; height: 100%; perspective: 800px; position: relative; } .unit{ width: 100%; height: 100%; transform-style:preserve-3d; transition: all 1s ease 0s; } div.slice{ position: absolute; top: 50%; left: 50%; width: 60px; height: 80px; opacity: 0.3; background-color: yellowgreen; } </style> </head> <body> <div class="box"> <div class="unit"> </div></div>
<script type="text/javascript" src="js/jquery-1.12.3.min.js"></script> <script type="text/javascript" src="js/jquery-ui.min.js"></script> <script src="js/jquery.mousewheel.min.js"></script> <script type="text/javascript"> var $unit = $(".unit"); //調用函數 for(i=0;i<5;i++){ var arr=[18,15,12,9,6]; ball(i,arr[i]); //這里是continue,當i=0的時候,直接進入下一次循環。否則要執行ball(-i,arr【i】) if(i==0) continue; ball(-i,arr[i]); } //構造一個函數 有兩個參數 (層數,每層片數) function ball(floor,amount){ for(var i=0;i<amount;i++){ $("<div class='slice'></div>").css({ "transform": "rotateY("+ 360/amount*i + "deg) rotateX("+ floor*18 +"deg) translateZ(300px)" }).appendTo($(".unit")); }} //綁定拖拽的事件監聽 最好綁定在document上,綁定在unit上也行,就是鼠標必須在球上面移動,比較局限 $(document).mousedown(function(event){ var startX = event.clientX; var startY = event.clientY; $unit.css("transition","none"); $(document).mousemove(function(event){ event.preventDefault; var deltaX = event.clientX - startX; var deltaY = event.clientY - startY; $($unit).css({ "transform":"rotateX(" + deltaX/10 + "deg) rotateY(" + deltaY/10+"deg)", }) $(".slice").css({ "background" : "rgb(" + 111 + "," + 123+ "," + parseInt(Math.random() * 255) + ")" }) }) }) $(document).mouseup(function(){ $(document).off("mousemove"); }) //綁定滾輪的事件監聽 //初始景深 var per = 800; $(document).mousewheel(function(event,delta){ event.preventDefault(); //有了全局變量這里如果再定義per就會出錯 報的錯是語法錯誤“+=” 但其實是這個變量的問題 per += delta*40; if(per < 100) return; //景深限定在100 $(".box").css({ "perspective": per + "px" }) }) </script> </body> </html>
