欢迎大家进群,一起探讨学习

微信公众号,每天给大家提供技术干货

博主技术笔记

博主网站地址1

博主网站地址2

博主开源微服架构前后端分离技术博客项目源码地址,欢迎各位star

vue实现标签云,让你的标签动起来

npm包地址 https://www.npmjs.com/package/bright-tag

项目介绍

Vue标签云UI组件

安装教程

  1. npm i bright-tag
  2. 在main.js中
import tagCloud from 'bright-tag'
Vue.use(tagCloud)

使用说明

props

  1. data

Object数组。name属性是显示的标签名,其他自行扩展。

  1. config

Object对象,配置项。有下面几个参数:

参数 默认值 说明
radius 120 滚动半径,Number,单位px
maxFont 24 最大字体大小
color null 字体颜色。为null时随机
rotateAngleXbase 600 X方向旋转速度基数,数越小速度越快
rotateAngleYbase 600 Y方向旋转速度基数,数越小速度越快

方法

方法名 参数 说明
clickTag tag 点击标签的方法。返回整个标签

调用用例

<!-- template -->
<tag-cloud :data="hotTag" @clickTag="clickTagItem"></tag-cloud>
// Vue实例
export default {data () {return {hotTag: [{"id":"05023f8da31c4b4187cc6899e2a3aec2","name":"镇远县"},{"id":"0ef028e5278f4f5ca31f99f1bd22b1cc","name":"剑河县"},{"id":"1a32ef04d3c548eaa6777abb46da32f2","name":"台江县"},{"id":"2c26488325bd493687d16315fe0e5fdd","name":"岑巩县"},{"id":"3a786111828a4b9f89ae9da25753eedd","name":"黎平"},{"id":"4ed593eed91b4244969995237f5c96c5","name":"丹寨县"},{"id":"615d2c178f1a47cb8d473823e74f5386","name":"凯里市"},{"id":"76f652df03db43349272a9aff492b065","name":"榕江县"},{"id":"8ff29d0d35e548feb945063b34ed9c9b","name":"黄平县"},{"id":"a8ac2170008746fdadc05ea461bc5e37","name":"雷山县"}]}},methods: {clickTagItem (tag) {// TODO}}
}

以下是源码解析

<template><div class="tag-wall"        <div class="tag-cloud" ref="wrapper"><pv-for="(item, index) in data":key="index"ref="tag"@click="clickTag(item)"@dblclick="dbclickTag(item)">{{ item.name }}</p></div></div>
</template><script>export default {data() {return {data: [{ id: "05023f8da31c4b4187cc6899e2a3aec2", name: "镇远县" },{ id: "0ef028e5278f4f5ca31f99f1bd22b1cc", name: "剑河县" },{ id: "1a32ef04d3c548eaa6777abb46da32f2", name: "台江县" },{ id: "2c26488325bd493687d16315fe0e5fdd", name: "岑巩县" },{ id: "3a786111828a4b9f89ae9da25753eedd", name: "黎平" },{ id: "4ed593eed91b4244969995237f5c96c5", name: "丹寨县" },{ id: "615d2c178f1a47cb8d473823e74f5386", name: "凯里市" },{ id: "76f652df03db43349272a9aff492b065", name: "榕江县" },{ id: "8ff29d0d35e548feb945063b34ed9c9b", name: "黄平县" },{ id: "a8ac2170008746fdadc05ea461bc5e37", name: "雷山县" },],option: {radius: 140, // 滚动半径,单位pxmaxFont: 24, // 最大字体大小color: null, // 字体颜色。为空时随机rotateAngleXbase: 600, // 默认旋转速度基数,数越小速度越快rotateAngleYbase: 600,},tagList: [],};},beforeDestroy() {if (this.timer) {clearInterval(this.timer);this.timer = null;}},watch: {data() {this.$nextTick(() => {this._initTags();});},},mounted() {this._initTags();},created() {this.listTag();if (this.config != null) {this.option = Object.assign({}, this.option, this.config);}},methods: {_initTags() {this.rotateAngleX = Math.PI / this.option.rotateAngleXbase;this.rotateAngleY = Math.PI / this.option.rotateAngleYbase;for (var i = 0, length = this.data.length; i < length; i++) {// 获取球面上均匀的点的经纬度 θ = arccos( ((2*num)-1)/all - 1); Φ = θ*sqrt(all * π);let angleX = Math.acos((2 * (i + 1) - 1) / length - 1);let angleY = angleX * Math.sqrt(length * Math.PI);// 根据经纬度获取点的坐标,球中心的点坐标是 (0,0,0) x=r*sinθ*cosΦ   y=r*sinθ*sinΦ   z=r*cosθ;const x = this.option.radius * Math.sin(angleX) * Math.cos(angleY);const y = this.option.radius * Math.sin(angleX) * Math.sin(angleY);const z = this.option.radius * Math.cos(angleX);if (this.option.color) {this.$refs.tag[i].style.color = this.option.color;} else {// 随机颜色this.$refs.tag[i].style.color ="rgb(" +Math.round(255 * Math.random()) +"," +Math.round(255 * Math.random()) +"," +Math.round(255 * Math.random()) +")";}// 每个标签对象都有四对值var tag = {x: x,y: y,z: z,ele: this.$refs.tag[i],};this.tagList.push(tag);}const _self = this;const datas = _self.tagList;this.timer = setInterval(function () {for (var i = 0; i < datas.length; i++) {_self.rotateX(datas[i]);_self.rotateY(datas[i]);_self.setPosition(datas[i],_self.option.radius,_self.option.maxFont);}}, 20);},setPosition(tag, r, maxFont) {// 设置每个标签的坐标位置和字体大小以及透明度if (this.$refs.wrapper) {tag.ele.style.transform ="translate(" +(tag.x +this.$refs.wrapper.offsetWidth / 2 -tag.ele.offsetWidth / 2) +"px," +(tag.y +this.$refs.wrapper.offsetHeight / 2 -tag.ele.offsetHeight / 2) +"px)";tag.ele.style.opacity = tag.z / r / 2 + 0.7;tag.ele.style.fontSize = (tag.z / r / 2 + 0.5) * maxFont + "px";}},rotateX(tag) {var cos = Math.cos(this.rotateAngleX);var sin = Math.sin(this.rotateAngleX);var y1 = tag.y * cos - tag.z * sin;var z1 = tag.y * sin + tag.z * cos;tag.y = y1;tag.z = z1;},rotateY(tag) {var cos = Math.cos(this.rotateAngleY);var sin = Math.sin(this.rotateAngleY);var x1 = tag.z * sin + tag.x * cos;var z1 = tag.z * cos - tag.x * sin;tag.x = x1;tag.z = z1;},dbclickTag() {if (this.timer) {clearInterval(this.timer);this.timer = null;} else {const _self = this;this.timer = setInterval(function () {for (var i = 0; i < _self.tagList.length; i++) {_self.rotateX(_self.tagList[i]);_self.rotateY(_self.tagList[i]);_self.setPosition(_self.tagList[i],_self.option.radius,_self.option.maxFont);}}, 20);}},clickTag(item) {this.$emit("clickTag", item);},},
};
</script><style scoped>
.tag-cloud {width: 300px;height: 300px;position: relative;color: #333;margin: 0 auto;text-align: center;
}.tag-cloud p {position: absolute;top: 0px;left: 0px;color: #333;font-family: Arial;text-decoration: none;margin: 0 10px 15px 0;line-height: 18px;text-align: center;font-size: 16px;padding: 4px 9px;display: inline-block;border-radius: 3px;
}
.tag-cloud p:hover {cursor: pointer;
}
</style>

各位老板关注下

vue实现标签云,让你的标签动起来相关推荐

  1. java 标签云_javascript实现动态标签云

    今天上学校的图书馆,看到了一个好玩的东西,特意百度了下,发现叫做"标签球",效果图为: 直接代码如下: CSS: #div1 {position:relative; width:3 ...

  2. 建站分享:调整WordPress自带标签云参数

    ▣ 博主主站地址:微笑涛声 [www.cztcms.cn] ▣ 博主其他平台: CSDN 简书 开源中国 思否 华为云博客 WordPress 自带的标签云是一个很实用的小工具.站长可以通过标签对具有 ...

  3. 重组标签云-标签聚类及其评价研究

    重组标签云-标签聚类及其评价研究 AlbertoPérez García-Plaza a*, Arkaitz Zubiaga b, Víctor Fresnoa,Raquel Martínez a a ...

  4. php tagcloud,WordPress函数:wp_tag_cloud(标签云)详解和举例

    wp_tag_cloud() 函数的作用是用来标签云的,可以根据每个标签所关联的文章次数来定义字体大小.标签排序等属性.从 2.8 版本开始,添加了 分类法(taxonomy)参数,这就意味着,除了 ...

  5. (翻译)标签云(Tag Cloud)

    问题概述   用户想以可视化的方式来浏览不同人气的内容[1]. 示例 用途 用于当网站用户可以自行添加内容和标签时: 用于当网站中的标签数量超过10~20个时,标签具有的权值与其被引用的次数相关[2] ...

  6. 3D标签云的简单实现

    3D标签云的实现 最近在做一些小Demo,看到了3D标签云觉得很酷炫,就学着做了一下.虽然看起来有点难,但是分解了看其实还是很普通的js运动的实现. 效果预览https://chestnut647.g ...

  7. wordpress主题怎样在标签云效果中显示每个标签的文章数?

    tag标签是wordpress程序所独特的一个模块,在国产的CMS程序(如:织梦)就很难见到它的踪迹.而标签以标签云来展示更是wordpress主题开发的一个常态.变化多样的标签云展示,给wordpr ...

  8. MFC OpenGL标签云 (转)

    初识标签云是在去年年末,一看到这个应用我就特别感兴趣.还记得08年在北京做Mobile应用的时候就在想,是不是可以通过某种方式做界面扩展,让相对狭小的手机屏幕只显示有效部分,而扩展部分可以在屏幕以外, ...

  9. vue实现标签云效果

    闲扯两句 最近想给自己的博客上加上一个3D标签云的效果,用来表示自己博客文章的分组,网上找到了canvas实现的,还有a元素实现的解析3D标签云,我想让标签可以选择和点击,又不想在标签数量较多时操作a ...

最新文章

  1. Codeforces Round #699 (Div. 2) E.Sorting Books(贪心+DP / 线段树)超高质量题解,看不懂来打我 ~
  2. c语言如何发现错误在哪里,二个C语言例子,编译没通过.不知道错在哪里[求助]
  3. Sublime Text3 配置设置攻略
  4. (原創) 我有牙周病了 (日記)
  5. ajax 微信code获取_获取链接的参数,判断是否是微信打开,ajax获取数据
  6. 云计算时代 战争的焦点在哪里
  7. linux NFS 配置步骤
  8. 推荐几本学习MySQL的好书
  9. 超全必看!开源时间序列数据集整理
  10. word2010设置护眼背景
  11. 对于CRM之于现代化企业的影响以及作用的分析
  12. nw.js文件上传到服务器,用nw.js构建node项目
  13. oracle 查看用户日志,Oracle查看用户操作sql语句以及数据库日志
  14. 模型通道剪枝汇总(channel pruning)
  15. 详解HBase架构原理
  16. 【C语言】字符画实现游戏掘地求升
  17. 知道挖掘搜索引擎关键字的步骤吗?
  18. 医用耗材管理系统的模式的应用实践-盘谷
  19. 持久层框架Mybatis Plus的ResultMap标签里的association标签的用法
  20. Python的 Parser使用方法

热门文章

  1. php广告管理,DedeCMS的广告管理功能
  2. 民法典假房产证过户有效吗
  3. 基于visual c++之windows核心编程代码分析(47)实现交换网络的QQ号嗅探
  4. 基于Java毕业设计校园外卖系统Web端源码+系统+mysql+lw文档+部署软件
  5. ironpython 使用-IronPython
  6. CESIUM学习—— viewer.trackedEntity小坑坑
  7. 枕上诗书-初入红尘,不知人间疾苦,
  8. Android studio关闭启动默认打开上次项目
  9. CPU卡COS系统文件结构详解
  10. 普元BPS启动报错BPS Process Server startup failed,because of the UpGradeManager program