somboy 2019-12-06
index.js
index.js是入口文件,它将用户配置和默认配置合并然后将它放到window对象下,根据用户所选主题加载主题入口文件theme.js
theme.js
使用window对象下的用户配置对象,构建主题
theme.css
主题样式文件
所有主题都放在 theme 文件夹下,至少包含一个 js 文件和 一个 css 文件, 下面以已存在的主题 acg 为例
const userMassage = { // 储存用户基本信息 // 通过DOM获取 }; const urls = { // 储存该主题依赖的文件(js css)名称 按需加载 // 仓库地址 ... // 为了访问更快这个主题的依赖都放在了 gitee }; const icons = { // 储存iconfont图标名称 // symbol引用 }; const headerElements = { // 储存博客header DOM元素 // 因为我需要给他们批量添加事件 包含移动端和 pc 端的事件 }; class ACG{ constructor() { this.defaultOptions = window.userOptions; // 拿到window下的用户配置 this.v = 'v1.0.0'; // version } // ------- 初始化 ---- init() { // 调用loadFiles加载必须依赖如iconfont文件 // 根据客户端和当前页面名称调用对应方法构建页面 } // ---------- tools -------- get pageName() { // 储存函数 返回当前页面名称 // 包含主页 随笔页 标签页 ... // 在 init 函数中判断,当进入这些页面时执行对应的方法 } get userAgent() { // 储存函数 返回当前用户的客户端 // 包含 PC 手机 ... // 在 init 函数中判断并执行对应的方法 } loadFiles() { // 加载依赖文件 } iconInSvg(icon) { // 根据传入的 icons.xxx 返回对应的 <svg> } // Other instrumental functions. // ------构建博客的函数------- setHeader() { // do something for setting header. } // Other functions that build blog. } // 实例化类并调用初始化方法 new ACG().init();
使用css自定义属性即可很方便做到,js 根据用户配置的颜色值插入样式
:root { --themeColor: color ; /* Other custom properties */ } /* 其他 css 通过 var(--themeColor) 来使用它 */
symbol
引用支持多色图标,可通过 css 代码代码改变样式,较灵活,缺点是仅支持 ie9+
<svg class="icon" aria-hidden="true"> <use xlink:href="#icon-xxx"></use> </svg>
iframe
acg
或 light
请将博客默认皮肤设为 Buildtowin
<script src="https://guangzan.gitee.io/awescnb-files/js/flexible.min.js"></script> <script src="https://github923665892.github.io/awesCnb-G/index.js"></script> <script>$.awesCnb({ // 主题 theme: { name: 'acg', // 'acg' (默认) | 'light' | 待添加 color: '#FFB3CC' // #FFB3CC (默认) | random }, // 代码高亮 highLight: { type: 'atomOneDark' // 'atomOneDark' (默认) | 'atomOneLight' | 'github' }, // 代码行号 lineNumbers: { enable: true // true (默认) | false }, // 文章目录 catalog: { enable: true // true (默认) | false }, // 音乐播放器 musicPlayer: { enable: true, // true (默认) | false type: 'APlayer' // 'APlayer' (默认) | 'iframe' }, // 底部友情链接 links: [ { name: 'theme awesCnb', link: 'https://github.com/github923665892/awesCnb-G' } ] }); </script>
<section id='loading'> <div class="sk-fold"> <div class="sk-fold-cube"></div> <div class="sk-fold-cube"></div> <div class="sk-fold-cube"></div> <div class="sk-fold-cube"></div> </div> </section>
theme
文件夹下新建主题文件夹如 demo
demo.js
demo.css
, 注意js文件名称与文件夹名称一致本来想让入口文件index.js也加载对应主题的css文件,这样修改代码和使用主题就方便很多,渲染过程用loading覆盖,但是发现那样放在页首的html并不是最先显示的或者其他原因,每次进博客的时候会闪一下,如果有大佬能告诉我,万分感谢!