• 前端移动web高级详细解析二


    移动 Web 第二天

    01-空间转换

    空间转换简介

    • 空间:是从坐标轴角度定义的 X 、Y 和 Z 三条坐标轴构成了一个立体空间,Z 轴位置与视线方向相同。

    • 空间转换也叫 3D转换

    • 属性:transform

    平移

    1. transform: translate3d(x, y, z);
    2. transform: translateX();
    3. transform: translateY();
    4. transform: translateZ();

    取值与平面转换相同

    默认情况下,Z 轴平移没有效果,原因:电脑屏幕默认是平面,无法显示 Z 轴平移效果

    视距

    作用:指定了观察者与 Z=0 平面的距离,为元素添加透视效果

    透视效果:近大远小、近实远虚

    属性:(添加给父级,取值范围 800-1200)

    perspective: 视距;

    旋转

    • Z 轴:rotateZ()

    • X 轴:rotateX()

    • Y 轴:rotateY()

    左手法则

    作用:根据旋转方向确定取值正负

    使用:左手握住旋转轴, 拇指指向正值方向, 其他四个手指弯曲方向为旋转正值方向

    rotate3d-了解

    • rotate3d(x, y, z, 角度度数) :用来设置自定义旋转轴的位置及旋转的角度

    • x,y,z 取值为0-1之间的数字

    立体呈现

    作用:设置元素的子元素是位于 3D 空间中还是平面中

    属性名:transform-style

    属性值:

    • flat:子级处于平面中

    • preserve-3d:子级处于 3D 空间

    案例-3d导航

    案例步骤:

    1. 搭建立方体

      1. 绿色是立方体的前面

      2. 橙色是立方体的上面

    2. 鼠标悬停,立方体旋转

    1. .nav li {
    2.  position: relative;
    3.  width: 100px;
    4.  height: 40px;
    5.  line-height: 40px;
    6.  transition: all 0.5s;
    7.  transform-style: preserve-3d;
    8.  /* 为了看到橙色和绿色的移动过程,给立方体添加旋转 */
    9.  /* transform: rotateX(-20deg) rotateY(30deg); */
    10. }
    11. .nav li a {
    12.  position: absolute;
    13.  left: 0;
    14.  top: 0;
    15.  display: block;
    16.  width: 100%;
    17.  height: 100%;
    18.  text-align: center;
    19.  text-decoration: none;
    20.  color: #fff;
    21. }
    22. /* 立方体每个面都有独立的坐标轴,互不影响 */
    23. .nav li a:first-child {
    24.  background-color: green;
    25.  transform: translateZ(20px);
    26. }
    27. .nav li a:last-child {
    28.  background-color: orange;
    29.  transform: rotateX(90deg) translateZ(20px);
    30. }
    31. .nav li:hover {
    32.  transform: rotateX(-90deg);
    33. }

    缩放

    1. transform: scale3d(x, y, z);
    2. transform: scaleX();
    3. transform: scaleY();
    4. transform: scaleZ();

    02-动画

    • 过渡:实现两个状态间的变化过程

    • 动画:实现多个状态间的变化过程,动画过程可控(重复播放、最终画面、是否暂停)

    动画实现步骤

    1. 定义动画

    1. /* 方式一 */
    2. @keyframes 动画名称 {
    3.   from {}
    4.   to {}
    5. }
    6. /* 方式二 */
    7. @keyframes 动画名称 {
    8.   0% {}
    9.   10% {}
    10.   ......
    11.   100% {}
    12. }
    1. 使用动画

    animation: 动画名称 动画花费时长;

    animation复合属性

    提示:

    • 动画名称和动画时长必须赋值

    • 取值不分先后顺序

    • 如果有两个时间值,第一个时间表示动画时长,第二个时间表示延迟时间

    animation拆分写法

    案例-走马灯

    • HTML 结构

    1. <li><img src="./images/1.jpg" alt="" />li>
    2. <li><img src="./images/2.jpg" alt="" />li>
    3. <li><img src="./images/3.jpg" alt="" />li>
    4. <li><img src="./images/4.jpg" alt="" />li>
    5. <li><img src="./images/5.jpg" alt="" />li>
    6. <li><img src="./images/6.jpg" alt="" />li>
    7. <li><img src="./images/7.jpg" alt="" />li>
    8. <li><img src="./images/1.jpg" alt="" />li>
    9. <li><img src="./images/2.jpg" alt="" />li>
    10. <li><img src="./images/3.jpg" alt="" />li>
    • CSS 样式

    1. .box {
    2.  width: 600px;
    3.  height: 112px;
    4.  border: 5px solid #000;
    5.  margin: 100px auto;
    6.  overflow: hidden;
    7. }
    8. .box ul {
    9.  display: flex;
    10.  animation: move 6s infinite linear;
    11. }
    12. /* 定义位移动画;ul使用动画;鼠标悬停暂停动画 */
    13. @keyframes move {
    14.  0% {
    15.    transform: translate(0);
    16. }
    17.  100% {
    18.    transform: translate(-1400px);
    19. }
    20. }
    21. .box:hover ul {
    22.  animation-play-state: paused;
    23. }

    无缝动画原理:复制开头图片到结尾位置(图片累加宽度 = 区域宽度)

    精灵动画

    • 核心

    • 制作步骤

      1.准备显示区域

      盒子尺寸与一张精灵小图尺寸相同

      2.定义动画

      移动背景图(移动距离 = 精灵图宽度)

      3.使用动画

      steps(N),N 与精灵小图个数相同

    1. div {
    2.  width: 140px;
    3.  height: 140px;
    4.  border: 1px solid #000;
    5.  background-image: url(./images/bg.png);
    6.  animation: run 1s steps(12) infinite;
    7. }
    8. @keyframes run {
    9.  from {
    10.    background-position: 0 0;
    11. }
    12.  to {
    13.    background-position: -1680px 0;
    14. }
    15. }

    多组动画

    1. animation:
    2.   动画一,
    3.   动画二,
    4. ... ...
    5. ;

    03-综合案例-全名出游

    背景

    1. /* 大背景 */
    2. /* 默认状态HTML和body的高度是0,所以导致cover缩放背景图不成功 */
    3. html {
    4.  height: 100%;
    5. }
    6. body {
    7.  height: 100%;
    8.  background: url(../images/f1_1.jpg) no-repeat center 0 / cover;
    9.  /* background-size: cover; */
    10. }

    云彩位置和动画

    • HTML 结构

    1. <div class="cloud">
    2.  <img src="./images/yun1.png" alt="">
    3.  <img src="./images/yun2.png" alt="">
    4.  <img src="./images/yun3.png" alt="">
    5. div>
    • CSS 样式

    1. /* 云 */
    2. .cloud img {
    3.  position: absolute;
    4.  left: 50%;
    5. }
    6. .cloud img:nth-child(1) {
    7.  margin-left: -250px;
    8.  top: 20px;
    9.  animation: cloud 1s infinite alternate linear;
    10. }
    11. .cloud img:nth-child(2) {
    12.  margin-left: 400px;
    13.  top: 100px;
    14.  animation: cloud 1s infinite alternate linear 0.4s;
    15. }
    16. .cloud img:nth-child(3) {
    17.  margin-left: -550px;
    18.  top: 200px;
    19.  animation: cloud 1s infinite alternate linear 0.6s;
    20. }
    21. @keyframes cloud {
    22.  100% {
    23.    transform: translate(20px);
    24. }
    25. }

    文字动画

    • HTML 结构

    1. <div class="text">
    2.  <img src="./images/font1.png" alt="">
    3. div>
    • CSS 样式

    1. /* 文字 */
    2. .text img {
    3.  position: absolute;
    4.  left: 50%;
    5.  top: 50%;
    6.  transform: translate(-50%, -50%);
    7.  animation: text 1s;
    8. }
    9. /* 默认 → 小 → 大 → 小 → 默认 */
    10. @keyframes text {
    11.  0% {
    12.    transform: translate(-50%, -50%) scale(1);
    13. }
    14.  20% {
    15.    transform: translate(-50%, -50%) scale(0.1);
    16. }
    17.  40% {
    18.    transform: translate(-50%, -50%) scale(1.4);
    19. }
    20.  70% {
    21.    transform: translate(-50%, -50%) scale(0.8);
    22. }
    23.  100% {
    24.    transform: translate(-50%, -50%) scale(1);
    25. }
    26. }

  • 相关阅读:
    MySQL笔记1(数据库的好处,数据库的概念,数据库的特点,MySQL的启动,数据模型,SQL)
    数据库调优:Mysql索引对group by 排序的影响
    centos7.6安装jdk1.8
    CS内网横向移动 模拟渗透实操 超详细
    OpenCV之GOTURN目标追踪
    Java开发之高并发必备篇(一)——线程基础
    NewStarCTF2023 Week3 Reverse方向 题目STL WP
    性能优化:MySQL使用优化(3)
    客户案例 | 聚焦流程体验,助银行企业APP迭代
    实时天气API
  • 原文地址:https://blog.csdn.net/qq_69748833/article/details/134097605