Echarts图表——词云

实现目标图表

1、依赖插件

基础图表: npm install echarts
词云插件: npm install echarts-wordcloud
文本复制插件: npm install clipboard

2、实现功能及踩的坑

  • 数据以词云方式展示,限制展示10个字符以内,其余显示省略号
  • 鼠标点击某个词显示tooltip悬浮框,点击复制全称名称
  • 绑定按钮不生效,需要添加pointer-events: auto属性
  • 按钮点击事件放在methods不生效,需绑定到window下,考虑到项目基于vue做的,采用了watch监听的方式实现

3、功能实现

  • 基本配置
    methods中
// 数据处理
dataListCloud.map(item => {
  item.formatterName = item.name
  if (item.name && item.name.length > 10) {
     item.name = item.name.substring(0, 10) + '...'
  }
})
// 基本配置
tooltip: {
  enterable: true,
  triggerOn: 'click',
  trigger: 'item',
  confine: true,
  position: 'top',
  formatter: (item) => {
    // 点击元素后改变hookToolTip值触发watch中监听
    setTimeout(() => {
      this.hookToolTip = item.data.formatterName
    },500)
    // 样式属性解决事件不生效
    // class btn绑定复制事件所用,方便clipboard在mounted中监听所用
    // data-clipboard-text是clipboard复制的文本设置
    // id btn-tooltip 添加点击监听事件
    return `<div style="pointer-events:auto;cursor:pointer" class="btn" data-clipboard-text=${item.data.formatterName}  id="btn-tooltip">${item.data.formatterName}: ${item.value}</div>`
  }
}
  • 实现方法一
import Clipboard from "clipboard";
  mounted() {
    const clipboard = new Clipboard('.btn');
    clipboard.on('success', (e) => {
      this.$message({
        showClose: true,
        message: '复制成功',
        type: 'success'
      });
      e.clearSelection();
    });
    clipboard.on('error', (e) => {
      this.$message.error('复制失败');
    });
  }
  • 此方法不需要用到watch监听事件,缺点是假如有多个复制事件,就得写多个.on和.error的事件监听,于是就考虑将其封装
  • 封装后在mounted只能监听一次复制,如果要封装只能配合watch方法使用
  • 实现方法二
import handleClipboard from '@/utils/clipboard'
watch: {
  hookToolTip: function (name) {
    this.$nextTick(() => {
      const html_ = document.querySelector("#btn-tooltip")
      html_ && html_.addEventListener('click', (e) => {
        // 封装的方法
        handleClipboard('.btn')
      })
    })
  }
},
  • clipboard方法封装
// clipboard.js
import Vue from "vue";
import Clipboard from "clipboard";

function clipboardSuccess(text) {
  Vue.prototype.$message({
    message: `${text}    复制成功`,
    type: "success",
    duration: 1500,
  });
}

function clipboardError() {
  Vue.prototype.$message({
    message: "复制失败",
    type: "error",
  });
}

export default function handleClipboard(className) {
  var clipboard = new Clipboard(className);
  clipboard.on("success", (e) => {
    clipboardSuccess(e.text);
    clipboard.off("error");
    clipboard.off("success");
    clipboard.destroy();
  });
  clipboard.on("error", () => {
    clipboardError();
    clipboard.off("error");
    clipboard.off("success");
    clipboard.destroy();
  });
}

此方法需配合属性变化监听实现,相对麻烦些,适用的场景多一些

  • 两种方式皆可实现功能,根据自己的需求选择一种即可

词云样式配置参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 1. 图表(echarts)--数据可视化 与传统形式中用表格或文档展现数据的方式相比,可视化能将数据以更加直观的...
    GALAXY_ZMY阅读 1,693评论 0 5
  • 一、了解Echarts ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC...
    王芃皓阅读 1,233评论 2 13
  • 由于在项目中需要对数据进行可视化处理,也就是用图表展示,众所周知echarts是非常强大的插件。一开始想在网上找一...
    小怪兽出没_86e0阅读 994评论 0 2
  • 在后台管理系统中,图表是一个很普遍的元素。目前常用的图标插件有 charts, Echarts, highcha...
    恬雅过客阅读 1,631评论 0 16
  • 前言 这里筑梦师,是一名正在努力学习的iOS开发工程师,目前致力于全栈方向的学习,希望可以和大家一起交流技术,共同...
    筑梦师Winston阅读 25,936评论 80 514