热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

dat.gui在Vue里的连接使用,包含实例

前言:最近项目在整一个绘制栅格颜色的工具,使用到了dat.gui,不知道是不是我的搜索方式有问题,只是看到了API的使用&#

前言:最近项目在整一个绘制栅格颜色的工具,使用到了dat.gui ,不知道是不是我的搜索方式有问题,只是看到了API的使用,在这一点上如何让两个folder之间产生关联 属实是 折磨了我一会。这篇文章会介绍dat.gui 在Vue 下的 最基本 使用,以及不同folder下的联动。包含增添、删除,更新数据等。在我默认你有一定前端基础的前提下,我会尽可能的缩短篇幅。
在这里插入图片描述


下载以及引入


npm install dat.gui --save-dev
安装在开发环境中即可。


import dat from 'dat.gui'

最基础使用

在这里插入图片描述
简述一下:这里的关键在于 生成一个GUI的类,往这个类里添加Controller,Controller有4种类型,一个是数字类型,一个是字符串类型,一个是布尔类型,一个是函数类型。分别会有不同的显示状况。要想使用很简单,实例化这个GUI,然后往里面去填充controller即可。
在这里插入图片描述

// 在vue 里面 可以这样定义
// data(){ return { person: {name: 'Sam'} } }
var gui = new dat.GUI();
gui.add(this.person,'name');

以上代码就可以生成一个在右上角挂着的一个控制器,形状如:name [[[[[input框]]]]]。
当然通常如果稍微复杂一点,有多个属于同一类型的我们最好把他放在一个文件夹,即folder。
在这里插入图片描述
如上图所示,只需添加一个文件夹的名字即可。所以。

// 在vue 里面 可以这样定义
// data(){ return { person: {name: 'Sam'} } }
var gui = new dat.GUI();
let persons = gui.addFolder('很多人');
persons.add(this.person,'name');

这样就可以显示一个很多人的目录,目录下面有一个name为Sam的控制器。


进阶

假如我想要的是上面图的效果。那么首先,我应该是需要一个可遍历的数组对象。

"legendData": [{"val": -20,"color": [149,137,211]},{"val": -10,"color": [139,206,206]},{"val": 0,"color": [70,134,198]},{"val": 10,"color": [106,144,41]},{"val": 20,"color": [211,173,8]},{"val": 30,"color": [235,94,20]},{"val": 40,"color": [145,46,11]}],

你可以直接把他塞到data里面使用,接着循环遍历这个列表 绘制 颜色。这里应该会有个疑惑,为啥color长这样,跟我在写的项目有关了。

data() {return {colors: {},colorNumObj: {nums: 0,},legendKeyObj: {},startFlag: false,// 图例 数组对象curLegendData: [],// 根据图例生成的rgbArray[ [ ] , [ ] ]curColorsArr: [],viewer: null,// 定时器 idtimer: 3,startTimeStamp: 0,// sortKeylastSortKey: [],}},

根据 数据 处理colors 生成颜色对象

methods: {//这个 函数 就是为了把 key 值 排序 分割成 数组形式。用于得到排序的结果// 而不是直接通过for in 去遍历对象 keySort: function (obj) {let sortKeyStr = Object.keys(obj).sort((a, b) => a - b).join(',');let sortKeyArr = sortKeyStr.split(',');return sortKeyArr;},
}
mounted(){let legendDate &#61; this.legendDate; //这个在上面已经给出数据了。for (let i &#61; 0; i < legendDate.length; i&#43;&#43;) {console.log(legendDate[i])let str &#61; legendDate[i].color.join(&#39;,&#39;)let value &#61; legendDate[i].val;this.$set(this.colors, value, &#96;rgb(${str})&#96;)}let colorKeyArr &#61; this.keySort(_C_colors)for (let i &#61; 0, ii &#61; colorKeyArr.length; i < ii; i&#43;&#43;) {this.$set(this.legendKeyObj,&#96;${i &#43; 1}个颜色数值&#96;,Number(&#96;${legendDate[i].val}&#96;))}// 上面操作 做如下事情// 1、初始化了 this.colors 对象 形状如 { &#39;20&#39;: rgb(?,?,?), &#39;30&#39;: rgb(?,?,?) }// 2、 初始化了 this.legendKeyObj 对象 形状如 { &#39;第1个颜色数值&#39; , 20}}

var gui &#61; new dat.GUI()
var f &#61; gui.addFolder(&#39;颜色调试&#39;);
var nums &#61; gui.addFolder(&#39;颜色数值&#39;)
let legendKeyObj &#61; this.legendKeyObj
for (let i in legendKeyObj) {// 先获取 key 的索引 匹配 数字。 为什么这样做&#xff1f;因为在finishChange里 更新的这个操作已经完成了。// 所以 无法 拿到最开始的key 。 所以需要绕一个圈去进行修改 操作。nums.add(legendKeyObj, i).min(-100).max(1000).step(1).onFinishChange((e) &#61;> {// e 传进来一个改变后的值// 这个handler 做的 主要就是 同步上面的Colors 的名字的 状态.console.log(i);let key &#61; Number(i.replace(/[^0-9]/ig,""));// key - 1 得到 索引。 得到索引 之后 读取 sortkey 值 进行修改let __controllers__Index &#61; key - 1;f.__controllers[__controllers__Index].name(e);})
}
let sortKeyArr &#61; this.sortKey();
for (let i &#61; 0, ii &#61; sortKeyArr.length; i < ii; i&#43;&#43;) {//添加颜色 获取这个排序后的值 按序进行添加操作。f.addColor(this.colors, sortKeyArr[i]);
}

以上是 其中的一种联动。即改变某一个文件夹里的值或者某一个控制器的值 让另一个控制器响应。
还有一种联动是对视图的操作。即如何在通过修改了你的引用对象如此文中的this.colors 我后面新增了一个key value&#xff0c;但是视图没有更新的情况&#xff1b;或者是删除了一个keyvalue&#xff0c;视图没有更新的情况。都会分别介绍。


添加

添加同样&#xff0c;往vue上 具有响应式 还是得 $set&#xff0c;但除此之外&#xff0c;如果想响应式地也把dat.gui的视图更新了&#xff0c;别妄想你set之后就会更新&#xff0c;你set顶多只是保证你的状态是正确的。你得手动操作&#xff0c;例如我在某一个控制器的change事件里做如下事情。即可做到响应式地更新。

// 添加属性 与值
this.$set(this.colors, key, rgb?)
//添加到视图
f.addColor(this.colors, key)

删除

// 具体可以打印一下控制器。 remove 某一个控制器
this.$delete(this.colors,key);
f.remove(f.__controllers[someIndex])

总结

这篇文章就结束了&#xff0c;主要介绍了dat.gui 的使用&#xff0c;以及联动的方法。一个是视图更新的操作&#xff0c;一个是控制器里的某个属性被更改 响应另一个控制器。


推荐阅读
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 怀疑是每次都在新建文件,具体代码如下 ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
author-avatar
手机用户3312丿075454
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有