3D下拉菜单的代码:
<!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>RunJS</title> <script type="text/javascript" class="library" src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script> </head> <body> <div id="fold_box" class="P800"> <div id="fold" class="T3D fold_pager"> <h2>3D下拉菜单</h2> <div id="fold_list" class="T3D fold_pager" style="transform: rotateX(-180deg); -webkit-transform: rotateX(-180deg);"> <a href="#">基于 - jquery+缓动</a> <div class="T3D fold_pager" style="transform: rotateX(-180deg); -webkit-transform: rotateX(-180deg);"> <a href="#">基于 - jquery+缓动</a> <div class="T3D fold_pager" style="transform: rotateX(-180deg); -webkit-transform: rotateX(-180deg);"> <a href="#">基于 - jquery+缓动</a> <div class="T3D fold_pager" style="transform: rotateX(-180deg); -webkit-transform: rotateX(-180deg);"> <a href="#">基于 - jquery+缓动</a> <div class="T3D fold_pager" style="transform: rotateX(-180deg); -webkit-transform: rotateX(-180deg);"> <a href="#">基于 - jquery+缓动</a> <div class="T3D fold_pager" style="transform: rotateX(-180deg); -webkit-transform: rotateX(-180deg);"> <a href="#">基于 - jquery+缓动</a> <div class="T3D fold_pager" style="transform: rotateX(-180deg); -webkit-transform: rotateX(-180deg);"> <a href="#">基于 - jquery+缓动</a> <div class="T3D fold_pager" style="transform: rotateX(-180deg); -webkit-transform: rotateX(-180deg);"> <a href="#">基于 - jquery+缓动</a> <div class="T3D fold_pager" style="transform: rotateX(-180deg); -webkit-transform: rotateX(-180deg);"> <a href="#">基于 - jquery+缓动</a> <div class="T3D fold_pager" style="transform: rotateX(-180deg); -webkit-transform: rotateX(-180deg);"> <a href="#">基于 - jquery+缓动</a> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </body></html> |
JavaScript :
|
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
|
//添加缓动扩展jQuery.extend(jQuery.easing,{ easeOutBack: function (x, t, b, c, d, s) { if (s == undefined) s = 1.70158; return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; }}) var pageArr; function rotateDown(index) { if (index < 0 || index >= pageArr.length) { return; } var ele = pageArr.eq(index); ele.children("a").css("background-color", "#fff"); var obj = ele.data("obj"); if (!obj) { ele.data("obj", { r: getNumByEle(ele) }); obj = ele.data("obj"); } else obj.r = getNumByEle(ele); $(obj).animate({ r: 0 }, { duration: 1000, easing: "easeOutBack", step: function () { ele.css({ "-moz-transform": "rotateX(" + this.r + "deg)", "-webkit-transform": "rotateX(" + this.r + "deg)", "-0-transform": "rotateX(" + this.r + "deg)", "-ms-transform": "rotateX(" + this.r + "deg)", "transform": "rotateX(" + this.r + "deg)" }); //根据偏移量判断是否展开下一个 if (ele.data("opening")) return; //已经开始折叠下一个了 var rotateOff = getNumByEle(ele); if (rotateOff > -120) { ele.data("opening", true); rotateDown(index + 1); } }, complete: function () { ele.css({ "-moz-transform": "rotateX(0deg)", "-webkit-transform": "rotateX(0deg)", "-0-transform": "rotateX(0deg)", "-ms-transform": "rotateX(0deg)", "transform": "rotateX(0deg)" }); } }); } function rotateUp(index) { if (index < 0 || index >= pageArr.length) { return; } var ele = pageArr.eq(index); ele.children("a").css("background-color", "rgb(223,223,223)"); var obj = ele.data("obj"); if (!obj) { ele.data("obj", { r: getNumByEle(ele) }); obj = ele.data("obj"); } else obj.r = getNumByEle(ele); $(obj).animate({ r: -180 }, { duration: 600, easing: "linear", step: function () { ele.css({ "-moz-transform": "rotateX(" + this.r + "deg)", "-webkit-transform": "rotateX(" + this.r + "deg)", "-0-transform": "rotateX(" + this.r + "deg)", "-ms-transform": "rotateX(" + this.r + "deg)", "transform": "rotateX(" + this.r + "deg)" }); //根据偏移量判断是否折叠上一个 if (ele.data("closing")) return; //已经开始折叠上一个了 var rotateOff = getNumByEle(ele); if (rotateOff < -60) { ele.data("closing", true); rotateUp(index - 1); } }, complete: function () { ele.css({ "-moz-transform": "rotateX(-180deg)", "-webkit-transform": "rotateX(-180deg)", "-0-transform": "rotateX(-180deg)", "-ms-transform": "rotateX(-180deg)", "transform": "rotateX(-180deg)" }); } }); } function getNumByEle(ele) { var rotateStyle = ele.attr("style"); return rotateStyle.match(/rotateX\(([-]?\d+)/)[1]; } function stopAll() { for (var i = 0; i < pageArr.length; i++) { var ele = pageArr.eq(i); ele.data("opening", false); ele.data("closing", false); var obj = ele.data("obj"); if (obj && $(obj).stop) { $(obj).stop(true, false); } } }$(function(){ pageArr = $("#fold .fold_pager"); $("#fold").mousemove(function (e) { //Y轴旋转 var el = e.clientX - $(this).offset().left; var off = 60 * el / $(this).width() - 30; //this.style.transform = "rotateY(" + off + "deg)"; $(this).css({ "-webkit-transform":"rotateY(" + off + "deg)", "-moz-transform":"rotateY(" + off + "deg)", "-ms-transform":"rotateY(" + off + "deg)", "-o-transform":"rotateY(" + off + "deg)", "transform":"rotateY(" + off + "deg)" }); }).mouseenter(function () { //展开 stopAll(); rotateDown(0); }).mouseleave(function () { //折叠 stopAll(); rotateUp(pageArr.length - 1); });}); |
CSS :
|
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
|
*{ box-sizing: border-box;}.P800 { -webkit-perspective: 800px; -moz-perspective: 800px; -ms-perspective: 800px; perspective: 800px;}.T3D { -webkit-transform-style: preserve-3d; -moz-transform-style: preserve-3d; -ms-transform-style: preserve-3d; transform-style: preserve-3d;}body{} #fold_box { position: absolute; right: 100px; top: 0; width: 146px; height: 54px; } #fold h2 { margin: 0; width: 146px; height: 54px; padding-top: 18px; line-height: 36px; text-indent: 50px; font-size: 16px; color: #fff; position: relative; z-index: 2; font-family: arial; -ms-transform: translateZ(1px); -moz-transform: translateZ(1px); -webkit-transform: translateZ(1px); -o-transform: translateZ(1px); transform: translateZ(1px); } #fold_list { list-style: none; margin: 0; padding: 0; } .fold_pager { width: 146px; height: 30px; transform-origin: center top; } #fold_list a { display: inline-block; background-color: rgb(223, 223, 223); width: 146px; height: 29px; margin-bottom: 1px; line-height: 29px; color: #d16c6c; text-indent: 16px; font-size: 13px; text-decoration: none; z-index: 3; font-family: arial; -ms-transition: 0.6s; -moz-transition: 0.6s; -webkit-transition: 0.6s; -o-transition: 0.6s; transition: 0.6s; } #fold_list a:hover { background-color: #f69 !important; color: #fff; text-indent: 20px; font-size: 14px; box-shadow: 1px 1px 3px 2px #dfdfdf; } |

浙公网安备 33010602011771号