3D 旋转木马

news2024/9/24 19:16:06

在工作中我们常用到3D装换和3D位移

主要知识点

  • 3D位移:transale3d(x,y,z)
  • 3D旋转:rotate3d(x,y,z)
  • 透视:perspective
  • 3D呈现 transfrom-style

1、 transale3d

  • translform:
    • translform:translateX(100px):仅仅是在x轴上移动
    • translform:translateY(100px):仅仅是在Y轴上移动
    • translform:translateZ(100px):仅仅是在Z轴上移动(注意:translateZ一般用px单位)
    • transform:translate3d(x,y,z):其中x、y、z分别指要移动的轴的方向的距离
    • 语法:transform: translateX(100px) translateY(100px) translateZ(100px) ; 可以简写成 translform: translate3d(100px,100px,100px)

注意 transform:translateZ(100px) 需要借助透视才能看出效果。

设置转换中心点 transform-origin

transform-origin : left bottom; // 可以加方位名词
transform-origin :50% 50%; // 默认的
transform-origin :50px 50px;

透视 perspective

在2D平面产生近大远小视觉立体,但是只是效果二维的。如果想要在网页产生3D效果需要透视(理解成3D物体投影在2D平面内),模拟人类的视觉位置,可认为安排一只眼睛去看。透视我们也称为视距:视距就是人的眼睛到屏幕的距离距离视觉点越近的在电脑平面成像越大,越远成像越小,透视的单位是像素

透视写在被观察元素的父盒子上面的
d:就是视距,视距就是一个距离人的眼睛到屏幕的距离
z:就是z轴,物体距离屏幕的距离,轴越大(正值)我们看到的物体就越大

<style>
    div{
        width: 100px;
        height: 100px;
        background-color: aqua;
        transform: translate3d(500px,100px,100px);
    }
    body{
        perspective: 200px;
    }
</style>
<body>
    <div>   </div>
</body>

3D旋转 rotate3d

3D旋转指可以让元素在三维平面内沿着x轴,y轴,轴或者自定义轴进行转
语法

  • transform:rotateX(45deg): 沿着x轴正方向旋转45度
  • transform:rotateY(45deg):沿着y轴正方向旋转45deg
  • transform:rotateZ(45deg):沿着Z轴正方向旋转45deg
  • transform:rotate3d(xy,z,deg):沿着自定义轴旋转deg为角度(了解即可)
<style>
    img {
      dispaly:block;
      margin:100px auto;
      transition: all 1s;
    }
    img:hover {
      // transform:rotateX(180deg)  ==> transform:rotate3d(1,0,0, 180deg)
     //  transform:rotateY(180deg) ==>  transform:rotate3d(0,1,0, 180deg)
     // transform:rotateZ(180deg)  ==>  transform:rotate3d(0,0,1, 180deg)
     transform:rotate3d(1,1,0, 80deg) // 沿着对角线旋转80度
    }
    body{
        perspective: 200px;
    }
</style>
<body>
    <img src="../i.jpg" alt="" />
</body>

transform-style

  • 控制子元素是否开启三维立体环境。
  • transform-style:flat子元素不开启3d立体空间(默认的)
  • transform-style:preserve-3d;子元素开启立体空间
  • 代码写给父级,但是影响的是子盒子 这个属性很重要,后面必用

案例

两面盒子

在这里插入图片描述

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<style>
    body{
        perspective: 350px;
    }
    .box{
        position: relative;
        width: 300px;
        height: 300px;
        margin: 100px auto;
        transition: all .6s;
        /* 让背面盒子保留立体空间 */
        transform-style: preserve-3d;
        transform-style: preserve-3d;
    }
    .box:hover{
        transform: rotateY(180deg);
    }
    .front,.back{
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        border-radius: 50%;
        font-size: 30px;
        color: #fff;
        text-align: center;
        line-height: 300px;
    }
    .front{
        background-color: coral;
 
    }
    .back{
        background-color: aqua;
        transform: rotateY(180deg) translateZ(25px);  
    }
</style>
<body>
    <div class="box">
        <div class="front">前面的盒子</div>
        <div class="back">后面的盒子</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">
    <title>Document</title>
</head>
<style>
    body{
        perspective: 1000px;

    }
    section{
        width: 300px;
        height: 200px;
        margin: 150px auto;
        transform-style: preserve-3d;
        /* 添加动画效果 */
        animation: rotate 10s linear infinite;
        background: url("https://img2.baidu.com/it/u=611871399,1204008993&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500") no-repeat;
        background-size: contain;

    }
    section:hover{
        /* 鼠标放入停止动画 */
        animation-play-state: paused;
    }
    @keyframes rotate {
        0%{
            transform: rotateY(0);
        }
        100%{
            transform: rotateY(360deg);
        }
    }
    section div{
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
     
        background: url("https://img0.baidu.com/it/u=2669442330,2110216600&fm=253&fmt=auto&app=138&f=JPEG?w=667&h=500") no-repeat;
        background-size: contain;

    }
    section div:nth-child(1){
        transform: 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>
<body>
    
    <section>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </section>
 
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/731938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[NOI2014] 随机数生成器(模拟+贪心)

题面 [NOI2014] 随机数生成器 - 洛谷 题解 缝合题 第一部分&#xff0c;直接模拟题目操作生成二维数组即可&#xff0c;复杂度O(n*mQ) 第二部分&#xff0c;是一个比较经典的字典序贪心 首先肯定需要将最小的数放到路径上&#xff0c;这样可选的剩下的数就被限制在了最小数…

Redis 管道

问题由来&#xff1a;如何优化频繁命令往返造成的性能瓶颈&#xff1f; Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。 一个请求会遵循以下步骤&#xff1a; 1、客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果)&#xff0c;并监听S…

Codeforces Round 883 (Div. 3) A~G

比赛链接&#xff1a;Dashboard - Codeforces Round 883 (Div. 3) - Codeforces 目录 A. Rudolph and Cut the Rope B. Rudolph and Tic-Tac-Toe C. Rudolf and the Another Competition D. Rudolph and Christmas Tree E. Rudolf and Snowflakes F. Rudolph and Mimic…

JavaWeb项目(包含SSM项目)部署到Linux云服务器

目录 一、云服务器环境部署 1、安装JDK 查看JDK的命令为&#xff1a; 安装JDK命令&#xff1a; 2、安装Tomcat 2.1 安装步骤 2.2 验证Tomcat是否启动成功 3、安装MySQL 二、部署 Web 项目到 Linux 2.1 在云服务器中数据库建库建表 2.2 修改部署项目连接数据库密码 …

Qt(Day2)

实现登录框中&#xff0c;当登录成功时&#xff0c;关闭登录界面&#xff0c;并跳转到其他界面&#xff1a;

Go实现在线词典翻译(三种翻译接口,结合sync)

火山翻译 首先介绍用火山翻译英译汉。 package mainimport ("bufio""bytes""encoding/json""fmt""io""log""net/http""os""strings""unicode" )type DictRequestHS st…

第四章:角色和菜单管理功能【基于Servlet+JSP的图书管理系统】

角色和菜单功能 一、角色功能 接下来我们可以完成角色管理的增删改查操作 1. Bean对象 创建sys_role对应的实体对象SysRole Data public class SysRole {private Integer id;private String name;private String notes;private Date createTime; }2. Dao层 现在我们就可以在D…

JVM(Java虚拟机)详解

目录 一、JVM内存区域划分 1. 什么是内存区域划分以及为啥要进行区域划分 2. JVM内存区域划分详解 3. 堆区详解&#xff1a; 4. 给一段代码&#xff0c;问某个变量是在那个区域上&#xff1f; 二、JVM类加载机制 1.类加载的过程 2. 类加载的时机 3. 双亲委派模型&#xff08…

下班前几分钟,我彻底玩懂了tmux

目录 1. tmux简介2. Session3. Window4. Pane5. 自定义tmux配置6. 在shell脚本中操纵tmuxReferences 1. tmux简介 tmux&#xff08;terminal multiplexer&#xff09;是一个非常强大的工具&#xff0c;主要有以下几点功能&#xff1a; 终端复用&#xff1a; tmux 使你能够在一…

Linux分布式应用 Zabbix监控配置[添加主机 自定义监控内容 邮件报警 自动发现/注册 代理服务器 高可用集群]

-------------------- 添加 zabbix 客户端主机 -------------------- 关闭防火墙 systemctl disable --now firewalld setenforce 0 hostnamectl set-hostname zbx-agent01 服务端和客户端都配置时间同步 yum install -y ntpdate ntpdate -u ntp.aliyun.com 服务端和客户端都设…

基于simulink跟踪火车站对象检测遗弃物体(附源码)

一、前言 此示例演示如何跟踪火车站的对象并确定哪些对象保持静止。公共场所的遗弃物品会引起当局的关注&#xff0c;因为它们可能会构成安全风险。算法&#xff08;例如本例中使用的算法&#xff09;可用于通过将他们的注意力引导到潜在的感兴趣区域来协助监控实时监控视频的…

二十五、传输层协议(上)

文章目录 一、再谈端口号&#xff08;一&#xff09;端口号定义&#xff08;二&#xff09;端口号范围划分1.一共有 2^16 个端口2.认识知名端口号(Well-Know Port Number)3.端口号和进程就是K-V关系4.netstat&#xff08;1&#xff09;示例1&#xff1a; n 拒绝显示别名&#x…

CentOS Linux上安装JDK11、MySQL8.0、Minio等软件(rpm脚本模式)

本地环境&#xff1a;Windows 10家庭版 16G内存 512G硬盘 软件&#xff1a;VMWare WorkStation 16.0 FinalShell 4.0.1 一、下载必要软件包 下载软件均选择x86架构64位&#xff01;&#xff01;&#xff01;&#xff08;可根据自己的电脑配置选择&#xff09; CentOS Linu…

基础算法-前缀和

1 算法笔记 2.代码示例 3.代码解析 #include<iostream> using namespace std; const int maxn 1010000; int a[maxn],s[maxn];//a数组是用来存放数组的&#xff0c;s是用来存放前n项数组的和 int m,n;int main(){scanf("%d%d",&n,&m);for(int i1;i&l…

【react】插件react-tsparticles和tsparticles实现粒子特效:

文章目录 一、效果图:二、实现思路:三、实现代码:【1】安装依赖【2】 一、效果图: 二、实现思路: particles&#xff08;npm i react-particles-js&#xff09;目前已被弃用&#xff1b;取代它的是tsparticles&#xff08;npm i react-tsparticles 和npm install tsparticles&a…

docker 安装应用

前文介绍&#xff1a;我们再阿里云领取的ECS服务器&#xff0c;服务器选择应用模板&#xff0c;他会自动帮我们的服务器安装docker的一些相关插件。如果没有&#xff0c;则需要自己安装docker docker 安装Jenkins 1.下载Jenkins镜像 推荐版本 jenkins/jenkins:lts 命令&…

python 实现简易的学员管理系统

文章目录 前言基本思路需求实现1.实现菜单的功能2.提示用户输入需要进行的操作&#xff0c;并执行相关操作3.具体函数功能的实现增加学员信息显示所有学员信息删除学员信息修改学员信息查询学员信息 整体代码展示 前言 前面我们已经学习了 python 的输入输出、条件语句、循环、…

面向对象编程主线三

面向对象编程 三、第三阶段 高内聚&#xff1a;类的内部数据操作细节自己完成&#xff0c;不允许外部干涉&#xff1b; 低耦合&#xff1a;仅对外暴露少量的方法用于使用。 封装性的设计思想&#xff1a;把该隐藏的隐藏起来&#xff0c;该暴露的暴露出来。 3.1、面向对象的特…

[物理层]传输方式

传输方式 串行传输与并行传输 穿行传输是指数据是一个比特一个比特依次发送的&#xff0c;在发送端与接收端只用一条数据线路 并行传输是指一次发n个比特&#xff0c;在发送端与接收端需要n条数据线路 在网络中计算机通信通常采用串行传输&#xff1b;而在计算机内部&#x…