如何使用D3和GSAP实现一个舞动的效果(附源码)

本篇文章给大家带来的内容是关于如何使用d3和gsap实现一个舞动的效果(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

效果预览

2178009783-5bab073f42474_articlex.gif

源代码下载

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

代码解读

定义 dom,容器中包含 2 个子容器,.horizontal 代表水平的线段,.vertical 代表垂直的线段,每个子容器中包含 4 个子元素:

居中显示:

body {    margin: 0;    height: 100vh;    display: flex;    align-items: center;    justify-content: center;    background-color: skyblue;}

设置容器尺寸,其中 --side-length 是方阵的每一边的元素数量:

.container {    --side-length: 2;    position: relative;    width: calc(40px * calc(var(--side-length)));    height: calc(40px * calc(var(--side-length)));}

用 grid 布局排列子元素,4 个元素排列成 2 * 2 的方阵:

.container .horizontal,.container .vertical {    position: absolute;    top: 0;    left: 0;    display: grid;    grid-template-columns: repeat(var(--side-length), 1fr);}

设置子元素的样式,.horizontal 内的子元素是横条,.vertical 内的子元素是竖条:

.container .horizontal span {    width: 40px;    height: 10px;    background: #fff;    margin: 15px 0;}.container .vertical span {    width: 10px;    height: 40px;    background: #fff;    margin: 0 15px;}

至此,静态布局完成,接下来用 d3 批量处理子元素。
引入 d3 库:


删除掉 html 文件中的子元素 dom 节点,删除掉 css 文件中声明的 css 变量。
定义方阵每一边的元素数量,并把这个数值赋给 css 变量:

const SIDE_LENGTH = 2;let container = d3.select('.container')    .style('--side-length', SIDE_LENGTH);

定义一个添加 span 子元素的函数,分别添加横向和竖向的子元素:

function appendSpan(selector) {    container.select(selector)    .selectAll('span')    .data(d3.range(SIDE_LENGTH * SIDE_LENGTH))    .enter()    .append('span');}appendSpan('.horizontal');appendSpan('.vertical');

此时,布局已改为动态的,可以通过修改 SIDE_LENGTH 的值来创建不同边长的方阵,比如以下语句将创建 5 * 5 的方阵:

const SIDE_LENGTH = 5;

接下来用 GSAP 创建动画。(注:因 scrimba 在使用 gsap 时会崩溃,所以视频演示采用 css 动画,但 codepen 和 github 均采用 gsap 动画)
引入 GSAP 库:


声明动画变量 animation,声明代表 dom 元素的变量 $horizontalSpan$verticalSpan

let animation = new TimelineMax({repeat: -1});let $horizontalSpan = '.container .horizontal span';let $verticalSpan = '.container .vertical span';

先创建横条的动画,共分成 4 步,每个 to 语句的最后一个参数是步骤的名称:

animation.to($horizontalSpan, 1, {rotation: 45}, 'step1')    .to($horizontalSpan, 1, {x: '-10px', y: '-10px'}, 'step2')    .to($horizontalSpan, 1, {rotation: 0, x: '0', y: '0', scaleY: 2, scaleX: 0.5}, 'step3')    .to($horizontalSpan, 1, {rotation: 90, scaleY: 1, scaleX: 1}, 'step4')

再创建竖条的动画,to 语句的步骤名称与横条的步骤名称相同,以便与横条保持动画同步:

animation.to($verticalSpan, 1, {rotation: 45}, 'step1')    .to($verticalSpan, 1, {x: '10px', y: '10px'}, 'step2')    .to($verticalSpan, 1, {x: '0', y: '0', scaleX: 2, scaleY: 0.5}, 'step3')    .to($verticalSpan, 1, {rotation: 90, scaleX: 1, scaleY: 1}, 'step4');

在动画的末尾用时间尺度缩放函数让动画播放速度加快一倍:

animation.timeScale(2);

最后,把方阵的边长改为 10,方阵越大就越有气势:

const SIDE_LENGTH = 10;

大功告成!

以上就是如何使用D3和GSAP实现一个舞动的效果(附源码)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1612174.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 02:48:57
下一篇 2025年12月24日 02:49:08

相关推荐

  • 图文详解placeholder属性的使用方法以及如何修改placeholder的默认样式

    在页面布局时经常会用到input输入框,有时为了提示用户输入正确的信息,需要用placeholder属性加以说明。这篇文章就和大家讲讲placeholder属性怎么用以及如何修改placeholder属性的样式,感兴趣的朋友可以参考一下,希望对你有所帮助! placeholder 是HTML5 中新…

    好文分享 2025年12月24日
    000
  • 如何使用CSS3实现导航下拉菜单(附完整代码)

    在当下网页结构当中,导航的菜单栏占据了一个很重要的位置,因为不仅仅可以展示示例,还可以给你对于内容最直观的印象,众所周知的是在html中 可以对菜单进行分级,那么我们可以配合css3实现导航下拉菜单。本篇文章给大家带来的内容是关于如何使用css3实现导航下拉的菜单,有一定的参考价值,有需要的朋友可以…

    2025年12月24日
    000
  • 如何使用css3实现3D的翻牌效果(附完整代码)

    最近我在学习有关css3的相关知识,真心觉得这是一门非常实用且炫酷的技术,不仅可以代替以前图片表现的图案和形状,还可以制作一些特殊的效果。比如阴影效果、渐变效果等,其中3d转换效果尤为炫酷。本篇文章给大家带来的内容是关于如何使用css3实现3d的翻牌效果,有一定的参考价值,有需要的朋友可以参考一下,…

    2025年12月24日
    000
  • 图文详解CSS文本溢出显示省略号效果(text-overflow)

    在工作中经常会遇到文本溢出,需要显示省略号的情况,那这个省略号是怎么实现的呢?这篇文章就给大家讲讲css中如何用text-overflow实现超出部分显示省略号。对css文字溢出加省略号这个知识不熟悉的小伙伴可以参考一下,希望可以帮助到你! text-overflow属性表示当文本超出包含它的元素时…

    2025年12月24日
    000
  • CSS如何设置文字间距?

    css文字与文字之间的间距怎么调整?相信有很多小伙伴都会有这样的疑问。本章就给大家介绍css设置文字间距的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 一、css word-spacing属性设置字间距(单词的间距) word-spacing 属性增加或减少单词间的空白(即…

    2025年12月24日
    000
  • 如何使用css3实现条形进度条效果(附完整代码)

    在音乐和视频播放的时候,不止可以直接查看播放时间,也可以通过观察进度条来查看播放时间,观察进度条这种方法会更加直观的告诉用户还有多久结束,所以进度条是一种非常实用的特殊效果。本文在介绍如何使用css3实现进度条效果的基础上,重点探讨了其具体步骤,本文内容紧凑,希望大家可以有所收获。 使用css3实现…

    2025年12月24日
    000
  • 环形进度条效果怎么实现?用css3实现环形进度条效果代码示例

    上一篇文章我们介绍了如何使用css3实现条形进度条效果(附完整代码),了解到进度条的实用性,那么今天来向大家介绍一下另外一种形式的进度条:环形进度条。 这种进度条适合应用于页面加载的时候和环形计时器的页面。本篇文章给大家带来的内容是关于如何使用css3实现环形进度条效果,有一定的参考价值,有需要的朋…

    2025年12月24日
    000
  • 如何使用纯CSS实现电源开关控件(附源码)

    本篇文章给大家带来的内容是关于如何使用纯css实现电源开关控件(附源码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 效果预览 源代码下载 https://github.com/comehope/front-end-daily-challenges 代码解读 定义 dom,包含 …

    2025年12月24日
    000
  • css选择器优先级顺序是什么?css基本选择器优先级的介绍

    css的选择器有很多种,那么,自然而然的就会有优先级这一概念出现,所以,css选择器优先级顺序是怎样的呢?本篇文章将来给大家介绍css选择器优先级的排序,话不多说,我们来直接看正文内容。 在看css选择器优先级顺序前,我们先来简单说说css基本选择器有哪些? 1、标记选择器(如:body,div,p…

    好文分享 2025年12月24日
    000
  • 如何使用HTML5+css3制作出12种常用的按钮开关样式(附完整代码)

    现如今前端网页的开发越来越注重设计感,这些设计感更体现在细节处,今天向大家具体介绍一下各式各样的开关按钮是如何使用html5+css3制作出来的,希望可以帮到大家。 使用HTML5+css3制作按钮开关的原理 根据设计的要求填充各种颜色。 按钮开关的形状需要具体问题具体分析,如圆形按钮开关需要用到b…

    2025年12月24日
    000
  • 如何使用css3实现字体内发光效果(详解)

    在互联网日益发展的当今社会,人们对于网页用户体验的要求越来越苛刻,这就催生了更多的特殊效果的衍生,比如阴影效果,发光效果等,那么本文将向大家介绍一下如何使用css3实现字体发光的特殊效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 使用css3实现字体发光效果原理 首先我们要输入…

    2025年12月24日
    000
  • 如何使用css3实现文字的单阴影效果和多重阴影效果(附完整代码)

    最近几年在web网页开发的过程中越来越在意人机交互和用户体验,不仅颜色更加的多样化,而且各种特殊效果也是让人目不暇接。今天主要向大家介绍一下在文本里如何实现阴影的特殊效果,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 使用css3实现文本阴影效果的原理 实现阴影效果主要是用text…

    2025年12月24日
    000
  • 如何使用CSS实现滚动的图片栏(附代码)

    本篇文章给大家带来的内容是关于如何使用css实现滚动的图片栏(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 在一些网站上可以经常看到有一些图片进行持续不断的滚动,这个效果可以通过css的动画效果来实现。具体效果如下 主要原理是通过动画向左移动。 首先给出两组一样的图片(同…

    2025年12月24日
    000
  • 如何使用css实现翻转图片的效果(附代码)

    本篇文章给大家带来的内容是关于如何使用css实现翻转图片的效果(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 具体效果图如下: 主要用到的技术除了3D翻转和定位 ,还用到了一个新的属性 backface-visibility:visable|hidden; 该属性主要是用…

    2025年12月24日
    000
  • 如何用CSS制作一个三角形(附代码)

    css中的属性非常神奇,它可以制作很多我们意想不到的图形。这篇文章主要想和大家分享如何用css制作一个三角形,感兴趣的朋友可以参考一下,希望对你有所帮助。 首先我们新建一个100×100的正方形div,为了方便我们查看,设置一个背景颜色。  css代码如下: width: 100px;he…

    2025年12月24日 好文分享
    000
  • css怎么能清除浏览器默认样式?(代码)

    本篇文章给大家带来的内容是关于css怎么能清除浏览器默认样式?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 css清除浏览器默认样式(代替 *{})  将代码放入 css 文件,使用 link 引入。 /* v2.0 | 20110126http://meyerweb.com/er…

    好文分享 2025年12月24日
    000
  • CSS3中的pointer-events属性介绍

    本章给大家介绍一个css3中超实用的属性:css3 pointer-events属性。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 最近发现了一个叫pointer-events的css属性,是一个与javascript有关的属性,pointer-events直译为指针事件,当把值…

    好文分享 2025年12月24日
    000
  • 如何使用css3制作圆形旋转动画(附完整代码)

    随着css3的广泛应用,人们浏览的web网页越来越多元化,而前端开发者也越来越注重人机交互和用户体验。从一开始的文字到后来的图片,以至于现在的动画特效,人们对于网页的要求也越来越挑剔,那么今天给大家展示一下如何使用css3制作旋转动画。本文在介绍如何使用css3制作旋转动画的基础上,重点探讨了其具体…

    2025年12月24日
    000
  • 图文详解CSS中颜色的四种表示方法

    在页面布局时必然会用到颜色,好看的颜色搭配会给页面增色不少,那你知道页面中的颜色怎么设置吗?这篇文章就和大家讲讲颜色的多种表示方法,还不知道颜色值表示方法的小伙伴可以参考一下,希望对你有所帮助! 一、英文单词表示颜色 最直接、最简单的方法,用颜色的英文单词表示,比如:红色我们可以写成color:re…

    2025年12月24日
    000
  • css3如何添加文字阴影效果?text-shadow设置文字阴影效果

    阴影效果是一个常见也很实用的效果,相信有些朋友在使用阴影效果来美观网页页面时,有时会有一些疑问,比如:字体文字阴影是怎样设置的等等。那么本章就给大家谈谈css3是如何设置字体文字阴影的。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。 其实在css3中有一个很实用的属性可以给字体文字…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信