JavaScript 图形:初学者的视觉编程之旅

你好,有抱负的程序员!我很高兴能成为你进入JavaScript图形世界的向导。作为一位拥有超过十年计算机科学教学经验的人,我可以告诉你,图形编程是编码中最有回报和乐趣的方面之一。那么,让我们卷起袖子,开始吧!

JavaScript - Graphics

JavaScript 图形简介

在我们探索具体的库和工具之前,让我们了解一下为什么JavaScript中的图形如此重要。想象一下,如果所有的网站都只是纯文本——那该多无聊啊?图形为我们的数字体验带来了生机,使它们更具吸引力、信息性和有时甚至带有魔力!

WebGL:浏览器中的3D力量

WebGL是什么?

WebGL(Web图形库)是一个JavaScript API,它允许我们在网页浏览器中渲染高性能的2D和3D图形。它就像在网页中拥有一个迷你电影工作室!

你的第一个WebGL程序

让我们从一个简单的例子开始。我们将在画布上创建一个红色三角形:

<canvas id="myCanvas" width="400" height="300"></canvas>
<script>
// 获取画布元素
var canvas = document.getElementById('myCanvas');
var gl = canvas.getContext('webgl');

// 定义顶点着色器
var vertexShaderSource = `
attribute vec4 a_position;
void main() {
gl_Position = a_position;
}
`;

// 定义片段着色器
var fragmentShaderSource = `
precision mediump float;
void main() {
gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
`;

// 创建着色器
var vertexShader = gl.createShader(gl.VERTEX_SHADER);
gl.shaderSource(vertexShader, vertexShaderSource);
gl.compileShader(vertexShader);

var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
gl.shaderSource(fragmentShader, fragmentShaderSource);
gl.compileShader(fragmentShader);

// 创建程序
var program = gl.createProgram();
gl.attachShader(program, vertexShader);
gl.attachShader(program, fragmentShader);
gl.linkProgram(program);

// 使用程序
gl.useProgram(program);

// 创建缓冲区
var positionBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);

// 设置几何形状
var positions = [
0.0,  0.5,
-0.5, -0.5,
0.5, -0.5
];
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);

// 设置属性
var positionAttributeLocation = gl.getAttribLocation(program, "a_position");
gl.enableVertexAttribArray(positionAttributeLocation);
gl.vertexAttribPointer(positionAttributeLocation, 2, gl.FLOAT, false, 0, 0);

// 绘制
gl.drawArrays(gl.TRIANGLES, 0, 3);
</script>

哇,这可是个需要消化的大工程!让我们分解一下:

  1. 我们从创建一个画布元素并获取其WebGL上下文开始。
  2. 我们定义了两个着色器:一个顶点着色器(用于定位我们的三角形)和一个片段着色器(用于将其染成红色)。
  3. 我们使用这些着色器创建了一个程序。
  4. 我们创建了一个缓冲区来存储我们三角形的顶点位置。
  5. 最后,我们绘制了三角形。

如果这看起来很复杂——别担心,WebGL功能强大但学习曲线陡峭。随着我们不断进步,你会对这些概念越来越熟悉。

P5.js:轻松愉快地创意编程

P5.js是什么?

P5.js是一个使创建视觉内容变得轻松的JavaScript库。它非常适合初学者和艺术家!

使用P5.js绘制形状

让我们使用P5.js绘制一个简单的脸:

<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js"></script>
<script>
function setup() {
createCanvas(400, 400);
}

function draw() {
background(220);

// 脸
fill(255, 220, 180);
ellipse(200, 200, 300, 300);

// 眼睛
fill(0);
ellipse(150, 150, 50, 50);
ellipse(250, 150, 50, 50);

// 嘴巴
noFill();
stroke(0);
arc(200, 250, 100, 50, 0, PI);
}
</script>

这段代码创建了一个画布,绘制了一个圆形作为脸,两个较小的圆形作为眼睛,以及一个弧形作为笑容。P5.js使用一个setup()函数来初始化画布和一个draw()函数,该函数持续运行以更新绘图。

Plotly.js:让数据可视化变得美丽

Plotly.js是什么?

Plotly.js是一个高级图表库,允许您创建美丽、交互式的图表和图形。

创建条形图

让我们创建一个简单的条形图来展示水果偏好的情况:

<div id="myPlot"></div>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<script>
var data = [{
x: ['苹果', '香蕉', '橙子'],
y: [20, 14, 23],
type: 'bar'
}];

var layout = {
title: '水果偏好',
xaxis: {title: '水果'},
yaxis: {title: '投票数'}
};

Plotly.newPlot('myPlot', data, layout);
</script>

这段代码创建了一个条形图,其中三个条形代表不同水果的投票数。Plotly.js为我们处理了所有的复杂渲染!

Chart.js:简单而强大的图表

Chart.js是什么?

Chart.js是另一个受欢迎的图表库,以其简单性和响应式图表而闻名。

创建饼图

让我们创建一个饼图来展示一个人日常活动的分布情况:

<canvas id="myChart"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {
type: 'pie',
data: {
labels: ['睡眠', '工作', '休闲', '进食', '其他'],
datasets: [{
data: [8, 8, 4, 2, 2],
backgroundColor: [
'rgba(255, 99, 132, 0.8)',
'rgba(54, 162, 235, 0.8)',
'rgba(255, 206, 86, 0.8)',
'rgba(75, 192, 192, 0.8)',
'rgba(153, 102, 255, 0.8)'
]
}]
},
options: {
title: {
display: true,
text: '日常活动'
}
}
});
</script>

这段代码创建了一个彩色的饼图,展示了一个人一天24小时是如何度过的。Chart.js为我们处理了计算和渲染。

Google Charts:借助Google的强大基础设施

Google Charts是什么?

Google Charts是一个强大的图表库,利用Google的基础设施来创建快速、交互式的图表。

创建折线图

让我们创建一个折线图来展示一家公司随时间的销售情况:

<div id="chart_div"></div>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);

function drawChart() {
var data = google.visualization.arrayToDataTable([
['年份', '销售额'],
['2018',  1000],
['2019',  1170],
['2020',  660],
['2021',  1030]
]);

var options = {
title: '公司业绩',
curveType: 'function',
legend: { position: 'bottom' }
};

var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
</script>

这段代码创建了一个平滑的折线图,展示了四年的销售额。Google Charts提供了各种各样的图表类型和自定义选项。

结论

恭喜你!你已经迈出了进入JavaScript图形世界的第一步。我们涵盖了从WebGL的低级功能到Chart.js的简单性。记住,掌握这些库的关键是实践。所以,不要害怕去实验并创建你自己的可视化!

下面是一个总结我们所讨论库的表格:

主要用例 难度级别
WebGL 3D图形,游戏开发 高级
P5.js 创意编程,艺术项目 初学者
Plotly.js 科学和统计数据图表 中级
Chart.js 简单,响应式图表 初学者
Google Charts 多种图表,Google集成 中级

继续编码,继续创造,最重要的是,享受乐趣!图形世界是你的珍珠,JavaScript是你的宝石。快乐编码!

Credits: Image by storyset