CSS和D3制作小鱼游动的交互动画效果

发布时间:2020-05-13 13:54:35

来源:亿速云

阅读:118

作者:Leah

本篇文章主要探讨如何用CSS和D3制作小鱼游动的交互动画效果。有一定的参考价值,有需要的朋友可以参考一下,跟随小编一起来看解决方法吧。

效果预览

源代码下载

https://github.com/comehope/front-end-daily-challenges

代码解读

定义 dom,容器中包含的子元素分别代表鱼的身体、眼睛、背鳍和尾巴:

设置页面样式为全屏且没有滚动条: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 库:

删除掉 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制作小鱼游动的交互动画效果的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

html5鱼游动动画,CSS和D3制作小鱼游动的交互动画效果相关推荐

  1. 用HTML和CSS3做个鱼,如何使用CSS和D3实现小鱼游动的交互动画(附代码)

    本篇文章给大家带来的内容是关于如何使用CSS和D3实现小鱼游动的交互动画(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 效果预览 源代码下载 https://github. ...

  2. html鱼动画游戏代码,如何使用CSS和D3实现小鱼游动的交互动画(附代码)

    本篇文章给大家带来的内容是关于如何使用CSS和D3实现小鱼游动的交互动画(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 效果预览 源代码下载 https://github. ...

  3. php设置加载动画,如何用CSS3制作页面圆圈加载动画(附代码)

    打开页面时,经常会遇到页面正在加载的情况,作为一个前端工程师,你知道如何用CSS3实现页面加载动画效果吗?这篇文章就和大家分享一个炫酷的圆圈加载动画效果的代码,有一定的参考价值,感兴趣的朋友可以看看. ...

  4. gif透明背景动画_PS教程:制作动态界面展示GIF动画效果

    很多时候我们在网站上看到很多炫酷的动态界面效果,他们呈现着立体的效果,不仅是界面有着动画,并且在侧面我们也能清晰的看到随着页面动画也在发生变化.这么炫酷的效果到底是如何制作出来的呢?今天我们就一起来学 ...

  5. android雪花飘落动画,用Jetpack Compose制作出可爱的天气动画

    1. 背景介绍 最近参加了Compose挑战赛的终极挑战,使用Compose完成了一个天气app.之前几轮挑战我也都有参与,每次都学到不少新东西,希望在这最后一轮挑战中,活用这段时间的积累做出更加成熟 ...

  6. 前端每日实战:160# 视频演示如何用纯 CSS 创作一个打开内容弹窗的交互动画...

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/GYXvez 可交互视频 此视频是可 ...

  7. 合肥三维动画公司,安徽地产企业宣传片,合肥做地产三维动画公司,蚌埠房地产制作公司,合肥产品三维动画公司

    安徽地产企业宣传片,合肥做制作地产三维动画公司,为芜湖-六安蚌埠房地产制作公司,合肥地产三维动公司.拍摄设计动画, 峰领网站:http://www.fenglingyingshi.com三维动画\地产 ...

  8. android显示动画一直播放器,酷炫的Android交互动画和视觉效果:高仿音悦台播放页面...

    新版的音悦台 APP 播放页面交互非常有意思,可以把播放器往下拖动,这个页面透明渐变,然后到底部可以左右拖动关闭播放器,然后点击视频列表有个页面弹出来的效果,十分炫酷,于是我自己动手实现了这个交互炫酷 ...

  9. 用计算机制作动画,如何使用制作工具制作一个简单的Flash动画-电脑自学网

    怎么制作Flash动画?通过Adobe Flash我们可以制作出非常有趣好看的动画,也可以制作一键简单的小动画,下面给大家介绍如何使用制作工具制作一个简单的Flash动画. 操作方法: 1.打开fla ...

最新文章

  1. jQuery一些常用特效方法使用实例
  2. Java设计模式(十二):状态设计模式
  3. BZOJ 1101: [POI2007]Zap( 莫比乌斯反演 )
  4. 同步VS异步,阻塞VS非阻塞
  5. 浅谈智能摄像机背后的p2p连线技术
  6. 机器学习--支持向量机实战(三)完整版SMO算法实现
  7. python处理websocket
  8. 重磅!阿里云发布业界首本云网络白皮书
  9. 动感标题文字快闪(闪白特效)开场PR模板MOGRT
  10. 华为手机怎么安装Google
  11. EXCEL 查漏补缺内容
  12. 姜烧猪肉+日式厚蛋烧+蚝油青笋
  13. Centos7配置阿里云的镜像加速器(2)
  14. uni-app学习日记1
  15. java入门~第十六天 对象数组以及集合和相关数据结构
  16. 生产队有没有驴,我说的算
  17. TOMCAT下ab测试出现超时的解决
  18. 机载雷达电子对抗视景仿真训练系统软件
  19. MAC Foxmail升级后邮件搜索功能失效了
  20. 2016年我的看电影计划

热门文章

  1. IBM实习生笔试题目(2)
  2. sap测试IDOC include ZXTRKU02
  3. uwp如何建立任何形状的头像,如圆形,方形,六边形等
  4. 暑期科研见习总结:移动设备上的深度学习与模型剪枝初探
  5. python3全栈开发-并发编程的多进程理论
  6. 1 wps文字多窗口显示方法
  7. 使用redis-shake工具迁移云Redis数据(二十一)
  8. Mongodb数据库命令端常用操作
  9. 指数平滑预测系列算法ETS——简述
  10. 爬虫python漏洞群_python爬虫 之 wooyun公开漏洞