如何使用CSS和D3实现小鱼游动的交互动画(附代码)
本篇文章给大家带来的内容是关于如何使用CSS和D3实现小鱼游动的交互动画(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
效果预览
源代码下载
https://github.com/comehope/front-end-daily-challenges
代码解读
定义 dom,容器中包含的子元素分别代表鱼的身体、眼睛、背鳍和尾巴:
<div class="fish"> <span class="body"></span> <span class="eye"></span> <span class="fin"></span> <span class="tail"></span> </div>
设置页面样式为全屏且没有滚动条:
body { margin: 0; width: 100vw; height: 100vh; background-color: #222; overflow: hidden; }
定义鱼的容器尺寸,--r
是一个基本尺寸单位,后续所有尺寸都是基于它计算的:
.fish { position: absolute; --r: 15vw; width: calc(var(--r) + var(--r) / 3); height: calc(var(--r) * 2); left: 50%; top: 100px; }
画出鱼的身体,同时把鱼的颜色声明到父类中,因为下面还会用到这个颜色:
.fish { color: hsl(0, 50%, 50%); } .fish .body { position: absolute; border: var(--r) solid transparent; border-right-color: currentColor; border-left-style: none; }
画出鱼的眼睛:
.fish .eye { position: absolute; --r1: calc(var(--r) / 4); width: var(--r1); height: var(--r1); background-color: #111; border-radius: 50%; top: 35%; left: 30%; }
画出鱼的背鳍:
.fish .fin { position: absolute; --r2: calc(var(--r) / 2); border-bottom: var(--r2) solid; border-left: var(--r2) solid transparent; filter: brightness(2.5); left: calc(var(--r) - var(--r2)); }
画出鱼的尾巴:
.fish .tail { position: absolute; --r3: calc(var(--r) / 3); border: var(--r3) solid transparent; border-right-color: currentColor; border-left-style: none; right: 0; top: calc(var(--r) - var(--r3)); }
增加让鱼游动的动画效果,不是循环执行,而是只执行一次:
.fish { right: calc(var(--r) * -1); animation: run 3s linear forwards; } @keyframes run { to { right: 100%; } }
再增加鱼游动时摇摆的动画效果:
.fish { animation: run 3s linear forwards, shake 0.3s linear infinite; } @keyframes shake { 50% { transform: rotateY(-30deg); } 100% { transform: rotateY(30deg); } }
接下来设置一些变量,以便创建不同样子的鱼:
鱼的大小的变量 --size
,数值越大尺寸越大:
.fish { --size: 5; --r: calc(var(--size) * 1vw); }
鱼的颜色变量 --color
,表示色相环的角度:
.fish { --color: 0; color: hsl(var(--color), 50%, 50%); }
鱼从右侧游到左侧的时长,时长越短游得越快:
.fish { --duration: 3; animation: run calc(var(--duration) * 1s) linear forwards, shake 0.3s linear infinite; }
鱼出现的高度,数据越大越靠近页面下部:
.fish { --top: 100; top: calc(var(--top) * 1px); }
接下来用 d3 来批量处理 dom 元素和 css 变量。
引入 d3 库:
<script src="https://d3js.org/d3.v5.min.js"></script>
删除掉 html 中的 .fish
元素和 css 文件中的变量声明代码。创建一个函数,用于生成一条鱼。css 变量的值均为随机生成,--size
的取值范围是 5 ~ 8,--color
的取值范围是 -60 ~ 15,--duration
的取值范围是 3 ~ 6,--top
的取值范围是 100 ~ 300:
function buildFish() { let fish = d3.select('body') .append('p') .attr('class', 'fish') .style('--size', d3.randomUniform(5, 8)()) .style('--color', d3.randomUniform(-60, 15)()) .style('--duration', d3.randomUniform(3, 6)()) .style('--top', d3.randomUniform(100, 300)()); fish.append('span').attr('class', 'body'); fish.append('span').attr('class', 'eye'); fish.append('span').attr('class', 'fin'); fish.append('span').attr('class', 'tail'); }
绑定鼠标单击事件,当按下鼠标时就生成一条鱼:
function buildFish(e) { //略.... .style('--top', e.clientY); } window.addEventListener('click', buildFish);
并且让鱼的嘴部和点击的位置在一条水平线上:
.fish { top: calc(var(--top) * 1px - var(--r)); }
最后,在页面载入时自动生成 3 条鱼,以免页面载入后一片空白:
function buildFish(e) { //略.... .style('--top', e ? e.clientY : d3.randomUniform(100, 300)()); } d3.range(3).forEach(buildFish);
大功告成!
相关推荐:
以上是如何使用CSS和D3实现小鱼游动的交互动画(附代码)的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

在 Vue.js 中使用 Bootstrap 分为五个步骤:安装 Bootstrap。在 main.js 中导入 Bootstrap。直接在模板中使用 Bootstrap 组件。可选:自定义样式。可选:使用插件。

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

HTML定义网页结构,CSS负责样式和布局,JavaScript赋予动态交互。三者在网页开发中各司其职,共同构建丰富多彩的网站。

在 Bootstrap 中插入图片有以下几种方法:直接插入图片,使用 HTML 的 img 标签。使用 Bootstrap 图像组件,可以提供响应式图片和更多样式。设置图片大小,使用 img-fluid 类可以使图片自适应。设置边框,使用 img-bordered 类。设置圆角,使用 img-rounded 类。设置阴影,使用 shadow 类。调整图片大小和位置,使用 CSS 样式。使用背景图片,使用 background-image CSS 属性。

创建 Bootstrap 分割线有两种方法:使用 标签,可创建水平分割线。使用 CSS border 属性,可创建自定义样式的分割线。

要设置 Bootstrap 框架,需要按照以下步骤:1. 通过 CDN 引用 Bootstrap 文件;2. 下载文件并将其托管在自己的服务器上;3. 在 HTML 中包含 Bootstrap 文件;4. 根据需要编译 Sass/Less;5. 导入定制文件(可选)。设置完成后,即可使用 Bootstrap 的网格系统、组件和样式创建响应式网站和应用程序。

要调整 Bootstrap 中元素大小,可以使用尺寸类,具体包括:调整宽度:.col-、.w-、.mw-调整高度:.h-、.min-h-、.max-h-

如何使用 Bootstrap 按钮?引入 Bootstrap CSS创建按钮元素并添加 Bootstrap 按钮类添加按钮文本
