当前位置:首页 > VUE

vue实现文字云

2026-01-19 05:52:07VUE

Vue 实现文字云

安装依赖

需要安装 wordcloudecharts-wordcloud 插件,推荐使用 echarts-wordcloud,因为它基于 ECharts,功能更强大且易于集成。

npm install echarts echarts-wordcloud

基础实现

在 Vue 组件中引入 ECharts 和 WordCloud 扩展,创建一个文字云图表。

<template>
  <div ref="wordcloudChart" style="width: 600px; height: 400px;"></div>
</template>

<script>
import * as echarts from 'echarts';
import 'echarts-wordcloud';

export default {
  mounted() {
    this.initWordCloud();
  },
  methods: {
    initWordCloud() {
      const chart = echarts.init(this.$refs.wordcloudChart);
      const option = {
        series: [{
          type: 'wordCloud',
          shape: 'circle',
          left: 'center',
          top: 'center',
          width: '80%',
          height: '80%',
          right: null,
          bottom: null,
          sizeRange: [12, 60],
          rotationRange: [-45, 45],
          rotationStep: 15,
          gridSize: 8,
          drawOutOfBound: false,
          textStyle: {
            fontFamily: 'sans-serif',
            fontWeight: 'bold',
            color: function () {
              return 'rgb(' + [
                Math.round(Math.random() * 160 + 95),
                Math.round(Math.random() * 160 + 95),
                Math.round(Math.random() * 160 + 95)
              ].join(',') + ')';
            }
          },
          data: [
            { value: 90, name: 'Vue' },
            { value: 80, name: 'React' },
            { value: 70, name: 'JavaScript' },
            { value: 60, name: 'TypeScript' },
            { value: 50, name: 'HTML' },
            { value: 40, name: 'CSS' },
            { value: 30, name: 'Node.js' },
            { value: 20, name: 'Webpack' }
          ]
        }]
      };
      chart.setOption(option);
      window.addEventListener('resize', chart.resize);
    }
  }
};
</script>

动态数据绑定

可以通过 props 或 API 请求动态加载数据。

<script>
export default {
  props: {
    wordData: {
      type: Array,
      default: () => []
    }
  },
  watch: {
    wordData: {
      handler(newVal) {
        if (newVal.length) {
          this.updateWordCloud(newVal);
        }
      },
      immediate: true
    }
  },
  methods: {
    updateWordCloud(data) {
      const chart = echarts.init(this.$refs.wordcloudChart);
      chart.setOption({
        series: [{
          type: 'wordCloud',
          data: data
        }]
      });
    }
  }
};
</script>

自定义样式与交互

可以调整文字云的形状、颜色和添加点击事件。

<script>
methods: {
  initWordCloud() {
    const chart = echarts.init(this.$refs.wordcloudChart);
    chart.on('click', (params) => {
      console.log('点击了:', params.name);
    });
    chart.setOption({
      series: [{
        type: 'wordCloud',
        shape: 'diamond',
        textStyle: {
          color: function (params) {
            const colors = ['#c23531', '#2f4554', '#61a0a8', '#d48265'];
            return colors[params.dataIndex % colors.length];
          }
        }
      }]
    });
  }
}
</script>

响应式调整

在窗口大小变化时重新渲染文字云。

vue实现文字云

<script>
mounted() {
  this.initWordCloud();
  window.addEventListener('resize', this.handleResize);
},
beforeDestroy() {
  window.removeEventListener('resize', this.handleResize);
},
methods: {
  handleResize() {
    if (this.$refs.wordcloudChart) {
      echarts.init(this.$refs.wordcloudChart).resize();
    }
  }
}
</script>

注意事项

  • 数据格式要求为 { name: string, value: number } 的数组,value 决定文字大小。
  • 文字云性能受数据量影响,建议限制数据条目(如 50-100 条)。
  • 在 SSR(如 Nuxt.js)中使用时需动态导入 ECharts,避免服务端渲染报错。

标签: 文字vue
分享给朋友:

相关文章

vue tag实现

vue tag实现

Vue 标签实现方法 在 Vue 中实现标签功能可以通过多种方式完成,常见场景包括动态标签生成、标签输入框、标签管理等。以下是几种典型实现方案: 动态标签列表渲染 使用 v-for 指令渲染标签数组…

vue 全景实现

vue 全景实现

Vue 全景实现方案 在Vue中实现全景效果,通常需要结合WebGL或第三方库来处理3D场景渲染。以下是几种常见方法: 使用Three.js库 Three.js是一个强大的WebGL库,适合创建3D…

vue实现api

vue实现api

Vue 实现 API 调用 在 Vue 中调用 API 通常涉及使用 axios 或 fetch 发送 HTTP 请求,并结合 Vue 的响应式特性管理数据。以下是常见的实现方式: 安装 axios…

vue watch实现

vue watch实现

在 Vue 中实现 watch 监听数据变化 Vue 的 watch 选项用于监听数据变化并执行相应的回调函数。以下是几种常见的实现方式: 基础用法 export default { data(…

vue实现打印

vue实现打印

使用Vue实现打印功能 在Vue项目中实现打印功能可以通过多种方式完成,以下是几种常见的方法: 方法一:使用window.print() 这种方法适用于打印整个页面或特定区域的内容。 // 在Vu…

vue日历实现

vue日历实现

实现基础日历布局 使用Vue的模板语法构建日历的基本HTML结构。一个典型的日历包含星期标题和日期格子,可以通过v-for循环生成。月份切换功能通过计算属性动态更新日期数组。 <templat…