【D3.js in Action 3 精译】1.2.3 Canvas 与 WebGL + 1.2.4 CSS

news/2024/7/8 1:35:31 标签: webgl, css, 数据可视化, 信息可视化, 前端

当前内容所在位置

  • 第一部分 D3.js 基础知识
    • 第一章 D3.js 简介
      • 1.1 何为 D3.js?
      • 1.2 D3 生态系统——入门须知
        • 1.2.1 HTML 与 DOM
        • 1.2.2 SVG - 可缩放矢量图形
        • 1.2.3 Canvas 与 WebGL ✔️
        • 1.2.4 CSS ✔️
        • 1.2.5 JavaScript(精译中 ⏳)
        • 1.2.6 Node 与 JavaScript 框架(待翻译)
        • 1.2.7 Observable 记事本(待翻译)

译注
经过了 SVG 基础知识部分的“重磅洗礼”后,剩下的 D3 基础知识点就没有那么密集了,但是也不能掉以轻心,这些都是学好整本书后续内容的基础。基础不牢,地动山摇。一起来过一遍这些知识点吧。另外,CSS 较薄弱的朋友,也可以看看我的另一个技术专栏《CSS in Depth 2》。这本书也是 CSS 进阶的神作,翻译的都是全新第二版(预计本月在 Manning 出版发行)中的内容。敬请关注,有问题随时给我留言即可。

1.2.3 Canvas 与 WebGL

虽然 D3 项目常用 SVG 元素来构建,但偶尔也会遇到对大型数据集创建复杂可视化的情况,这时再用 SVG 来实现可能会出现性能问题。关键是记住一点:D3 会对数据可视化中的每一个图形向 DOM 中添加一个或多个 SVG 元素。其中一个典型案例,是实现一个由数千个节点(nodes)和链接(links)组成的大型网络可视化效果——估计会让浏览器不堪重负……虽然浏览器不断升级的性能可以轻松处理越来越多的对象型数量,但一则普遍接受的实践经验是:如果可视化包含的元素超过 1000 个,就应该考虑改用 Canvas 而不是 SVG。

Canvas 画布是一类客户端绘图 API,利用脚本(通常为 JavaScript)来创建视觉效果和动画。Canvas 不会将 XML 元素添加到 DOM 中,这就大大提高了构建大型数据集下的可视化效果的性能。但 Canvas 无法提供能媲美 SVG 的高清渲染效果,并且会使交互逻辑的处理复杂化,因此综合考虑,本书主要还是沿用 SVG 来进行构建。

Canvas 还可以通过 WebGL 的 API 创建出 3D 对象。虽然 WebGL 的学习不在本书讨论范围内,但在 Web 中创建 3D 数据可视化是完全可行的。目前,它主要用于实验性质的项目。本书第 15 章还会介绍如何使用 Canvas 构建可视化,并讨论其优缺点。

1.2.4 CSS

CSS 是层叠样式表(Cascading Style Sheets)的缩写形式。它是一种描述 DOM 元素在屏幕上的显示方式与外观效果的语言。从页面整体的 Grid 网格布局、到文本使用的字体系列(family of fonts)、再到散点图中数据点的颜色,CSS 可以将一个普通的 HTML 文件打造成令人惊叹的网页。在 D3 项目中,通常使用行内样式或引入外部样式表来应用 CSS 样式。

如以下示例代码所示,行内样式表(inline-styles)通过 style 属性(attribute)应用到所在元素。 style 属性既可用于传统 HTML 元素,也可用于 SVG 元素,D3 为这些属性值的读写访问提供了一种便捷的方法,本书后续第 2 章会重点讨论。

<div style="css language-css">padding:10px; background:#00ced1;"> ... </div>
<text style="css language-css">font-size:16px; font-family:serif;"> ... </text>

行内样式只对所在元素生效。若要在多个元素上生效,分别在其 style 属性应用相同的样式(或者应用到包含对应元素的 SVG 分组元素上)倒也不是不行,但这并不是最有效的方法。

另一方面,外部 CSS 样式表则非常适合让样式在全局范围内生效。其中一种方案是要求 D3 为多个元素添加相同的类名(class names),然后在外部样式表使用该类名作选择器(selector),并在目标元素中应用相同的样式属性(styling properties),如以下示例所示。这种方法效率更高,尤其是在维护大型项目时。它还遵循了“关注点分离”原则(the separation of concerns principle):将使用 JavaScript 控制的行为,与使用 CSS 规范的样式分离开来。注意,像 SASS 和 LESS 这样的 CSS 预处理工具也属于引入外部样式表方案的一部分。

CSS 样式表中的样式代码如下:

css">.my-class {
  font-size: 16px;
  font-family: serif;
}

而在 DOM 中对应的 HTML 如下:

<text class="my-class"> ... </text>

切记:行内样式会优先于从外部样式表引入的样式。因此在任何前端开发项目中,牢记 CSS 的层叠顺序 始终是样式架构规划过程中的重中之重。

(由于下一个小节讲 JavaScript 的基础知识,内容较多,决定在下一篇译文中呈现,敬请留意)


http://www.niftyadmin.cn/n/5535993.html

相关文章

C语言学习笔记--第一个程序

第一个C语言程序 #include<stdio.h> //引用输入输出头文件&#xff0c;每一次都需要引用这个文件 //.h是头文件 // .c是源文件 // .cpp是C源文件&#xff0c;兼容C //C的第一个程序 // 行注释&#xff08;只能注释这一行&#xff09; /*块注释 */ int main() {printf(&…

第3章.中央服务器的物联网模式--规则引擎

规则引擎 规则引擎本质上是物联网事件和需要与这些事件相关联的动作之间的映射。在物联网环境中&#xff0c;事件通常使用传感器生成&#xff0c;所需的动作由执行器采取。本书中用于该图案的符号如下图所示&#xff1a; 图3.6–“规则引擎”模式的符号 一个有趣的类比是将规则…

Vuetify3:监听当前手机还是电脑

我们在开发的时候&#xff0c;实现根据移动设备或PC设备来改编一些交互样式&#xff0c;这个时候我们需要监听宽度&#xff0c;在Vuetify3中可我们可以参考 ​​​​显示 & 平台配合监听即可在窗口缩小的时候判断出手机还是电脑 <template><v-app><div v-if…

航空数据管控系统-①项目准备阶段:任务2:项目技术预研(技术架构)

任务描述 掌握项目的总体功能&#xff0c;及实现流程。预习项目中所使用到的技术和知识点。 任务指导 一、项目效果展示 图1-数据统计大屏页面 图2-航空实时监控页面 二、项目架构 1、总体架构&#xff1a; 2、技术架构 技术清单&#xff1a; 功能 组件 说明 消息中间件…

Java Stream API 常用操作技巧

Java 8 引入的 Stream API 为集合操作提供了一种声明式编程模型&#xff0c;极大地简化了数据处理的复杂性。本文将介绍 Java Stream API 的几种常用操作方式&#xff0c;帮助开发者更高效地处理集合数据。 1. 过滤&#xff08;Filtering&#xff09; 过滤是选择集合中满足特…

jvm 03 JVM的运行时数据区域 ,(类常量池,运行时常量池,字符串常量池这个三个的区别),操作系统内存模型JMM和JVM的内存模型联系

方法区在jdk8后&#xff0c;改成元空间 JVM内存模型&#xff1a; JMM 主内存&#xff1a;本地方法区和堆 工作内存&#xff1a;私有的工作栈 其实一个JVM内存模型&#xff08;主要就是运行时数据区域&#xff09;一个Java进程的JMM&#xff0c;工作内存JVM中线程的内存区域…

10 - Python文件编程和异常

文件和异常 在实际开发中&#xff0c;常常需要对程序中的数据进行持久化操作&#xff0c;而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词&#xff0c;可能需要先科普一下关于文件系统的知识&#xff0c;对于这个概念&#xff0c;维基百科上给出…

深度学习之OpenCV的DNN模块

OpenCV的DNN&#xff08;Deep Neural Network&#xff09;模块是一个强大的工具&#xff0c;允许开发者在计算机视觉应用中使用深度学习模型。该模块支持多种深度学习框架和模型格式&#xff0c;并提供了高效的推理能力。以下是对OpenCV DNN模块的详细介绍&#xff0c;包括其功…