美文网首页大前端
hexo-tag-cloud标签云使用与优化

hexo-tag-cloud标签云使用与优化

作者: 天問_专注于大前端技术 | 来源:发表于2021-10-22 13:39 被阅读0次

Hexo默认主题landscape自带的tagcloud标签云不是太美观,于是在npm网站上搜索了一下,最终决定使用 hexo-tag-cloud 插件,使用了Canvas渲染,有3D效果,整体效果还是不错的。

Hexo-标签云

安装插件

npm i -S hexo-tag-cloud

使用

Hexo默认使用的是ejs模板引擎,这里就以 ejs 为例。

  1. 找到 tagcloud.ejs 文件,完整路径如下:

     hexo/themes/landscape/layout/_widget/tagcloud.ejs
    

修改为以下内容:

<% if (site.tags.length) { %>
  <script type="text/javascript" charset="utf-8" src="<%- url_for('/js/tagcloud.js') %>"></script>
  <script type="text/javascript" charset="utf-8" src="<%- url_for('/js/tagcanvas.js') %>"></script>
  <div class="widget-wrap">
    <h3 class="widget-title"><%= __('tagcloud') %></h3>
    <div id="myCanvasContainer" class="widget tagcloud">
      <canvas width="300" height="300" id="resCanvas" style="width:100%;height:100%;">
        <%- tagcloud() %>
      </canvas>
    </div>
  </div>
<% } %>
  1. hexo/themes/landscape/source/js 目录下新建 tagcloud.jstagcanvas.js 文件,内容可以打开如下链接进行复制:

  2. 整体展现如下图所示,具体交互效果可以浏览 本站 的标签云。

天問-TagCloud

优化

原插件中Canvas设置的是固定宽高,虽然设置了 style="width:100%;",当屏幕宽度改变,Canvas大小看似也跟着改变了,但实际上内部widthheight的值依然没有变化,这就导致展示的Canvas会被放大或缩小变糊,影响整体美观。所以在此基础上做了一点点优化。

  • tagcloud.js 逻辑优化
// tagcloud.js
// 优化代码 4 start
document.addEventListener('DOMContentLoaded', loadTagCloud)
// 优化代码 4 end

// 优化代码 3 start
// 防抖函数
function debounce(fn, delay){
  var timer = null;
  return function(){
    var context = this, args = arguments;
    clearTimeout(timer);
    timer = setTimeout(function(){
      fn.apply(context, args);
    }, delay);
  };
};
// 优化代码 3 end

function loadTagCloud() {
  // console.log('tag cloud plugin rock and roll!');

  try {
    // 优化代码 1 start
    var $box = $('#resCanvas');
    $box.get(0).width = $box.width();
    $box.get(0).height = $box.width();
    // 优化代码 1 end
    
    // 配置参数 5 start
    TagCanvas.textFont = 'Helvetica';
    TagCanvas.textColour = '#409EFF';
    TagCanvas.textHeight = 16;
    TagCanvas.outlineColour = '#E6A23C';
    TagCanvas.maxSpeed = 0.05;
    TagCanvas.freezeActive = true;
    TagCanvas.outlineMethod = 'block';
    TagCanvas.minBrightness = 0.2;
    TagCanvas.depth = 0.92;
    TagCanvas.pulsateTo = 0.6;
    TagCanvas.initial = [0.1,-0.1];
    TagCanvas.decel = 0.5;
    TagCanvas.reverse = true;
    TagCanvas.hideTags = false;
    TagCanvas.shadow = '#fff';
    TagCanvas.shadowBlur = 3;
    TagCanvas.weight = false;
    TagCanvas.imageScale = null;
    TagCanvas.fadeIn = 500;
    TagCanvas.clickToFront = 600;
    TagCanvas.lock = false;
    // 配置参数 5 end

    TagCanvas.Start('resCanvas');
    TagCanvas.tc['resCanvas'].Wheel(true)

    // 优化代码 2 start
    $(window).resize(debounce(function() {
      $box.get(0).width = $box.width();
      $box.get(0).height = $box.width();
      TagCanvas.Start('resCanvas');
      TagCanvas.tc['resCanvas'].Wheel(true);
    }, 500));
    // 优化代码 2 end

  } catch(e) {
    // console.log(e);
    document.getElementById('myCanvasContainer').style.display = 'none';
  }
};

优化点

  1. Canvas的widthheight根据外层容器的宽度来设置。code:优化代码 1
  2. 使用resize监听window屏幕的大小变化,动态设置Canvas宽高,重新渲染Canvas画布。code:优化代码 2
  3. 使用debounce防抖函数,控制重新渲染Canvas的次数,提高整体性能。code:优化代码 3
  4. 使用documentDOMContentLoaded事件替换原来的window.onload事件,这样不用等待图片加载完毕再渲染Canvas,可以大大提升tagCloud的展示速度。code:优化代码 4

优化后的js文件:

温馨提示: 可以根据自己的主题来设置标签云中动画时间、文字大小、颜色、点击颜色、点击效果等等,具体参数如上所示code:配置参数 5

参考文档:


欢迎访问:个人博客地址

相关文章

  • hexo-tag-cloud标签云使用与优化

    Hexo默认主题landscape自带的tagcloud标签云不是太美观,于是在npm网站上搜索了一下,最终决定使...

  • View优化(二)

    接着上面的View优化的建议与方式2.2.推荐使用标签或控件:2.2.1.使用 标签: 使用 标签加载布局, ...

  • 安卓性能优化

    Android的性能优化方法 1. 布局优化 使用 标签、标签、 控件 复杂布局...

  • 优化方法

    用户体验优化 图片占位 性能优化 减少标签嵌套 减少dom操作 编写动画使用js内置的函数 使用cdn 使用图片压...

  • Android性能优化

    一、布局优化 标签 标签,一般和 标签同时使用,降低层级结构 标签页面初始加载减...

  • Android中SparseArray<E>优化集合

    标签: Android 性能优化 SparseArray SparseArray使用Integer作为key来映射...

  • Android-性能优化

    应用体验-布局优化 使用include布局、merge标签、ViewStub视图可以使用HierarchyView...

  • 前端代码优化

    HTML文档的优化 1.标签的使用:该标签是用户与搜索引擎最看重的标签,它能帮助用户和搜索引擎判断当前页面的主旨和...

  • Android app优化

    一、xml文件布局优化1.使用include 标签抽取多个布局文件共用的代码块,在需要的位置使用include标签...

  • Android面试宝典 - 优化篇

    一、性能优化 1. 布局优化 尽量使用include,merge,ViewStub标签避免冗余嵌套以及过于复杂的布...

网友评论

    本文标题:hexo-tag-cloud标签云使用与优化

    本文链接:https://www.haomeiwen.com/subject/uugcaltx.html