[前端] 1、分享一个基于博客园的标签云制作方法

简介:


 

 

今天无聊浏览网页,发现标签云挺炫的,于是就尝试给自己的博客弄一个。下面是制作方法,大家看完后可以弄一个属于自己的Tag-Cloud。

 

1、什么是标签云:

维基百科上定义是:

A tag cloud (word cloud, or weighted list in visual design) is a visual representation of text data, typically used to depict keyword metadata (tags) on websites, or to visualize free form text.Tags are usually single words, and the importance of each tag is shown with font size or color. 译:标签云(在可视化设计领域又叫词云或权重列表)是一种文本数据可视化的代表,经常用在网站上来描述关键词或使自由形式文本可视化。通常使用字体的大小和颜色表示权重。

下面是我在Google上搜索了几种略带艺术感的标签云:

 

 

2、选取标签源

进入正题:通常标签云会选择tags作为标签源,由于我主页没有开放标签list,因此这里选取《随笔分类》作为标签源。

下图为查看随笔分类的源码结构:

 

 


附属说明:由于我们不是在自己写的网站上实现标签云,所以会存在一定的限制,不过博客园开放了自己定制页面和插入JS代码使我们定制自己的标签云成为可能。如果你对没尝试过美化页面、添加JS代码,我建议你看看:http://www.cnblogs.com/asxinyu/p/Bolg_Category_For_BlogBeauty.html,然后再来定制自己的标签云。


 

 

3、用JS解析标签源

通过分析页面中随笔分类的HTML结构发现:用于构建标签云的信息在div类名为catListPostCategory下的ul中,主页结构可以抽象成下面的代码形式:

复制代码
 1 <!DOCTYPE html">
 2 <html>
 3     <head>
 4         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 5     </head>
 6 
 7     <body>
 8         <div class="catListPostCategory">
 9             <h3 class="catListTitle">
10                 随笔分类
11                 <span style="font-size:11px;font-weight:normal">(407)</span>
12             </h3>
13             <ul>
14                 <li><a id="CatList_LinkList_0_Link_0" href="http://www.cnblogs.com/zjutlitao/category/640062.html">笔记_读书(3)</a> </li>
15                 <li><a id="CatList_LinkList_0_Link_1" href="http://www.cnblogs.com/zjutlitao/category/697496.html">笔记_浅学IT(1)</a> </li>
16                 <li><a id="CatList_LinkList_0_Link_2" href="http://www.cnblogs.com/zjutlitao/category/557591.html">笔记_异常解决(17)</a> </li>
17                 <li><a id="CatList_LinkList_0_Link_3" href="http://www.cnblogs.com/zjutlitao/category/775930.html">笔记_转载</a> </li>
18                 <li><a id="CatList_LinkList_0_Link_4" href="http://www.cnblogs.com/zjutlitao/category/759821.html">核心_编译原理(1)</a> </li>
19                 <li><a id="CatList_LinkList_0_Link_5" href="http://www.cnblogs.com/zjutlitao/category/608496.html">核心_操作系统(9)</a> </li>
20                 <li><a id="CatList_LinkList_0_Link_6" href="http://www.cnblogs.com/zjutlitao/category/759824.html">核心_通信协议</a> </li>
21                 ...
22             </ul>
23         </div>
24     </body>
25 </html>
复制代码

 

用JS从上面结构中解析出所有<a>标签的内容只需用下面三招:


第一招:var oDiv=document.getElementsByClassName('catListPostCategory');函数获取类名为catListPostCategory的HTML数组,因为本页面只有一个名为catListPostCategory的div,因此:

                  图 调用函数①后oDiv的值

 

第二招:var aA=oDiv[0].getElementsByTagName('a');函数②获取oDiv[0]文档内所有<a>标签的内容,因此:

                    图 调用函数②后aA的值

 

第三招:遍历aA数组

for(i=0;i<aA.length;i++)
{
  ...=aA[i]...;
}

 

 

4、合成标签云

下面代码是合成标签云的核心部分:


第12~22行(黄色):由于直接用aA则主页侧栏的随笔分类里的<a>标签会移位来形成标签云,从而使随笔分类栏坏掉,因此这里用aB做了一份aA的拷贝

第33~39行(橙色):将aB放入一个fragment中,然后将该fragment放入一个div标签中

第42行之后:初始化标签云div中各<a>标签的初始位置,来呈现一个颇具艺术感的标签云 

复制代码
 1 function positionAll()
 2 {
 3     var phi=0;
 4     var theta=0;
 5     var max=mcList.length;
 6     var i=0;
 7     
 8     var aTmp=[];
 9     var oFragment=document.createDocumentFragment();
10     
11     
12     //获取全部元素,并创建一份拷贝(否则就会把原来的结构给打乱)
13     for(i=0;i<aA.length;i++)
14     {
15         aB[i] = document.createElement("a");
16         aB[i].textContent = aA[i].textContent;
17         aB[i].href = aA[i].href;
18         aB[i].style.color="red";//myColor[i%7];
19                 
20                 
21         aTmp.push(aB[i]);
22     }
23     
24     //对元素进行随机排序
25     aTmp.sort
26     (
27         function ()
28         {
29             return Math.random()<0.5?1:-1;
30         }
31     );
32     
33     //将新拷贝的一份内容插入到XML文档中
34     for(i=0;i<aTmp.length;i++)
35     {
36         oFragment.appendChild(aTmp[i]);
37     }
38     
39     oCloudDiv.appendChild(oFragment);
40     
41     
42     //初始化新拷贝标签的初始位置
43     for( var i=1; i<max+1; i++){
44         if( distr )
45         {
46             phi = Math.acos(-1+(2*i-1)/max);
47             theta = Math.sqrt(max*Math.PI)*phi;
48         }
49         else
50         {
51             phi = Math.random()*(Math.PI);
52             theta = Math.random()*(2*Math.PI);
53         }
54         //
55         mcList[i-1].cx = radius * Math.cos(theta)*Math.sin(phi);
56         mcList[i-1].cy = radius * Math.sin(theta)*Math.sin(phi);
57         mcList[i-1].cz = radius * Math.cos(phi);
58         
59         aB[i-1].style.left=mcList[i-1].cx+oCloudDiv.offsetWidth/2-mcList[i-1].offsetWidth/2+'px';
60         aB[i-1].style.top=mcList[i-1].cy+oCloudDiv.offsetHeight/2-mcList[i-1].offsetHeight/2+'px';
61     }
62 }
复制代码

 

 

5、注入HTML

第4节写到新建fragment会插入到标签云div标签中,因此我们只要在想要显示标签云的地方插入:

<div id="cloudListTitle">
</div>

JS会将生成的标签云内容fragment插入此div中,比如:

 

同样的,左上角的效果也就是利用博客园主页定制功能:https://i.cnblogs.com/Configure.aspx在[博客侧边栏公告(支持HTML代码)(支持JS代码)]插入了上述div:

 

 

6、For小白

如果是小白你可以尝试将下面两句:

<!--云标签-->
<script type="text/javascript" src="http://files.cnblogs.com/files/zjutlitao/tao_cloud.js" charset="utf-8"></script>
<div id="cloudListTitle">
    </div>

加到https://i.cnblogs.com/Configure.aspx 页面的下面三个地方中的一个:



本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/5734876.html,如需转载请自行联系原作者

 

相关文章
|
24天前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
23天前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
36 5
|
26天前
|
监控 前端开发 jenkins
Jenkins 在前端项目持续部署中的应用,包括其原理、流程以及具体的实现方法
本文深入探讨了Jenkins在前端项目持续部署中的应用,涵盖其基本原理、流程及具体实现方法。首先介绍了Jenkins的基本概念及其在自动化任务中的作用,随后详细解析了从前端代码提交到生产环境部署的全过程,包括构建、测试、部署等关键步骤。最后,强调了持续部署中的代码质量控制、环境一致性、监控预警及安全管理等注意事项,旨在帮助开发者高效、安全地实施持续部署。
53 5
|
2月前
|
存储 前端开发 JavaScript
前端的全栈之路Meteor篇(四):RPC方法注册及调用-更轻量的服务接口提供方式
RPC机制通过前后端的`callAsync`方法实现了高效的数据交互。后端通过`Meteor.methods()`注册方法,支持异步操作;前端使用`callAsync`调用后端方法,代码更简洁、易读。本文详细介绍了Methods注册机制、异步支持及最佳实践。
|
3月前
|
前端开发 JavaScript
前端基础(九)_this基本使用、this指向判断、改变this指向的方法
本文介绍了JavaScript中this的基本使用、this指向的判断以及改变this指向的方法。
49 1
前端基础(九)_this基本使用、this指向判断、改变this指向的方法
|
3月前
|
前端开发
前端基础(十四)_隐藏元素的方法
本文介绍了几种在前端开发中隐藏元素的方法,包括使用`display:none`、`visibility:hidden`、`opacity:0`等CSS属性,并提供了相应的示例代码。此外,还提到了其他隐藏元素的技巧,如通过设置元素位置、使用`overflow`属性和`filter`属性以及`rgba`颜色值来实现元素的隐藏。
69 1
前端基础(十四)_隐藏元素的方法
|
2月前
|
前端开发 JavaScript
掌握微前端架构:构建现代Web应用的新方法
本文介绍了微前端架构的概念及其在现代Web应用开发中的优势与实施方法。微前端架构通过将应用拆分成独立模块,提升了开发效率和灵活性。其核心优势包括技术栈灵活性、独立部署、团队协作及易于维护。文章详细阐述了定义边界、选择框架、管理状态和通信等关键步骤,并讨论了状态同步、样式隔离及安全性等挑战。微前端架构有望成为未来Web开发的重要趋势。
|
2月前
|
JavaScript 前端开发 应用服务中间件
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
vue前端开发中,通过vue.config.js配置和nginx配置,实现多个入口文件的实现方法
176 0
|
2月前
|
存储 前端开发 API
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
前端开发中,Web Storage的存储数据的方法localstorage和sessionStorage的使用及区别
108 0
|
3月前
|
前端开发
前端基础(十一)_Float浮动、清除浮动的几种方法
本文介绍了浮动的概念、属性、特性以及清除浮动的几种方法,并通过实例演示了如何使用CSS实现元素的浮动和处理浮动带来的问题。
92 3