iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >怎么用gojs实现蚂蚁线动画效果
  • 446
分享到

怎么用gojs实现蚂蚁线动画效果

2023-06-22 07:06:00 446人浏览 安东尼
摘要

这篇文章主要讲解了“怎么用Gojs实现蚂蚁线动画效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用gojs实现蚂蚁线动画效果”吧!在绘制 dag 图时,通过节点和来箭头的连线来表示节点

这篇文章主要讲解了“怎么用Gojs实现蚂蚁线动画效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用gojs实现蚂蚁线动画效果”吧!

    在绘制 dag 图时,通过节点和来箭头的连线来表示节点彼此之间的关系。而节点常常又带有状态,为了更好的表示节点之间的流程关系,loading 状态的节点,与后续节点之间,需要用 动画着的虚线 表示,表示正在处理中,处理完才会变成实线。原理同页面没加载出来之间,加个 loading 提示,能提供更好的交互体验。

    • 那么如何用 gojs 实现这个效果呢?虚线,及虚线动画

    • 虚线及虚线动画的背后原理是什么?

    • 虚线为什么又叫蚂蚁线?

    • CSS 可以实现吗?

    一、gojs 实现

    gojs 的基础使用,可参考之前写的文章数据可视化 gojs 简单使用介绍。

    举例:国庆快到了,出游,从上海到北京,假设当前正在途径安徽到山东的路上。用 gojs 绘制出来如下:

    怎么用gojs实现蚂蚁线动画效果

    1. 绘图

    <!-- 容器 --><div id="myDiagramDiv" ></div>
    <!-- 引入gojs --><script src="https://unpkg.com/gojs/release/go.js"></script>
    // 生成器const $ = go.GraphObject.make;// 定义容器,myDiagramDiv 为容器 idconst diagram = $(go.Diagram, 'myDiagramDiv');// 节点模板,描述了如何构造每个节点diagram.nodeTemplate = $(go.Node, "Auto", // 框自动适应文本  $(go.Shape, "RoundedRectangle", new go.Binding("fill", "color")),  $(go.TextBlock, {margin: 5}, new go.Binding("text", "name")));// 定义model, 描述节点信息和连线信息diagram.model = new go.GraphLinksModel(  [ // 节点    { key: 'shanghai', name: "出发地 上海", color: "lightblue" },    { key: 'jiangsu', name: "途径地 江苏", color: "pink" },    { key: 'anhui', name: "途径地 安徽", color: "pink" },    { key: 'shandong', name: "途径地 山东", color: "orange"},    { key: 'hebei', name: "途径地 河北", color: "orange" },    { key: 'tianjin', name: "途径地 天津", color: "orange" },    { key: 'beijing', name: "目的地 北京", color: "lightgreen" }  ],  [ // 连线    { from: "shanghai", to: "jiangsu" },    { from: "jiangsu", to: "anhui" },    { from: "anhui", to: "shandong" },    { from: "shandong", to: "hebei" },    { from: "hebei", to: "tianjin" },    { from: "tianjin", to: "beijing" }  ]);

    至此,一个简单的出游途径地关系图就绘制好了,但是没有虚线动画。

    2. 虚线实现

    观察实现的图中既有实线,也有虚线,所以这儿需要用到 templateMap

    定义实线及虚线模板

    // 定义集合,存储实线、虚线模板const templmap = new go.Map()const color = '#000'// 默认连线模板const defaultTemplate = $(  go.Link,  $(go.Shape, { stroke: color, strokeWidth: 1 }),  $(go.Shape, { toArrow: 'Standard', fill: color, stroke: color, strokeWidth: 1 }))// 虚线连线模板,关键属性:strokeDashArray: [6, 3]const dashedTemplate = $(  go.Link,  // name: 'dashedLink',后面动画用到  $(go.Shape, { name: 'dashedLink', stroke: color, strokeWidth: 1, strokeDashArray: [6, 3] }),  $(go.Shape, { toArrow: 'Standard', fill: color, stroke: color, strokeWidth: 1 }))templmap.add('', defaultTemplate)// dashed 为名称,描述时用属性 category: 'dashed' 指定templmap.add('dashed', dashedTemplate)diagram.linkTemplateMap = templmap

    model 数据找到需要描述为虚线的边,加如属性:category: 'dashed',名称需要和定义模板指定的名称一致

    { from: "anhui", to: "shandong", category: 'dashed' },

    至此,实线、虚线,都绘制好了。接下来就是最后的动画了。

    3. 让虚线动起来

    找到虚线,更改属性:strokeDashOffset

    有两种方式

    • 方式1:go.Animation,会导致节点端口交互时连线操作有粘粘效果

    function animation () {  const animation = new go.Animation();  // 虚线动画  diagram.links.each((link) => {    const dashedLink = link.findObject("dashedLink");    if (dashedLink) {      animation.add(dashedLink, "strokeDashOffset", 10, 0)    }  });  animation.easing = go.Animation.EaseLinear;  // Run indefinitely  animation.runCount = Infinity;  animation.start();}animation()
    • 方式2:timeout

    function animation () {  const loop = () => {    animationTimer = setTimeout(() => {      const oldskips = diagram.skipsUndoManager;      diagram.skipsUndoManager = true;      // 虚线动画      diagram.links.each((link) => {        const dashedLinkShape = link.findObject("dashedLink");        if (dashedLinkShape) {          const off = dashedLinkShape.strokeDashOffset - 3;          // 设置(移动)笔划划动画          dashedLinkShape.strokeDashOffset = (off <= 0) ? 60 : off;        }      });      diagram.skipsUndoManager = oldskips;      loop();    }, 180);  }  loop()}animation()

    动画的两种方式,如果没有节点端口连线交互,建议用第一种方式实现,库的动画(可能内部做了优化)。如果想更灵活的控制动画或者第一种实现不了时,那么请用第二种方式。

    至此,整个效果就完成了。

    二、虚线及虚线动画背后的原理

    上面的代码,主要用到了 2 个关键的属性:strokeDashArray、strokeDashOffset。

    文档上有这么两行说明:

    For more infORMation, see Stroke Line Dash Array (w3.org),see Stroke Line Dash Offset (w3.org)

    背后就是 canvas,及其两个属性 setLineDashlineDashOffset

    参考:

    mdn - setLineDah:一个Array数组。一组描述交替绘制线段和间距(坐标空间单位)长度的数字。 如果数组元素的数量是奇数, 数组的元素会被复制并重复。

    代码示例:

    function drawDashedLine(pattern) {  ctx.beginPath();  ctx.setLineDash(pattern);  ctx.moveTo(0, y);  ctx.lineTo(300, y);  ctx.stroke();  y += 20;}const canvas = document.getElementById('canvas');const ctx = canvas.getContext('2d');let y = 15;drawDashedLine([]);drawDashedLine([1, 1]);drawDashedLine([10, 10]);drawDashedLine([20, 5]);drawDashedLine([15, 3, 3, 3]);drawDashedLine([20, 3, 3, 3, 3, 3, 3, 3]);drawDashedLine([12, 3, 3]);  // Equals [12, 3, 3, 12, 3, 3]

    怎么用gojs实现蚂蚁线动画效果

    mdn - lineDashOffset:设置虚线偏移量的属性

    代码示例:

    var canvas = document.getElementById("canvas");var ctx = canvas.getContext("2d");var offset = 0;function draw() {  ctx.clearRect(0,0, canvas.width, canvas.height);  ctx.setLineDash([4, 2]);  ctx.lineDashOffset = -offset;  ctx.strokeRect(10,10, 100, 100);}function march() {  offset++;  if (offset > 16) {    offset = 0;  }  draw();  setTimeout(march, 20);}march();

    三、虚线的一些概念

    虚线:(数学概念)以点或者短线画成的断续的线,多用于几何图形或者标记。

    为什么虚线称为蚂蚁线?
    在图像影像软件中表示选区的动态虚线,因为虚线闪烁的样子像是一群蚂蚁在跑,所以俗称蚂蚁线。
    在Photoshop,After Effect等软件中比较常见。

    蚂蚁线:动物的一种本能现象,领头的蚂蚁以随机的路线走向食物或洞穴,第二只蚂蚁紧跟其后以相同的路线行走,每一个后来的蚂蚁紧跟前面蚂蚁行走,排成一条线的现象。

    虚线的特征:流动性

    四、css 绘制边框虚线

    利用 css 的 border-style 绘制,有两个属性值:

    • dotted:显示为一系列圆点。标准中没有定义两点之间的间隔大小,视不同实现而定。圆点半径是 border-width 计算值的一半。

    • dashed:显示为一系列短的方形虚线。标准中没有定义线段的长度和大小,视不同实现而定。

    具体参考 mdn - border-style

    css 原生属性能实现虚线效果,但是要在此基础上实现动画,不容易。但是可以用 css 的其他属性来实现。

    示例:

    <div class="container">蚂蚁线</div>
    .container {  width: 100px;  height: 100px;  padding: 5px;  border: 1px solid transparent;  background: linear-gradient(white, white) padding-box,    repeating-linear-gradient(-45deg, black 0, black, 25%, transparent 0, transparent 50%) 0% 0% / 0.6em 0.6em;  animation: ants 10s linear infinite;}@keyframes ants {  to {    background-position: 100% 100%;  }}

    怎么用gojs实现蚂蚁线动画效果

    感谢各位的阅读,以上就是“怎么用gojs实现蚂蚁线动画效果”的内容了,经过本文的学习后,相信大家对怎么用gojs实现蚂蚁线动画效果这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: 怎么用gojs实现蚂蚁线动画效果

    本文链接: https://www.lsjlt.com/news/303317.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • 怎么用gojs实现蚂蚁线动画效果
      这篇文章主要讲解了“怎么用gojs实现蚂蚁线动画效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用gojs实现蚂蚁线动画效果”吧!在绘制 dag 图时,通过节点和来箭头的连线来表示节点...
      99+
      2023-06-22
    • gojs实现蚂蚁线动画效果
      目录一、gojs 实现1. 绘图2. 虚线实现3. 让虚线动起来二、虚线及虚线动画背后的原理三、虚线的一些概念四、css 绘制边框虚线在绘制 dag 图时,通过节点和来箭头的连线来表...
      99+
      2024-04-02
    • Android模拟实现支付宝蚂蚁森林效果
      目录前言自定义圆球动态随机添加小球前言 最近公司产品突然有一个类似支付宝蚂蚁森林的功能,大致功能跟支付宝蚂蚁森林相像,在看了一下支付宝蚂蚁森林的效果之后,打算先撸一个控件出来,等公司...
      99+
      2024-04-02
    • 怎么使用vue实现动画效果
      这篇文章主要介绍了怎么使用vue实现动画效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用vue实现动画效果文章都会有所收获,下面我们一起来看看吧。Vue封装的过度与动画1.作用在插入,更新,移除DOM...
      99+
      2023-07-05
    • 怎么使用js实现动画效果
      这篇文章主要介绍“怎么使用js实现动画效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用js实现动画效果”文章能帮助大家解决问题。1.动画原理      &nb...
      99+
      2023-07-05
    • WPF怎么实现3D画廊动画效果
      要实现3D画廊动画效果,可以使用WPF的3D功能和动画功能。以下是一个简单的实现步骤:1. 创建一个WPF项目,并添加一个Viewp...
      99+
      2023-08-18
      WPF
    • CSS怎么实现动画移动效果
      这篇文章主要为大家展示了“CSS怎么实现动画移动效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS怎么实现动画移动效果”这篇文章吧。思路首先我们新建一个正方形,用<svg>&l...
      99+
      2023-06-27
    • HTML5中怎么实现动画效果
      这期内容当中小编将会给大家带来有关HTML5中怎么实现动画效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.canvas html代码: 代码如下:<html&...
      99+
      2024-04-02
    • Jetpack Compose怎么实现动画效果
      这篇文章将为大家详细讲解有关Jetpack Compose怎么实现动画效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。概述compose 为支持动画提供了大量的 api,通过这些 api 我们...
      99+
      2023-06-29
    • css3中怎么实现动画效果
      今天就跟大家聊聊有关css3中怎么实现动画效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。css3的动画功能有以下三种:1、transition(...
      99+
      2024-04-02
    • CSS3怎么实现跳动圈动画效果
      这篇“CSS3怎么实现跳动圈动画效果”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“CSS3怎么实现跳动圈动画效果”文章吧。效...
      99+
      2023-07-04
    • WPF实现动画效果
      学习平台 微软开发者博客:https://devblogs.microsoft.com/WT.mc_id=DT-MVP-5003986微软文档与学习:https://docs.mic...
      99+
      2024-04-02
    • 用JavaScript实现动画效果(转)
      大家在使用Dreamweaver中的时间线功能或以做出很有趣的动画效果,Dreamweaver会自动为用户生成特定的程序代码,大家有没有想过动画的实现原理呢?其实原理是很简单的,主要是使用了一个计时器函数,下面我为大家  演示一个简单的动画...
      99+
      2023-06-03
    • 用JavaScript实现动画效果 (转)
      用JavaScript实现动画效果 (转)[@more@]主页: .NET">http://www.maxss.netEMail: maxss.net@163.com  大家在使用Dreamweaver中的时间线功能或以做出很有趣的动画效果...
      99+
      2023-06-03
    • JavaScript中怎么实现DOM动画效果
      JavaScript中怎么实现DOM动画效果,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。让一个元素从左至右进行运动<div id=&q...
      99+
      2024-04-02
    • iOS的GIF动画效果怎么实现
      本篇文章给大家分享的是有关iOS的GIF动画效果怎么实现,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。GIF在iOS中的使用场景  GIF在iOS中的使用场景有以下三个方面。&...
      99+
      2023-06-04
    • html5动画过渡效果怎么实现
      本篇内容介绍了“html5动画过渡效果怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!   1、动...
      99+
      2024-04-02
    • 浅析vue怎么实现动画效果
      vue怎么实现动画效果?下面本篇文章带大家简单了解一下Vue封装的过度与动画,希望对大家有所帮助!Vue封装的过度与动画1.作用在插入,更新,移除DOM元素时,在合适的时候给元素添加样式类名。2.写法准备好样式:元素进入的样式<tem...
      99+
      2023-05-14
      Vue 动画
    • CSS3怎么实现动画按钮效果
      这篇文章主要介绍“CSS3怎么实现动画按钮效果”,在日常操作中,相信很多人在CSS3怎么实现动画按钮效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS3怎么实现动画按钮...
      99+
      2024-04-02
    • android怎么实现加载动画效果
      Android中实现加载动画效果可以通过以下几种方式:1. 使用ProgressBar:ProgressBar是Android系统提...
      99+
      2023-08-08
      android
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作