文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么用CSS和D3实现小鱼游动的交互动画

2024-04-02 19:55

关注

小编给大家分享一下怎么用CSS和D3实现小鱼游动的交互动画,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

  代码解读

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

  <divclass="fish">

  <spanclass="body"></span>

  <spanclass="eye"></span>

  <spanclass="fin"></span>

  <spanclass="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)solidtransparent;

  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)solidtransparent;

  filter:brightness(2.5);

  left:calc(var(--r)-var(--r2));

  }

  画出鱼的尾巴:

  .fish.tail{

  position:absolute;

  --r3:calc(var(--r)/3);

  border:var(--r3)solidtransparent;

  border-right-color:currentColor;

  border-left-style:none;

  right:0;

  top:calc(var(--r)-var(--r3));

  }

  增加让鱼游动的动画效果,不是循环执行,而是只执行一次:

  .fish{

  right:calc(var(--r)*-1);

  animation:run3slinearforwards;

  }

  @keyframesrun{

  to{

  right:100%;

  }

  }

  再增加鱼游动时摇摆的动画效果:

  .fish{

  animation:

  run3slinearforwards,

  shake0.3slinearinfinite;

  }

  @keyframesshake{

  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:

  runcalc(var(--duration)*1s)linearforwards,

  shake0.3slinearinfinite;

  }

  鱼出现的高度,数据越大越靠近页面下部:

  .fish{

  --top:100;

  top:calc(var(--top)*1px);

  }

  接下来用d3来批量处理dom元素和css变量。

  引入d3库:

  <scriptsrc="https://d3js.org/d3.v5.min.js"></script>

  删除掉html中的.fish元素和css文件中的变量声明代码。创建一个函数,用于生成一条鱼。css变量的值均为随机生成,--size的取值范围是5~8,--color的取值范围是-60~15,--duration的取值范围是3~6,--top的取值范围是100~300:

  functionbuildFish(){

  letfish=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');

  }

  绑定鼠标单击事件,当按下鼠标时就生成一条鱼:

  functionbuildFish(e){

  //略....

  .style('--top',e.clientY);

  }

  window.addEventListener('click',buildFish);

  并且让鱼的嘴部和点击的位置在一条水平线上:

  .fish{

  top:calc(var(--top)*1px-var(--r));

  }

  最后,在页面载入时自动生成3条鱼,以免页面载入后一片空白:

  functionbuildFish(e){

  //略....

  .style('--top',e?e.clientY:d3.randomUniform(100,300)());

  }

  d3.range(3).forEach(buildFish);


看完了这篇文章,相信你对“怎么用CSS和D3实现小鱼游动的交互动画”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯