3D词云图

工具库

  • tagcanvas.min.js

  • vue3(框架其实无所谓,都可以)

实现

<script setup>
import { onMounted, ref } from 'vue';
import './tagcanvas.min.js';

const updateFlag = ref(false);

// 词云图初始化
const initWordCloud = () => {
  let o = {
    maxSpeed: 0.02, // 添加最大的运动速度
    minSpeed: 0.01, // 添加最小的运动速度这样就可以保证一直运动,不会停止
    textHeight: 14,
    outlineMethod: 'colour', // tag hover 之后的 轮廓效果
    fadeIn: 800,
    outlineColour: '#2463f3',
    textColour: null,
    outlineOffset: 0,
    depth: 0.97,
    minBrightness: 0.2,
    wheelZoom: false,
    reverse: true, // 运动方向与鼠标移动方向相反
    // shadowBlur: 1,
    shuffleTags: true,
    shadowOffset: [1, 1],
    stretchX: 1.2, // Stretch or compress the cloud horizontally. 水平拉伸词云
    initial: [0.1, 0.1], // 给词云添加一个初始的运动方向
    textFont: null, // 字体设置为 null 就会继承 每个 tag的a 标签的字体
    weight: false, // weight 打开,就可以根据默认的字体的大小作为权重,对tag 的样式进行调整
    weightMode: 'size', // 样式调整的方式
    weightSize: 0.5, // 调整 tag 字体的大小,加个 权重
  };

  try {
    // 如果不是更新,说明是第一次渲染,就启动 tagcanvas, 否则就代表更新
    if (!updateFlag.value) {
      window.TagCanvas.Start('world-cloud-canvas', 'weightTags', o);
      updateFlag.value = true;
    } else {
      window.TagCanvas.Update('world-cloud-canvas');
    }
  } catch (e) {
    console.error(e);
  }
};

const createTagListDom = (res) => {
  let fragment = new DocumentFragment();

  for (let i = 0; i < res.length; i++) {
    let a = document.createElement('a');

    // 字符串长度大于10就要换行
    if (res[i].word.length > 10) {
      let charArr = res[i].word.split('');

      charArr.splice(10, 0, '<br>');
      res[i].word = charArr.join('');
    }

    a.innerHTML = res[i].word;
    a.href = 'javascript:void(0)';

    // 如果是要加重展示就 设置属性为 huge 或large, 否则就设置属性为 medium 或small
    if (res[i].isActive) {
      // 设置a标签颜色为红色
      a.style.color = '#2463f3';
      a.style.fontSize = '28px';
    } else {
      a.style.color = '#66666690';
      a.style.fontSize = '14px';
    }

    fragment.append(a);
  }

  // 更新 tagContainer中的 tag元素
  let tagsContainer = document.querySelector('#weightTags');

  tagsContainer.innerHTML = '';
  tagsContainer.append(fragment);

  initWordCloud();
};

onMounted(() => {
  createTagListDom([
    {
      id: 1,
      word: 'JavaScript',
      isActive: true,
    },
    {
      id: 2,
      word: 'Vue.js',
      isActive: true,
    },
    {
      id: 3,
      word: 'React.js',
      isActive: false,
    },
    {
      id: 4,
      word: 'Node.js',
      isActive: false,
    },
    {
      id: 5,
      word: 'TypeScript',
      isActive: false,
    },
    {
      id: 6,
      word: 'HTML',
      isActive: false,
    },
    {
      id: 7,
      word: 'CSS',
      isActive: false,
    },
    {
      id: 8,
      word: 'Sass',
      isActive: false,
    },
    {
      id: 9,
      word: 'Less',
      isActive: false,
    },
    {
      id: 10,
      word: 'Webpack',
      isActive: false,
    },
    {
      id: 11,
      word: 'Babel',
      isActive: false,
    },
    {
      id: 12,
      word: 'Gulp',
      isActive: false,
    },
    {
      id: 13,
      word: 'Grunt',
      isActive: false,
    },
    {
      id: 14,
      word: 'NPM',
      isActive: false,
    },
    {
      id: 15,
      word: 'Yarn',
      isActive: false,
    },
    {
      id: 16,
      word: 'Git',
      isActive: false,
    },
    {
      id: 17,
      word: 'GitHub',
      isActive: false,
    },
    {
      id: 18,
      word: 'Jest',
      isActive: false,
    },
    {
      id: 19,
      word: 'Mocha',
      isActive: false,
    },
    {
      id: 20,
      word: 'Enzyme',
      isActive: false,
    },
  ]);
});
</script>

<template>
  <div class="w-386px">
    <div class="h-306px w-full">
      <canvas id="world-cloud-canvas" width="386" height="306" style="width: 100%; max-width: 386px"> </canvas>
    </div>
    <div id="weightTags" class="hidden"></div>
  </div>
</template>

效果

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/365220.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【echarts】动态滚动趋势图,解决坐标轴数据太多遮挡覆盖问题

写在前面 业务场景x轴的文字太多&#xff0c;会出现遮挡问题&#xff0c;想到文字倾斜展示&#xff0c;页面不美观&#xff0c;于是想到使用滚动条优化趋势图。 <template><div id"storeDown" style"height: 400px;width:100%"/> </temp…

LEETCODE 75. 颜色分类

class Solution { public:void sortColors(vector<int>& nums) {//先定0int i,j;i0;j0;int nnums.size();while(j<n){if(nums[j]0){int tmpnums[j];nums[j]nums[i];nums[i]tmp;j1;i1;}else{j1;}}//对[i,n]处理&#xff0c;定1int i1i;ji1;while(j<n){if(nums[j…

小程序支付类型接入京东支付

一、情景描述 当前项目想在微信小程序付款时添加上京东支付支付类型&#xff0c;效果如下 普通的付款方式可以直接付款就能完成支付&#xff0c;但京东支付无法在小程序上直接付款&#xff0c;他需要复制生成的链接&#xff0c;然后打开京东app然后在京东平台上付款。 所以&…

Vue(二十):ElementUI 扩展实现表格组件的拖拽行

效果 源码 注意&#xff1a; 表格组件必须添加 row-key 属性&#xff0c;用来优化表格的渲染 <template><el-row :gutter"10"><el-col :span"12"><el-card class"card"><el-scrollbar><span>注意: 表格组件…

c++设计模式之观察者模式(发布-订阅模式)

介绍 观察者模式主要关注于对象的一对多关系&#xff0c;其中多个对象都依赖于一个对象&#xff0c;当该对象的状态发生改变时&#xff0c;其余对象都能接收到相应的通知。 如&#xff0c;现在有 一个数据对象三个画图对象&#xff0c;分别wield曲线图、柱状图、饼状图三个对象…

AI Prompt工程师 学习整理

前言 如果说Al大语言模型(LLM,Large Language Model)是宝藏我,那么Prompt提示词就是打开宝藏的钥匙。 最新一代的Al大语言模型具备出色的创作能力,能够生成富有人类感情、严谨逻辑、多场景应用的内容,而如何获得高质量的回答,正确学习使用Prompt提示词是关键。 &#x1f4a5…

详解WebRTC rtc::Thread实现

rtc::Thread介绍 rtc::Thread类不仅仅实现了线程这个执行器&#xff08;比如posix底层调用pthread相关接口创建线程&#xff0c;管理线程等&#xff09;&#xff0c;还包括消息队列&#xff08;message_queue)的实现&#xff0c;rtc::Thread启动后就作为一个永不停止的event l…

2023爱分析·知识库问答市场厂商评估报告:爱数

01 研究范围定义 研究范围&#xff1a; 大模型是指通过在海量数据上依托强大算力资源进行训练后能完成大量不同下游任务的模型。2023年以来&#xff0c;ChatGPT引爆全球大模型市场。国内众多大模型先后公测&#xff0c;众多互联网领军者投身大模型事业&#xff0c;使得大模型…

【Linux】环境基础开发工具的使用之gcc详解(二)

前言&#xff1a;上一篇文章中我们讲解了Linux下的vim和yum的工具的使用&#xff0c;今天我们将在上一次的基础上进一步的讲解开放工具的时候。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:Linux的深度刨析 &#x1f448; &#x1f4a…

贰[2],Xamarin生成APK

1&#xff0c;生成改为Release版本 2&#xff0c;选中****.Android项目 3&#xff0c;点击生成&#xff0c;选择存档 4&#xff0c;点击分发 5&#xff0c;选择临时 6&#xff0c;添加签名标识 7&#xff0c;选择对应的签名标识&#xff0c;点击另存为

文献阅读:金鱼端脑细胞类型图谱揭示了空间结构和细胞类型进化的多样性

文献介绍 「文献题目」 A telencephalon cell type atlas for goldfish reveals diversity in the evolution of spatial structure and cell types 「研究团队」 Amit Zeisel&#xff08;以色列理工学院&#xff09;、Ronen Segev&#xff08;本古里安大学&#xff09; 「发表…

认识“协议”

协议 协议的概念结构化数据的传输将结构化的数据组合成一个字符串序列化和反序列化协议定制客户端代码服务线程执行例程 协议的概念 协议&#xff0c;网络协议的简称&#xff0c;网络协议是通信计算机双方必须共同遵从的一组约定&#xff0c;比如怎么建立连接、怎么互相识别等…

H12-811_503

503.如下图所示&#xff0c;下列说法正确是&#xff1f;( ) A.主机A和主机B的广播地址相同 B.主机A可以ping通主机B C.主机A和主机B不能获取对方的MAC地址 D.主机A的ARP缓存中存在如下条目10.0.12.5 MAC-B 答案&#xff1a;C 注释&#xff1a; 两个主机IP地址的网…

Elasticsearch:Geoshape query

Geoshape 查询可以用于过滤使用 geo_shape 或 geo_point 类型索引的文档。 geo_shape 查询使用与 geo_shape 或 geo_point 映射相同的索引来查找具有与查询形状相关的形状的文档&#xff0c;并使用指定的空间关系&#xff1a;相交&#xff08;intersect&#xff09;、包含(con…

【代码随想录20】669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

目录 669.修剪二叉搜索树题目描述参考代码 108.将有序数组转换为二叉搜索树题目介绍参考代码 538.把二叉搜索树转换为累加树题目描述参考代码 669.修剪二叉搜索树 题目描述 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树…

Map和Set讲解

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 集合框架 模型 Set 常见方法和说明 Set总结 Map说明 Map常见方法和说明 Map 中HashMap的 …

SpringMVC入门学习(十)----mvc:annotation-driven标签介绍

目录 1、关于mvc:annotation-driven作用2、mvc:annotation-driven在什么时候必须配置3、关于mvc:annotation-driven配合使用的几种情况 回到顶部 1、关于mvc:annotation-driven作用 [1]、<mvc:annotation-driven /> 会自动向容器中注册如下组件&#xff0c;并且会代替…

2024 美国大学生数学建模竞赛 美赛(D题)五大湖水资源调配问题 国际大学生数学建模竞赛| 建模秘籍文章代码思路大全

铛铛&#xff01;小秘籍来咯&#xff01; 小秘籍希望大家都能轻松建模呀&#xff0c;华数杯也会持续给大家放送思路滴~ 抓紧小秘籍&#xff0c;我们出发吧~ 完整内容可以在文章末尾领取&#xff01; 问题一&#xff1a;建立一个包括五大湖和连接从苏必利尔湖到大西洋的河流的…

2024Node.js零基础教程(小白友好型),nodejs新手到高手,(四)NodeJS入门——http协议

041_网络基础概念_IP的介绍 hello&#xff0c;大家好&#xff0c;我们来一起认识一下IP。 在开始介绍 IP 之前&#xff0c;我们首先来介绍一个场景&#xff0c;方便大家去理解 IP 这个概念。比如这会儿强哥正在成都&#xff0c;然后还有另外一个小伙伴&#xff0c;谁呢&#x…

基于OpenCV灰度图像转GCode的单向扫描实现

基于OpenCV灰度图像转GCode的单向扫描实现 引言单向扫描存在的问题灰度图像单向扫描代码示例结论 基于OpenCV灰度图像转GCode的单向扫描实现 本文将介绍如何使用OpenCV库将灰度图转换为GCode&#xff0c;并通过单向扫描实现对图像的激光雕刻。GCode是一种用于控制数控机床和…
最新文章