<!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>