前言

程序猿都是直男,只会工作,我笑了。或许只有自己人才懂得他们的浪漫吧,今天分享一个3D相册,拿去发给girlfriend的那种啦!话不多说,上源码。

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>3D相册</title>
<style>
*{margin: 0;padding: 0;}
html,body{height: 100%;}
body{
overflow: hidden;
display: flex;
background: #000;
perspective: 1000px;
transform-style: preserve-3d;
}
#box{
position: relative;
display: flex;
width: 130px;
height: 200px;
margin: auto;
transform-style: preserve-3d;
transform: rotateX(-10deg);
}
#box > div{
transform-style: preserve-3d;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
line-height: 200px;
font-size: 50px;
text-align: center;
box-shadow:0 0 10px #fff;
-webkit-box-reflect:below 10px -webkit-linear-gradient(top,rgba(0,0,0,0) 40%,rgba(0,0,0,.8) 100%);
}
/* #box > div:nth-child(1){
background: skyblue;
transform: translate3d(0,0,300px) rotateY(45deg);
}
#box > div:nth-child(2){
background: pink;
transform: rotateY(0deg);
}
#box > div:nth-child(3){
background: purple;
transform: translate3d(0,0,300px) rotateY(-45deg);
}
*/
#box p{
position: absolute;
left: 0;
top: 0;
bottom: 0;
right: 0;
margin: auto;
width: 1200px;
height: 1200px;
background: -webkit-radial-gradient(center center,600px 600px,rgba(50,50,50,1),rgba(0,0,0,0));
border-radius: 50%;
transform: rotateX(90deg) translate3d(-600px,0,-105px);
}
</style>
</head>
<body>
<div id="box">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<p></p>
</div>
<script>
setTimeout(init,100);
function init(){
var obox = document.getElementById('box'),
aDiv = obox.getElementsByTagName('div');

for (var i = 0; i < aDiv.length; i++) {
aDiv[i].style.background = "url(images/"+(i+1)+".jpg) center/cover";
aDiv[i].style.transform = "rotateY("+(i*36)+"deg) translate3d(0,0,350px)";
aDiv[i].style.transition = "transform 1s "+(aDiv.length-i)*0.2+"s";
}
var sX,
sY,
nX,
nY,
desX = 0,
desY = 0,
tX = 0,
tY = 10,
index = 0;//滚轮初始值
document.onmousedown = function(e){
clearInterval(obox.timer);
e = e || window.event;
var sX = e.clientX,
sY = e.clientY;
this.onmousemove = function(e){
e = e || window.event;
var nX = e.clientX,
nY = e.clientY;
// 当前点的坐标和前一点的坐标差值
desX = nX - sX;
desY = nY - sY;
tX += desX*0.1;
tY += desY*0.1;

obox.style.transform = "rotateX("+(-tY)+"deg) rotateY("+tX+"deg)";
sX = nX;
sY = nY;
}
this.onmouseup = function(){
this.onmousemove = this.onmouseup = null;
obox.timer = setInterval(function(){
desX *= 0.95;
desY *= 0.95;
tX += desX*0.1;
tY += desY*0.1;
obox.style.transform = "rotateX("+(-tY)+"deg) rotateY("+tX+"deg)";
if (Math.abs(desX)<0.5 && Math.abs(desY)<0.5) {
clearInterval(obox.timer);
}
},13);
}
return false;
}
//滚轮放大缩小
mousewheel(document,function(e){
e = e || window.event;
var d = e.wheelDelta/120 || -e.detail/3;
if (d>0) {
index-=20;
}else{
index+=30;
}
(index<(-1050)&&(index=(-1050)));
document.body.style.perspective = 1000 + index + "px";
})
function mousewheel(obj,fn){
document.onmousewheel===null?obj.onmousewheel=fn:addEvent(obj,"DOMMouseScroll",fn)
}
function addEvent(obj,eName,fn){
obj.attachEvent?obj.attachEvent("on"+eName,fn):obj.addEventListener(eName,fn);
}
}
</script>
</body>
</html>

效果

这就是整个3D相册的框架了,一共10个照片框,也就是放10张照片了。框架有了,当然还需要的就是女友滴照片啦。

最终的效果差不多就是这个样子啦,因为为了省劲所以我只弄了6张,其实他是可以弄10张的,当然20张也是可以的,但是没必要,如果实在有需要的人可以联系我。还有就是为什么这个叫3D相册呢,因为他这个是可以拖动和旋转的。有点敷衍,啊哈哈。

tips:

需要注意的是10张照片的格式要求全为jpg格式,还有就是重命名改为1-10,例如1.jpg,2.jpg 等等,然后新建一个文件夹名为images,把照片放入其中。最后记得把源码文件跟images放在同一目录下并改为html格式。这样,女友相册就生成了。

还在等什么,你的女朋友在等你,还不快去!