制作一个小黄鸭转圈跳舞的页面。

制作一个小黄鸭转圈跳舞的页面。

我们来制作一个小黄鸭转圈跳舞的页面。

分析一下

1、分析一下这个页面,要完成这些效果,一共需要3步:

  • 把鸭子都放到一个盒子当中
  • 在盒子里,把每个鸭子的位置摆好
  • 让盒子旋转

2、让鸭子在盒子中的位置摆好,需要怎么做:

  • 先让鸭子站在圆心的位置(需要先了解父相子绝定位方式)
  • 每个鸭子旋转一个角度,让每个鸭子均匀面向不同的角度
  • 向前移动一个半径的距离(3d)

开始写代码

要用到的知识包括几个HTML标签和一部分的css知识。

先把图片放到页面里边。

先来在页面中添加一个img标签,将小黄鸭跳舞的gif图放到标签中

<img src="img/001.gif" alt="">

这个时候,可以看到,页面中已经有一个小黄鸭了。

把图片放到一个盒子里边

<div class="box">
    <img src="img/001.gif" alt="">
</div>

这个时候盒子看不到,我们通过选择器,来给盒子添加一个边框,好看到它

<style>
    .box{
        border: 1px solid red;
    }
</style>

盒子很大,比鸭子大很多。

我们把盒子的大小设置成跟鸭子图片的大小一样

.box{
    border: 1px solid red;
    width: 140px;
    height: 172px;
}

接下来呢,让小黄鸭显示在页面的中间。

.box{
    border: 1px solid red;
    width: 140px;
    height: 172px;
    /*margin-right: auto ;*/
    /*margin-left: auto ;*/
    margin: 0 auto;
}

这个时候,盒子跟盒子里的鸭子都居中了。

我们再添加其他的鸭子。

<div class="box">
    <img src="img/001.gif">
    <img src="img/002.gif">
    <img src="img/003.gif">
    <img src="img/004.gif">
    <img src="img/005.gif">
    <img src="img/006.gif">
    <img src="img/007.gif">
    <img src="img/008.gif">
    <img src="img/009.gif">
</div>

发现鸭子是竖着排成一列的

我们先要把所有的鸭子放到围绕旋转的圆心处,所以,所有的鸭子应该是在同一个位置。怎么把鸭子都放在圆心处呢。我们需要先学习一个定位方式:父相子绝定位。

重要内容补充-定位方式的讲解

相对定位,绝对定位。

重要内容补充-3D图形布局讲解

需要进行3D布局的元素,父元素加上一个样式:

transform-style: preserve-3d;

只加上这个,没有效果,需要跟transform配合使用

transform-style: preserve-3d;
/*设置旋转绕X轴*/ 
transform: rotateX(-10deg);   

开始写代码

把所有鸭子放到同一个位置

利用父相子绝定位,把父盒子设置成相对定位,子盒子设置成绝对定位

.box{
    border: 1px solid red;
    width: 140px;
    height: 172px;
    /*margin-right: auto ;*/
    /*margin-left: auto ;*/
    margin: 0 auto;
    position: relative;
}

img{
    position: absolute;
}

让鸭子面向不同的方向,在360度内均匀分布

设置父盒子的3D效果,给每个图片添加一个类名,给每个图片,设置不同的旋转角度。

<div class="box">
    <img src="img/001.gif" class="img1">
    <img src="img/002.gif" class="img2">
    <img src="img/003.gif" class="img3">
    <img src="img/004.gif" class="img4">
    <img src="img/005.gif" class="img5">
    <img src="img/006.gif" class="img6">
    <img src="img/007.gif" class="img7">
    <img src="img/008.gif" class="img8">
    <img src="img/009.gif" class="img9">
</div>
<style>
    .box {
        border: 1px solid red;
        width: 140px;
        height: 172px;
        /*margin-right: auto ;*/
        /*margin-left: auto ;*/
        margin: 0 auto;
        position: relative;

        transform-style: preserve-3d;
    }

    img {
        position: absolute;
    }

    .img1 {
        transform: rotateY(0deg);
    }

    .img2 {
        transform: rotateY(40deg);
    }

    .img3 {
        transform: rotateY(80deg);
    }

    .img4 {
        transform: rotateY(120deg);
    }

    .img5 {
        transform: rotateY(160deg);
    }

    .img6 {
        transform: rotateY(200deg);
    }

    .img7 {
        transform: rotateY(240deg);
    }

    .img8 {
        transform: rotateY(280deg);
    }

    .img9 {
        transform: rotateY(320deg);
    }
</style>

这个时候,鸭子都在圆点,面向了不同的角度,在让它们向前跨一步,就分散成了一个圆

<style>
    .box {
        border: 1px solid red;
        width: 140px;
        height: 172px;
        /*margin-right: auto ;*/
        /*margin-left: auto ;*/
        margin: 0 auto;
        position: relative;

        transform-style: preserve-3d;
    }

    img {
        position: absolute;
    }

    .img1 {
        transform: rotateY(0deg) translateZ(300px);
    }

    .img2 {
        transform: rotateY(40deg) translateZ(300px);
    }

    .img3 {
        transform: rotateY(80deg) translateZ(300px);
    }

    .img4 {
        transform: rotateY(120deg) translateZ(300px);
    }

    .img5 {
        transform: rotateY(160deg) translateZ(300px);
    }

    .img6 {
        transform: rotateY(200deg) translateZ(300px);
    }

    .img7 {
        transform: rotateY(240deg) translateZ(300px);
    }

    .img8 {
        transform: rotateY(280deg) translateZ(300px);
    }

    .img9 {
        transform: rotateY(320deg) translateZ(300px);
    }
</style>

但其实没有看到围城圆的效果,我们把父盒子在x轴旋转一个角度,就可以体现出来。同时,加一个

margin-top: 150px;

.box {
    border: 1px solid red;
    width: 140px;
    height: 172px;
    /*margin-right: auto ;*/
    /*margin-left: auto ;*/
    margin: 0 auto;
    position: relative;

    transform-style: preserve-3d;
    transform: rotateX(-20deg);
    margin-top: 150px;
}

可以看到,已经形成一个圆了。

添加动画

/*定义一个动画*/
@keyframes xuanzhuan {
    0% {
        transform: rotateX(-20deg) rotateY(0deg)
    }
    100% {
        transform: rotateX(-20deg) rotateY(360deg)
    }
}

.box {
    border: 1px solid red;
    width: 140px;
    height: 172px;
    /*margin-right: auto ;*/
    /*margin-left: auto ;*/
    margin: 0 auto;
    position: relative;

    transform-style: preserve-3d;
    transform: rotateX(-20deg);

    margin-top: 150px;

    /*绑定动画*/
    animation: xuanzhuan 10s;
    /*动画无限循环播放*/
    animation-iteration-count: infinite;
    /*速度线性播放*/
    animation-timing-function: linear;
}

添加背景音乐

<audio src="media/小黄鸭音频.mp3" autoplay="autoplay" loop="loop"></audio>

chrome浏览器不能自动播放问题解决

浏览器输入

chrome://flags/#autoplay-policy

将 Autoplay policy 改为

No user gesture is required

完整代码

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> @keyframes xuanzhuan { 0% { transform: rotateX(-20deg) rotateY(0deg) } 100% { transform: rotateX(-20deg) rotateY(360deg) } } body { background-color: #313131; } .box { width: 154px; height: 186px; margin: 150px auto; position: relative; transform-style: preserve-3d; transform: rotateX(-20deg); animation: xuanzhuan 15s; animation-iteration-count: infinite; animation-timing-function: linear; } .box > div { position: absolute; } </style> </head> <body> <audio src="media/小黄鸭音频.mp3" loop="loop" autoplay="autoplay"></audio> <div class="box"> <div style="transform: rotateY(0deg) translateZ(300px)"> <img src="img/001.gif" alt=""> </div> <div style="transform: rotateY(40deg) translateZ(300px) "> <img src="img/002.gif" alt=""> </div> <div style="transform: rotateY(80deg) translateZ(300px) "> <img src="img/003.gif" alt=""> </div> <div style="transform: rotateY(120deg) translateZ(300px) "> <img src="img/004.gif" alt=""> </div> <div style="transform: rotateY(160deg) translateZ(300px) "> <img src="img/005.gif" alt=""> </div> <div style="transform: rotateY(200deg) translateZ(300px) "> <img src="img/006.gif" alt=""> </div> <div style="transform: rotateY(240deg) translateZ(300px) "> <img src="img/007.gif" alt=""> </div> <div style="transform: rotateY(280deg) translateZ(300px) "> <img src="img/008.gif" alt=""> </div> <div style="transform: rotateY(320deg) translateZ(300px) "> <img src="img/009.gif" alt=""> </div> </div> </body> </html>

转载于:https://www.cnblogs.com/hansha/p/10125070.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101257.html原文链接:https://javaforall.net

(0)
上一篇 2021年6月18日 下午2:00
下一篇 2021年6月18日 下午3:00


相关推荐

  • 龙虾大战!OpenClaw 爆火后,这 5 个变种版本已经卷出天际

    龙虾大战!OpenClaw 爆火后,这 5 个变种版本已经卷出天际

    2026年3月13日
    2
  • Qt入门-layout布局

    Qt入门-layout布局开发一个图形界面应用程序 界面的布局影响到界面的美观 在设计一个界面之前 应该考虑到开发的界面可能给不用的用户使用 而用户的屏幕大小 纵横比例 分辨率可能不同 界面还可能是可缩放的 程序应该可以适应这些变化 nbsp nbsp nbsp nbsp nbsp nbsp nbsp 前面的程序中都是使用 setGeometry 方法定位控件的位置 这个方法比较笨拙 试想如果控件很多 布局这些控件需要编写大量的代码 幸运的是 QT 提供了更好的方法布局控件

    2026年3月18日
    2
  • 网站留言板的功能_网页留言板源码

    网站留言板的功能_网页留言板源码本文描述如何在网页上实现一个简单的留言板功能,仅支持文字留言。开发环境:dreamweaverCChtml+jscirpt+php前置条件:1、一个简单的网站已经搭建完毕,支持用户登录网站。2、用户已登录网站。实现步骤:一、新建留言板网页1、新建网页:whiteboard.html留言板(js-div-whiteboard…

    2025年7月22日
    6
  • 操作系统进程调度实验报告心得_进程的管理和控制实验报告

    操作系统进程调度实验报告心得_进程的管理和控制实验报告题目要求一、 实验目的多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。二、 实验内容1. 优先权法、轮转法简化假设1) 进程为计算型的(无I/O)2) 进程状态:ready、running、finish3) 进程需要的CPU时间以时间片为单位确定2. 算法描述1) 优先权法——动态优先权当前运行进程用完时间片后,其优先权减去一个常数。2) 轮转法三、

    2026年4月16日
    5
  • 淘宝店铺装修的代码

    淘宝店铺装修的代码1 贴图 imgsrc 图片地址 2 加入连接 ahref 所要连接的相关地址 写上你想写的字 3 在新窗口打开连接 ahref 相关地址 target blank 写上要写的字 4 移动字体 走马灯 marquee 写上你想写的字 marquee 可用于店铺分类 和评价 5 字体加粗 b 写上你想写的字 b ahref 相关地址 target blank ahref 所要连接的相关地址 imgsrc 图片地址

    2026年3月19日
    2
  • 奔图cp2510dn linux,奔图CP2510DN驱动

    奔图cp2510dn linux,奔图CP2510DN驱动软件标签 奔图 PantumCP2510 是一款 A4 幅面的彩色激光打印机 它具有高速打印 性能稳定 功能强大的呢过特点 为此深得用户的信赖 为了保证打印机的正常使用 需要安装其对应的奔图 PantumCP2510 打印机驱动程序 安装驱动后 打印机就可以正常使用了 并且能够帮助用户解决打印机无法被电脑识别或者不能打印等问题 驱动安装方法 1 在 51 驱动网下载 奔图 PantumCP2510

    2026年3月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号