吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1794|回复: 13
收起左侧

[已解决] 前端基础: CSS3- 3D 旋转狗的案例

[复制链接]
clearwater 发表于 2020-1-24 22:26
本帖最后由 clearwater 于 2020-1-27 07:30 编辑

求水神和毒舌绕路走。

我在跟某马的前端视频学习。其中一个视频讲到旋转木马或旋转狗。其中的原理和代码我好象基本都懂了。

我有一个问题就是为什么狗狗的照片的内侧,能看到狗狗的样子。正常的照片,正面是动物,背面是白的;而在本案例中,为什么好象狗的正面和反面都能看到狗的样子?

是不是在网页的编程中,照片默认正反两都是一样的?

006.gif

我把代码贴在本帖中,也贴在一个可以在线查看代码的网页(见下面URL),也上传到百度云(百度云里面有照片)
https://codepen.io/iwater/pen/povYgYx

链接:https://pan.baidu.com/s/1BaOtbZKcQ1q-EgV1yTyuvw
提取码:m264

[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>
        body {
            perspective: 1000px;
        }
        
        section {
            position: relative;
            width: 300px;
            height: 200px;
            margin: 150px auto;
            transform-style: preserve-3d;
            /* 添加动画效果 */
            animation: rotate 10s linear infinite;
            background: url(media/pig.jpg) no-repeat;
        }
        
        section:hover {
            /* 鼠标放入section 停止动画 */
            animation-play-state: paused;
        }
        
        @keyframes rotate {
            0% {
                transform: rotateY(0);
            }
            100% {
                transform: rotateY(360deg);
            }
        }
        
        section div {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: url(media/dog.jpg) no-repeat;
        }
        
        section div:nth-child(1) {
            transform: rotateY(0) translateZ(300px);
        }
        
        section div:nth-child(2) {
            /* 先旋转好了再 移动距离 */
            transform: rotateY(60deg) translateZ(300px);
        }
        
        section div:nth-child(3) {
            /* 先旋转好了再 移动距离 */
            transform: rotateY(120deg) translateZ(300px);
        }
        
        section div:nth-child(4) {
            /* 先旋转好了再 移动距离 */
            transform: rotateY(180deg) translateZ(300px);
        }
        
        section div:nth-child(5) {
            /* 先旋转好了再 移动距离 */
            transform: rotateY(240deg) translateZ(300px);
        }
        
        section div:nth-child(6) {
            /* 先旋转好了再 移动距离 */
            transform: rotateY(300deg) translateZ(300px);
        }
    </style>
</head>

<body>
    <section>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </section>
</body>

</html>


免费评分

参与人数 1吾爱币 +1 收起 理由
alittlebear + 1 新年好~早点睡呀!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

孤狼微博 发表于 2020-1-25 00:46
不错,就是感觉卡卡的,这个是旋转相册是吧
alittlebear 发表于 2020-1-25 02:28
本帖最后由 alittlebear 于 2020-1-25 02:32 编辑

我也不知道啥,也不会php,但是在我看来。

假装把这个网页想象成3D的,一个图片是由很多像素组成,每个像素都是很小的彩色立方体,

然后你就用手拿着它绕圈圈,就是这个效果了。。

加入说狗头在左边,旋转到背面就是在右边了,就像是轴对称图形?

按照现实生活来讲,就是拿几张透明的纸打印图片,然后围成一个圈圈。。这么转。。一样效果

图片说白了就是一堆像素组成,图片越大,像素越多,移动/旋转图片都是移动像素

熊熊观点,仅供喷

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
clearwater + 1 + 1 用心讨论,共获提升!

查看全部评分

狂侠先森 发表于 2020-1-25 06:42
666 我学那个打桌球的动态都花了好几天。。。。
头像被屏蔽
不言谢 发表于 2020-1-26 01:21
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽
不言谢 发表于 2020-1-26 01:54
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| clearwater 发表于 2020-1-26 10:38
@氖气

新年好! 楼中别人的解释,我没明白,或者说,没有说服我。 您有空时,能不能教教我,为什么照片的正反两面都能看到狗?

透视是指近大远小,和透明并没有关系,对吗?

一楼的代码我都看明白了,也没有别的问题。

免费评分

参与人数 1热心值 +1 收起 理由
alittlebear + 1 现在要改正我的臭习惯了。。。不熬夜。。。

查看全部评分

氖气 发表于 2020-1-26 15:55
对于CSS动画我并没有深入研究,我对透明和透视的区别理解与楼主一致。照片的正反两面都能看到狗  应该是浏览器的渲染机制决定的;
楼主给子元素设置的是背景图片,从视觉角度说,这已经是最底层了,这就相当于楼主说的照片的纸本身,如果在元素中添加内容,才是相当于打印在照片上的图像。
如果拿一张没有打印图像的照片纸旋转,那是不是两面都是白色的?同理,在没有其他设置的情况下,一个空盒子无论如何旋转当然只能看见背景啦。注:盒子的内容与背景是两码事儿。
当然,HTML元素本身是没有厚度的,它看得见摸不着,这点跟现实的照片还是由区别的。
显然,当有内容,且内容与背景重叠时,重叠的部分会显示内容,又因为元素本身没有厚度,所以翻过来看重叠部分仍然显示内容(类似于一张没有厚度的半透明的塑料贴纸)。
以上的解释其实都是现象,浏览器的渲染机制我也不太清楚。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
clearwater + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| clearwater 发表于 2020-1-26 17:25
氖气 发表于 2020-1-26 15:55
对于CSS动画我并没有深入研究,我对透明和透视的区别理解与楼主一致。照片的正反两面都能看到狗  应该是浏 ...

非常感谢您不吝赐教。

今天还问一个问题,别人,好多人都回答了,我还没有能量给别人评分。等过几天热心不紧张了,再给您多评一个热心值。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
alittlebear + 1 + 1 好累呀....不过不熬夜确实感觉身体轻松了点

查看全部评分

 楼主| clearwater 发表于 2020-1-27 07:26
本帖最后由 clearwater 于 2020-1-27 07:51 编辑
氖气 发表于 2020-1-26 15:55
对于CSS动画我并没有深入研究,我对透明和透视的区别理解与楼主一致。照片的正反两面都能看到狗  应该是浏 ...

我终于知道是啥原因辣。

原来3D默认的是背面可见性。只有把值改为backface-visibility: hidden 才能正常显示。

当然这不是我想出来哒,别人教我哒。

https://css-tricks.com/almanac/properties/b/backface-visibility/

Values
  • visible (default) - the element will always be visible even when not facing the screen.
  • hidden - the element is not visible when not facing the screen.
  • inherit - the property will gets its value from the its parent element.
  • initial - sets the property to its default, which is visible


.flip {  transform: rotateY(180deg);  backface-visibility: hidden;}





免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
alittlebear + 3 + 1 分都给您啦

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 20:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表