基于p5.js实现色彩轮和饼状图的动态可视化

 更新时间:2024年06月18日 08:47:44   作者:ScriptEcho  
这篇文章主要介绍了基于p5.js实现色彩轮和饼状图的动态可视化,文中给出了详细的代码,它适用于需要展示颜色信息或数据分布情况的场景,如设计、数据分析和教育领域,感兴趣的朋友可以参考下

实现效果

项目地址:传送门

基于p5.js实现色彩轮和饼状图的动态可视化

应用场景

本代码利用p5.js库,创建了一个交互式的色彩轮和饼状图可视化界面。它适用于需要展示颜色信息或数据分布情况的场景,如设计、数据分析和教育领域。

基本功能

该代码主要实现了以下功能:

  • **色彩轮:**动态生成一个圆形色彩轮,展示色相、饱和度和亮度变化。
  • **饼状图:**基于提供的数字数据,生成一个交互式的饼状图,展示数据比例分布。

功能实现步骤及关键代码分析

1. 加载p5.js库

首先,使用loadJavascript函数异步加载p5.js库,确保其在程序执行前已加载完成。

const loadJavascript = (jsUrl) => {
  return new Promise((resolve, reject) => {
    const script = document.createElement('script')
    script.type = 'text/javascript'
    script.onload = () => resolve('')
    script.onerror = (err) => reject(err)
    script.src = jsUrl
    document.body.appendChild(script)
  })
}

2. 定义p5.js草图

onMounted钩子中,定义一个p5.js草图,该草图将渲染到#container元素中。

const sketch = (s) => {
  // ...
}

3. 设置画布和颜色模式

setup函数中,设置画布大小、颜色模式和角度模式。

s.setup = () => {
  s.createCanvas(400, 400)
  s.colorMode(s.HSB)
  s.angleMode(s.DEGREES)
}

4. 绘制色彩轮

使用colorWheel函数,根据指定的半径和角度绘制一个色彩轮。

s.colorWheel = (x, y, rad) => {
  // ...
  for (let a = 0; a < 360; a += 10) {
    s.stroke(a, 150, 200) //hue based on a
    s.line(x, y, x + rad * s.cos(a), y + rad * s.sin(a))
  }
}

5. 绘制饼状图

使用pieChartPop函数,根据提供的数字数据绘制一个饼状图。

s.pieChartPop = (x, y) => {
  // ...
  let startValue = 0
  let range = 0

  // ...
  s.drawSlice(fColor, x, y, 200, startValue, startValue + range)
  startValue += range
  // ...
}

6. 绘制饼状图切片

使用drawSlice函数,根据指定的颜色、位置、直径和百分比范围绘制一个饼状图切片。

s.drawSlice = (fColor, x, y, d, percent1, percent2) => {
  s.fill(fColor)
  s.arc(x, y, d, d, -90 + percent1 * 360, -90 + percent2 * 360)
}

7. 初始化p5.js实例

使用new p5函数,初始化一个p5.js实例,并将草图附加到#container元素中。

new p5(sketch, 'container')

总结与展望

开发这段代码的过程中,我学习到了如何使用p5.js库创建交互式的可视化效果。该代码可以根据不同的数据和参数进行定制,以满足各种可视化需求。

未来,该卡片功能可以进一步拓展和优化,例如:

  • **数据绑定:**将饼状图的数据绑定到外部数据源,实现实时更新。

  • **交互性增强:**允许用户与饼状图交互,如选择切片或查看详细信息。

  • **移动设备优化:**优化代码以适应移动设备,实现跨平台兼容性。

到此这篇关于基于p5.js实现色彩轮和饼状图的动态可视化的文章就介绍到这了,更多相关p5.js实现色彩轮和饼状图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js 事件处理函数间的Event物件是否全等

    js 事件处理函数间的Event物件是否全等

    在非IE,事件对象Propagation之间的处理函数,或同dom节点触发的多个函数之间的Event物件是全等的。与绑定形式[addEventListener/DOM0]无关。
    2011-04-04
  • JS给超链接加确认对话框的方法

    JS给超链接加确认对话框的方法

    这篇文章主要介绍了JS给超链接加确认对话框的方法,涉及javascript操作对话框的技巧,需要的朋友可以参考下
    2015-02-02
  • Javascript this 的一些学习总结

    Javascript this 的一些学习总结

    相信有C++、C#或Java等编程经验的各位,对于this关键字再熟悉不过了。由于Javascript是一种面向对象的编程语言,它和C++、C#或Java一样都包含this关键字,接下来我们将向大家介绍Javascript中的this关键字
    2012-08-08
  • JS实现的文字间歇循环滚动效果完整示例

    JS实现的文字间歇循环滚动效果完整示例

    这篇文章主要介绍了JS实现的文字间歇循环滚动效果,涉及javascript结合时间函数定时触发实现页面元素动态操作相关技巧,需要的朋友可以参考下
    2018-02-02
  • 浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)

    浅析showModalDialog数据缓存问题(用禁止浏览器缓存解决)

    在使用showModalDialog弹出窗口时,显示的数据是上次修改前的数据,这是因为默认情况下页面保存了缓存,所以显示的数据并不是修改后的情况
    2013-07-07
  • 移动端H5唤起APP的写法实例(IOS、android)

    移动端H5唤起APP的写法实例(IOS、android)

    最近在做扫码之后的h5页面唤醒App的功能,所以记录一下,这篇文章主要给大家介绍了关于移动端H5唤起APP的相关资料,需要的朋友可以参考下
    2021-07-07
  • 利用Javascript实现简单的转盘抽奖

    利用Javascript实现简单的转盘抽奖

    这篇文章主要介绍了利用Javascript实现的简单的转盘抽奖,文中分享了两种抽奖效果,一种是默认转动,一种是需要点击开始转动的,并给出了晚上的示例代码,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-02-02
  • js中select选择器的change事件处理函数详解

    js中select选择器的change事件处理函数详解

    Js操作Select是很常见的,也是比较实用的,下面这篇文章主要给大家介绍了关于js中select选择器的change事件处理函数的相关资料,文中给出了详细的实例代码,需要的朋友可以参考下
    2023-06-06
  • js getBoundingClientRect使用方法详解

    js getBoundingClientRect使用方法详解

    这篇文章主要介绍了js getBoundingClientRect使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • JavaScript中你不知道的Object.entries用法

    JavaScript中你不知道的Object.entries用法

    大家应该都知道,Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致,这篇文章主要给大家介绍了关于JavaScript中你不知道的Object.entries用法的相关资料,需要的朋友可以参考下
    2021-10-10

最新评论