2020年9月

weblog.png

WeBlog

996.icu

typecho博客的小程序版,支持微信小程序,QQ小程序

特性

音频播放

支持Aplayer插件播放audio/音乐

2020-02-21T03:36:30.png

跨平台编译

基于uni-app开发,支持多端编译。包括但不限于,APP,微信小程序,快应用,QQ小程序,支付宝小程序,H5移动端

微信小程序QQ小程序
微信小程序二维码QQ小程序二维码

一键换肤

采用互补色彩设计原则,支持一键修改主题色。修改文件中的RGB值,即可一键换肤。下面提供一些颜色供以参考。

知乎蓝

首页文章页关于页
2020-02-21T02:35:52.png2020-02-21T02:36:10.png2020-02-21T02:36:31.png

思否绿

首页文章页关于页
2020-02-21T02:42:26.png2020-02-21T02:42:41.png2020-02-21T02:42:52.png

CSDN红

首页文章页关于页
2020-02-21T02:44:27.png2020-02-21T02:44:41.png2020-02-21T02:44:53.png

掘金蓝

首页文章页关于页
2020-02-21T02:46:51.png2020-02-21T02:47:06.png2020-02-21T02:47:16.png

简书红

首页文章页关于页
2020-02-21T02:48:58.png2020-02-21T02:49:07.png2020-02-21T02:49:17.png

GitHub灰

首页文章页关于页
2020-02-21T02:50:57.png2020-02-21T02:51:07.png2020-02-21T02:51:16.png

开发框架

本项目采用uni-app+colorUI开发

快速开始

小程序端

自行编译

适用于有前端基础的同学

  1. 下载Hbuilderx
  2. 将文件夹 uni-app 导入项目
  3. 发行至微信小程序

不编译直接使用

适用于零基础或基础较差的同学

  1. 打开uni-app/unpackage/dist/build/mp-weixin目录导入小程序开发者工具
  2. 激活插件后,修改请求链接文件 @/static/utils/api.js 中的baseUrl, 将域名更换为你的域名。 请修改文件@/common/vendor.js,搜索www.thinkmoon.cn替换为你的域名。

Typecho插件端

复制 WeBlog 到插件目录, 在后台激活并设置

特别鸣谢

虽然项目的作者显示的只有我一个,但是我一个人是无法完成该项目的,我想感谢与该项目相关的一些开源项目及作者。

感谢各位开源作者优秀的作品!

意见反馈

我会尽最大的努力确保文档和代码没有错误。可是,金无赤足,错误在所难免。如果您发现本项目中的任何错误,如错别字或代码错误等,希望您能及时给我反馈,您的反馈不仅可以让其他使用者收益,更可以提高项目的质量。

如果您对于项目有些好的建议,或者想法,欢迎您加入QQ群与我讨论。

QQ群

如果您想与本项目作者或者其他使用者沟通,欢迎加入项目开发交流群:1062676924

开发计划

  • [x] 浏览量和点赞量数据表
  • [x] 评论功能
  • [x] 点击图片预览功能
  • [x] 点击链接复制功能
  • [x] Aplayer插件的支持
  • [x] 一键修改主题色
  • [x] 文章搜索
  • [x] 接口加密
  • [ ] 评论回复功能
  • [ ] 评论通知功能
  • [ ] 网页端微信登录
  • [ ] 夜间模式

更新日志

v0.2.0
feature

  1. 采用完全的自定义组件模式,适配一键换肤
  2. 优化一键换肤的功能。

v0.1.9
feature

  1. 采用互补色彩设计原则,支持一键修改主题色

fixed

  1. 修复文章分类不同步的BUG
  2. 修复在部分情况下缩略图不显示的BUG
  3. 修复遇到

- 阅读剩余部分 -

笔者初学前端时,遇到一些具有padding/border的子元素铺满父元素时,常常采用人工计算width的方式来实现效果。知道后来了解到box-sizing,才知道那种实现方式是多么的尴尬!

box-sizing

box-sizing 属性允许你以某种方式定义某些元素,以适应指定区域。

box-sizing具有三个值

  1. content-box,默认值,指定盒模型为 W3C 标准模型,设置 border、padding 会增加元素 width与 height 的尺寸。
  2. border-box,指定盒模型为 IE模型(怪异模式),设置 border、padding 不会影响元素 width 与 height 的尺寸。
  3. inherit,继承

举个例子

<template>
<block>
  <div class="parent"></div>
 <div class="child"></div>
</block>
</template>

<script>
export default {
  name: "HelloWorld",
  props: {
    msg: String
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
div{
  display: inline-block;
  height: 100px;
  width: 100px;
  padding: 10px;
  border-width: 10px;
  margin: 10px;
}
.parent {
  box-sizing: content-box;
}
 .child {
    box-sizing: border-box;
  }
</style>

效果展示

parent

2020-09-20T14:40:14.png

上图我们可以看到,content-box下,width的宽度只是content的宽度,元素的实际宽度等于width+border+padding

child

2020-09-20T14:42:40.png

而在border-box,width的宽度指的是边框盒子的宽度,元素的实际宽度就等于width

介绍

Vue中的指令形如v-*,如v-if,v-show,v-model等。同时,除了Vue自带的一些默认指令外,Vue同时运行用户自定义指令,来扩展指令功能。

使用场景

究竟什么情况下使用组件?而什么情况下使用指令呢?官方对此,给出了以下建议:

注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件。然而,有的情况下,你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令。

也就是说,当你关注问题的抽象层级在DOM元素的时候,你就应该考虑使用自定义指令来完成需求了。

作用范围

自定义指令有两种作用范围,一种是申明在全局,全局内有效。另一种,则是局部指令。

钩子函数及相关参数见官网文档。

举个例子

需求

我需要设计一个自定义指令v-bug,该指令可将作用元素的所有内容都替换为烫烫烫烫,指令可以指定有几个烫,以及是否追加锟斤拷

1. 先将内容替换为一个

main.js
import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

Vue.directive('bug', {
  inserted: function (el) {
    el.innerHTML = "烫"
  }
})

new Vue({
  render: h => h(App),
}).$mount('#app')
App.vue
<template>
  <div id="app">
    <HelloWorld v-bug />
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'

export default {
  name: 'App',
  components: {
    HelloWorld
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

效果展示

2020-09-20T05:28:47.png

2. 生成指定个数的

main.js
...
Vue.directive('bug', {
  inserted: function (el, binding) {
    el.innerHTML = Array(binding.value).fill("烫").join("")
  }
})
...
App.vue
<template>
  <div id="app">
    <HelloWorld v-bug="12" />
  </div>
</template>

2020-09-20T05:29:25.png

3. 指定是否追加锟斤拷

main.js
...
Vue.directive('bug', {
  inserted: function (el, binding) {
    let html = Array(binding.value).fill("烫").join("")
    if(binding.modifiers.suffix){
      html += "锟斤拷"
    }
    el.innerHTML = html
  }
})
...
App.vue
<template>
  <div id="app">
    <HelloWorld v-bug.suffix="12" />
  </div>
</template>

2020-09-20T05:30:18.png

但是此时的代码有个非常严重的问题,从上文代码中可看出,内容的改变只在inserted的时候执行。如果我们将指令后面设置为变量,变量值的改变却不会影响到个数(这一点都不Vue),所有我们应再监听一下指令的updated钩子函数。

4. 数据驱动(动态改变)

App.vue
<script>
import HelloWorld from "./components/HelloWorld.vue";

let interval = null
export default {
    name: "App",
    components: {
        HelloWorld
    },
    data() {
        return {
            num: 12
        };
    },
    created() {
        interval = setInterval(() => {
            this.num++;
        }, 1000);
    },
    beforeDestroy(){
      clearInterval(interval)
    }
};
</script>
main.js
...
function generateHtml(binding){
  let html = Array(binding.value).fill("烫").join("")
  if (binding.modifiers.suffix) {
    html += "锟斤拷"
  }
  return html
}
Vue.directive('bug', {
  inserted: function (el, binding) {
    el.innerHTML = generateHtml(binding)
  },
  update: function (el, binding) {
    if (binding.oldValue !== binding.value) {
      el.innerHTML = generateHtml(binding)
    }
  },
})
...

2020-09-11T14:22:08.png
需求完成!