利用perspective 和 transform 里面的几个参数来实现旋转照片墙

旋转照片墙

首先,来看下,是什么效果吧,上效果图 ↓

 

其实这个东西,很容易制作,先说下思路, 把照片都给叠在一起,然后 rotateY 旋转,给每张图片 旋转不一样的角度能构成一圈, 然后translateZ 出去就好了,最后一步,父级转起来。

搭建好基本的 html 和 css ↓ 已经写好注释啦。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        :root,body{    /* root在html也就是文档,文档是有高度的,而body 是没有高度的,所以继承下来,给 body的子元素使用*/
            height: 100%;
        }
        .wra{
            position: absolute;    /* 把父级作为容器,定位到屏幕的中间去 */
            width: 200px;
            height: 100px;
            left: calc(50% - 100px);
            top: calc(50% - 50px);
        }
        .img{
            position: absolute;   /*设置定位属性,然后所与的图片就会 叠在一起。*/
            width: 200px;
            height: 100px;
        }
        .img:nth-of-type(1){
            background-image: url('./img/rotatePic/u=1036157886,1414018506&fm=26&gp=0.jpg');
            background-size: cover; /*这个参数,是为了更好的显示完整的图片,既是他有可能显示不全。*/
        }
        .img:nth-of-type(2){
            background-image: url('./img/rotatePic/u=1252635897,4048351284&fm=26&gp=0.jpg');
            background-size: cover;
        }
        .img:nth-of-type(3){
            background-image: url('./img/rotatePic/u=1369094069,1969348532&fm=26&gp=0.jpg');
            background-size: cover;
        }
        .img:nth-of-type(4){
            background-image: url('./img/rotatePic/u=1891680577,1135327170&fm=26&gp=0.jpg');
            background-size: cover;
        }
        .img:nth-of-type(5){
            background-image: url('./img/rotatePic/u=215760299,4224999617&fm=26&gp=0.jpg');
            background-size: cover;
        }
        .img:nth-of-type(6){
            background-image: url('./img/rotatePic/u=4188003421,389717180&fm=26&gp=0.jpg');
            background-size: cover;
        }
        .img:nth-of-type(7){
            background-image: url('./img/rotatePic/下载 (1).jfif');
            background-size: cover;
        }
        .img:nth-of-type(8){
            background-image: url('./img/rotatePic/下载 (2).jfif');
            background-size: cover;
        }
    </style>
</head>
<body>
    <div class="wra">
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
    </div>
</body>
</html>

效果如下:

基本架子搭建好后,给每张图片,旋转不同的位置。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        :root,body{   
            height: 100%;
        }
        .wra{
            position: absolute;    
            width: 200px;
            height: 100px;
            left: calc(50% - 100px);
            top: calc(50% - 50px);
        }
        .img{
            position: absolute;   
            width: 200px;
            height: 100px;
        }
        .img:nth-of-type(1){
            background-image: url('./img/rotatePic/u=1036157886,1414018506&fm=26&gp=0.jpg');
            background-size: cover; 
            /*第一张图片,就不用旋转了,让他在原位置就好。*/
        }
        .img:nth-of-type(2){
            background-image: url('./img/rotatePic/u=1252635897,4048351284&fm=26&gp=0.jpg');
            background-size: cover;
            transform: rotateY(45deg);
        }
        .img:nth-of-type(3){
            background-image: url('./img/rotatePic/u=1369094069,1969348532&fm=26&gp=0.jpg');
            background-size: cover;
            transform: rotateY(90deg);
        }
        .img:nth-of-type(4){
            background-image: url('./img/rotatePic/u=1891680577,1135327170&fm=26&gp=0.jpg');
            background-size: cover;
            transform: rotateY(135deg);
        }
        .img:nth-of-type(5){
            background-image: url('./img/rotatePic/u=215760299,4224999617&fm=26&gp=0.jpg');
            background-size: cover;
            transform: rotateY(180deg);
        }
        .img:nth-of-type(6){
            background-image: url('./img/rotatePic/u=4188003421,389717180&fm=26&gp=0.jpg');
            background-size: cover;
            transform: rotateY(225deg);
        }
        .img:nth-of-type(7){
            background-image: url('./img/rotatePic/下载 (1).jfif');
            background-size: cover;
            transform: rotateY(270deg);
        }
        .img:nth-of-type(8){
            background-image: url('./img/rotatePic/下载 (2).jfif');
            background-size: cover;
            transform: rotateY(315deg);
        }
    </style>
</head>
<body>
    <div class="wra">
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
    </div>
</body>
</html>

旋转好位置后,添加 translateZ() 参数,分开图片。因为,translateZ 也是 transform 的参数之一,所以要添加在rotate后面接上。最后,记得在15行添加上 perspective 属性。不懂什么是 perspective 属性的话,请点击→ css3系列之详解perspective

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8     <style>
 9         *{
10             padding: 0;
11             margin: 0;
12         }
13         :root,body{   
14             height: 100%;
15             perspective: 1000px;
16         }
17         .wra{
18             position: absolute;    
19             width: 200px;
20             height: 100px;
21             left: calc(50% - 100px);
22             top: calc(50% - 50px);
23             transform-style: preserve-3d; /*这个属性的作用呢,是为了让浏览器,以3d的方式来渲染,
24                                             这个属性要添在父级身上,那么他的子元素,就能以3d的方式展示。
25                                             浏览器默认的渲染方式是2d的,我们这种3d结构,他显示不出来。 */
26         }
27         .img{
28             position: absolute;   
29             width: 200px;
30             height: 100px;
31         }
32         .img:nth-of-type(1){
33             background-image: url('./img/rotatePic/u=1036157886,1414018506&fm=26&gp=0.jpg');
34             background-size: cover; 
35             transform: translateZ(350px);
36         }
37         .img:nth-of-type(2){
38             background-image: url('./img/rotatePic/u=1252635897,4048351284&fm=26&gp=0.jpg');
39             background-size: cover;
40             transform: rotateY(45deg) translateZ(350px);
41         }
42         .img:nth-of-type(3){
43             background-image: url('./img/rotatePic/u=1369094069,1969348532&fm=26&gp=0.jpg');
44             background-size: cover;
45             transform: rotateY(90deg) translateZ(350px);
46         }
47         .img:nth-of-type(4){
48             background-image: url('./img/rotatePic/u=1891680577,1135327170&fm=26&gp=0.jpg');
49             background-size: cover;
50             transform: rotateY(135deg) translateZ(350px);
51         }
52         .img:nth-of-type(5){
53             background-image: url('./img/rotatePic/u=215760299,4224999617&fm=26&gp=0.jpg');
54             background-size: cover;
55             transform: rotateY(180deg) translateZ(350px);
56         }
57         .img:nth-of-type(6){
58             background-image: url('./img/rotatePic/u=4188003421,389717180&fm=26&gp=0.jpg');
59             background-size: cover;
60             transform: rotateY(225deg) translateZ(350px);
61         }
62         .img:nth-of-type(7){
63             background-image: url('./img/rotatePic/下载 (1).jfif');
64             background-size: cover;
65             transform: rotateY(270deg) translateZ(350px);
66         }
67         .img:nth-of-type(8){
68             background-image: url('./img/rotatePic/下载 (2).jfif');
69             background-size: cover;
70             transform: rotateY(315deg) translateZ(350px);
71         }
72     </style>
73 </head>
74 <body>
75     <div class="wra">
76         <div class="img"></div>
77         <div class="img"></div>
78         <div class="img"></div>
79         <div class="img"></div>
80         <div class="img"></div>
81         <div class="img"></div>
82         <div class="img"></div>
83         <div class="img"></div>
84     </div>
85 </body>
86 </html>

然后你就能看见这种效果啦。

然后,我们给父级 加上旋转的功能就OK了。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        :root,body{   
            height: 100%;
            perspective: 1000px;
        }
        @keyframes run{   /*这里我们要他旋转360度,那么就不用那么麻烦写关键帧了。开始0  结束360,然后循环即可*/
            0%{
                transform: rotateY(0deg);
            }
            100%{
                transform: rotateY(360deg);
            }
        }
        .wra{
            position: absolute;    
            width: 200px;
            height: 100px;
            left: calc(50% - 100px);
            top: calc(50% - 50px);
            transform-style: preserve-3d;
            animation: run 20s linear infinite; /*animation linear是匀速运动,infinite是无限循环*/
        }
        .img{
            position: absolute;   
            width: 200px;
            height: 100px;
        }
        .img:nth-of-type(1){
            background-image: url('./img/rotatePic/u=1036157886,1414018506&fm=26&gp=0.jpg');
            background-size: cover; 
            transform: translateZ(350px);
        }
        .img:nth-of-type(2){
            background-image: url('./img/rotatePic/u=1252635897,4048351284&fm=26&gp=0.jpg');
            background-size: cover;
            transform: rotateY(45deg) translateZ(350px);
        }
        .img:nth-of-type(3){
            background-image: url('./img/rotatePic/u=1369094069,1969348532&fm=26&gp=0.jpg');
            background-size: cover;
            transform: rotateY(90deg) translateZ(350px);
        }
        .img:nth-of-type(4){
            background-image: url('./img/rotatePic/u=1891680577,1135327170&fm=26&gp=0.jpg');
            background-size: cover;
            transform: rotateY(135deg) translateZ(350px);
        }
        .img:nth-of-type(5){
            background-image: url('./img/rotatePic/u=215760299,4224999617&fm=26&gp=0.jpg');
            background-size: cover;
            transform: rotateY(180deg) translateZ(350px);
        }
        .img:nth-of-type(6){
            background-image: url('./img/rotatePic/u=4188003421,389717180&fm=26&gp=0.jpg');
            background-size: cover;
            transform: rotateY(225deg) translateZ(350px);
        }
        .img:nth-of-type(7){
            background-image: url('./img/rotatePic/下载 (1).jfif');
            background-size: cover;
            transform: rotateY(270deg) translateZ(350px);
        }
        .img:nth-of-type(8){
            background-image: url('./img/rotatePic/下载 (2).jfif');
            background-size: cover;
            transform: rotateY(315deg) translateZ(350px);
        }
    </style>
</head>
<body>
    <div class="wra">
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
        <div class="img"></div>
    </div>
</body>
</html>

最后,再加上一个小功能。像你想看哪里,鼠标就移动到 那里 即可,代码在93行开始。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8     <style>
 9         *{
10             padding: 0;
11             margin: 0;
12         }
13         :root,body{   
14             height: 100%;
15             perspective: 1000px;
16         }
17         @keyframes run{   
18             0%{
19                 transform: rotateY(0deg);
20             }
21             100%{
22                 transform: rotateY(360deg);
23             }
24         }
25         .wra{
26             position: absolute;    
27             width: 200px;
28             height: 100px;
29             left: calc(50% - 100px);
30             top: calc(50% - 50px);
31             transform-style: preserve-3d;
32             animation: run 20s linear infinite;
33         }
34         .img{
35             position: absolute;   
36             width: 200px;
37             height: 100px;
38         }
39         .img:nth-of-type(1){
40             background-image: url('./img/rotatePic/u=1036157886,1414018506&fm=26&gp=0.jpg');
41             background-size: cover; 
42             transform: translateZ(350px);
43         }
44         .img:nth-of-type(2){
45             background-image: url('./img/rotatePic/u=1252635897,4048351284&fm=26&gp=0.jpg');
46             background-size: cover;
47             transform: rotateY(45deg) translateZ(350px);
48         }
49         .img:nth-of-type(3){
50             background-image: url('./img/rotatePic/u=1369094069,1969348532&fm=26&gp=0.jpg');
51             background-size: cover;
52             transform: rotateY(90deg) translateZ(350px);
53         }
54         .img:nth-of-type(4){
55             background-image: url('./img/rotatePic/u=1891680577,1135327170&fm=26&gp=0.jpg');
56             background-size: cover;
57             transform: rotateY(135deg) translateZ(350px);
58         }
59         .img:nth-of-type(5){
60             background-image: url('./img/rotatePic/u=215760299,4224999617&fm=26&gp=0.jpg');
61             background-size: cover;
62             transform: rotateY(180deg) translateZ(350px);
63         }
64         .img:nth-of-type(6){
65             background-image: url('./img/rotatePic/u=4188003421,389717180&fm=26&gp=0.jpg');
66             background-size: cover;
67             transform: rotateY(225deg) translateZ(350px);
68         }
69         .img:nth-of-type(7){
70             background-image: url('./img/rotatePic/下载 (1).jfif');
71             background-size: cover;
72             transform: rotateY(270deg) translateZ(350px);
73         }
74         .img:nth-of-type(8){
75             background-image: url('./img/rotatePic/下载 (2).jfif');
76             background-size: cover;
77             transform: rotateY(315deg) translateZ(350px);
78         }
79     </style>
80 </head>
81 <body>
82     <div class="wra">
83         <div class="img"></div>
84         <div class="img"></div>
85         <div class="img"></div>
86         <div class="img"></div>
87         <div class="img"></div>
88         <div class="img"></div>
89         <div class="img"></div>
90         <div class="img"></div>
91     </div>
92     <script>
93         document.body.onmousemove = function(e){
94             this.style.perspectiveOrigin = e.pageX + 'px ' + e.pageY +'px';
95         }
96     </script>
97 </body>
98 </html>

看一下效果好吧。

 

 

猜你喜欢

转载自www.cnblogs.com/yanggeng/p/11291755.html