第一步:我们首先要通过CSS来完成一个基本布局,利用 transform-style: preserve-3d设置成3D。
下面是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
|
* { margin : 0 ; padding : 0 ; box-sizing: border-box; } li { list-style : none ; } /* 轮播图 */ .homePage { width : 800px ; height : 200px ; margin : 150px auto ; background-color : pink; position : relative ; /* overflow: hidden; */ } .homePage>ul { width : 100% ; height : 100% ; } .homePage>ul>li { width : 200px ; height : 100% ; float : left ; transform-style: preserve -3 d; position : relative ; transition: all 1 s; } .homePage>ul>li>span { position : absolute ; top : 0 ; left : 0 ; width : 100% ; height : 100% ; } .homePage>ul>li>span:nth-child( 1 ) { background-image : url (../images/bxqy.jpg); transform: translateZ( 100px ); } .homePage>ul>li>span:nth-child( 2 ) { background-image : url (../images/fczlm.jpg); transform: rotateX( 90 deg) translateZ( 100px ); } .homePage>ul>li>span:nth-child( 3 ) { background-image : url (../images/hfh.jpg); transform: rotateX( 180 deg) translateZ( 100px ); } .homePage>ul>li>span:nth-child( 4 ) { background-image : url (../images/ss.jpg); transform: rotateX( 270 deg) translateZ( 100px ); } /* 图片的定位 */ .homePage>ul>li:nth-child( 2 ) span { background-position : -200px 0 ; } .homePage>ul>li:nth-child( 3 ) span { background-position : -400px 0 ; } .homePage>ul>li:nth-child( 4 ) span { background-position : -600px 0 ; } /* 小按钮 */ a { position : absolute ; width : 30px ; height : 70px ; background-color : rgba( 0 , 0 , 0 ,. 2 ); text-decoration : none ; color : #fff ; top : 50% ; margin-top : -35px ; line-height : 70px ; text-align : center ; display : none ; } . right { right : 0 ; } |
第二步:我们利用JS来调整图片运动时的切割速度以及方向。
下面是js的代码。
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
|
$( function (){ var index = 0; var flag = true ; var time = setInterval(move, 700); // 下一张 function move(){ if (!flag) return ; flag = false ; index++; $( ".homePage>ul>li" ).css( "transform" , "rotateX(" + (-90 * index) + "deg)" ).each( function (index,item){ $(item).css( "transition-delay" ,index * 0.2 + "s" ); }); } // 移入移出 $( ".homePage" ).mouseenter( function (){ clearInterval(time); $( ".homePage>a" ).css( "display" , "block" ); }) $( ".homePage" ).mouseleave( function (){ time = setInterval(move, 700); $( ".homePage>a" ).css( "display" , "none" ); }) // 点击左边按钮:上一张 $( ".left" ).on( "click" , function (){ if (!flag) return ; flag = false ; index--; $( ".homePage>ul>li" ).css( "transform" , "rotateX(" + (-90 * index) + "deg)" ).each( function (index,item){ $(item).css( "transition-delay" ,index * 0.2 + "s" ); }); }) // 点击有面按钮:下一张 $( ".right" ).click(move); // 动画整个过渡结束之后,transitionend过渡完成时触发 $( "li:last" ).on( "transitionend" , function (){ flag = true ; }) }) |
最后:body区域代码如下
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
|
< div class = "homePage" > < ul > < li > < span ></ span > < span ></ span > < span ></ span > < span ></ span > </ li > < li > < span ></ span > < span ></ span > < span ></ span > < span ></ span > </ li > < li > < span ></ span > < span ></ span > < span ></ span > < span ></ span > </ li > < li > < span ></ span > < span ></ span > < span ></ span > < span ></ span > </ li > </ ul > < a class = "left" href = "javascript:;" ><</ a > < a class = "right" href = "javascript:;" >></ a > </ div > < script src = "js/jquery-1.8.3.min.js" ></ script > < script src = "js/demo.js" ></ script > |
注意:要利用 overflow: hidden;来隐藏切割时超出的部分。最后3D切割轮播图就完成了。