这是我参与「第四届青训营 」笔记创作活动的的第5天!

项目简介

由于这次大项目组队挑选了官方组队的原因,兜兜转转只剩下自己一个人做项目,又由于是刚刚学完vue毫无实战阅历的小白,想着要锻炼一下自己,所以挑选了用vue开发看上去最简单(一点也不)的仿官网,首要目标是要完结主页面翻滚加载,文章页面导航目录,代码高亮等功用,完结根本完好的文章浏览领会。

项目运用技能点

vue开发,vue-cli搭建,有用到vue路由和vuex,首要用到的插件有less(css预处理器),maven-editor(将md转换为html),Google Code Prettify(代码高亮)还有jQuery,整个进程下来确实领会到了vue的优势,文章页面直接烘托就行,整个页面也能够组件化,十分便利。

开发进程

1.思路

先做好主页面最上部的导航栏,经过路由切换导航栏页面,再完结下面的广告栏和文章栏,经过路由带着参数的方法访问特定文章。

2.遇到的问题

2.1款式与‘px’单位

原本以为写css写半响的时代已经远离自己了,没想到写主页面款式时困难重重,首先是动画完结的欠好,经过半响研究之后总算完结了几个比较简单的,可是相对困难的查找框动画却一向没有头绪,其次是想要测验用自适应单位,如:vw,可是也没有完结,仍是用了‘px’

查找框动画:

仿掘金官网项目总结 | 青训营笔记
仿掘金官网项目总结 | 青训营笔记

2.2文章数据存储

没有数据库,没有接口,测验去找快速定制接口的网站/插件,也没有找到,最终只好把数据都放进了vuex,没想到还挺便利的。

仿掘金官网项目总结 | 青训营笔记

2.3主页面翻滚加载

刚开始想找一个翻滚加载的插件,找了一圈感觉不如自己写,大概的思路是:先把所有文章数据赋值到一个数组,再把这个数组切成多份,每份十五个文章,每当监视到页面滑动到底部时便运用‘concat’追加烘托出新的‘一份’。

首要代码如下:

window.addEventListener('scroll', this.scrollFn)
  if (this.$store.state.database.length <= 15) {//文章数小于15则不用切分
   this.ArticleData = this.$store.state.database
  } else {//假如文章数大于15就切分
   for (let i = 0; i < this.$store.state.database.length / 15; i++) {//从vuex拿到文章数据
    obj[i] = this.$store.state.database.slice(15 * i, 15 * (i + 1))//切分
   }
   this.ArticleData = obj[0]
  }
scrollFn() {
   let windowHeight = window.innerHeight || document.documentElement.clientHeight
   let st = window.pageYOffset || document.documentElement.scrollTop
   let scrollHeight = document.documentElement.scrollHeight
   if (objKey === Object.keys(obj).length - 1) {
    return
   }
   if (windowHeight + st >= scrollHeight) {//假如滑动到了页面底部
    objKey++
    this.ArticleData = this.ArticleData.concat(obj[objKey])//追加文章数据
   }
2.4怎么进入文章页面

最终的解决方案是进入文章页时带着’id’参数,再直接运用vuex文章数据找到对应的文章。

仿掘金官网项目总结 | 青训营笔记

2.5将md转换为html

测验了市面上的多个插件之后挑选了maven-editor,它能够直接把加工好的md文档烘托到文章页面上,还有主动生成文章目录的功用,完全匹配我的要求,而且用法简单,美中不足是它的代码高亮效果失效了(猜想是它的代码高亮效果需求凭借highlight.js,可是它的内部代码没有跟上highlight.js的更新),于是接着解决代码高亮的问题。

只需一行即可:

<mavonEditor class="article" v-model="content" defaultOpen="preview" :toolbarsFlag="false" :subfield="false" :navigation="true" :ishljs="false" />

2.6代码高亮

在maven-editor失效后测验了多个代码高亮插件无果,首要是由于maven-editor就像一个黑盒子,很难在maven-editor做好一切的情况下去修改它内部烘托出的页面,幸好最终找到了Google Code Prettify,运用起来十分简单,仅需在代码所处的<code><code\>盒子加上对应类名(我用DOM来加类名)即可完结代码高亮。

for (let i = 0, len = codehl.length; i < len; i++) {
     codehl[i].setAttribute('class', 'prettyprint')
    }
2.7文章目录

尽管maven-editor自带文章目录,可是它给出的文章目录直接悬浮在了文章之上,而且款式也不尽人意,这儿我另外克己了一个文章目录,经过jQuery获取到me生成目录内容,再烘托到我克己的目录上。

this.$nextTick(() => {
    const aArr = $('a').toArray()
    let toc = []
    let flag = true
    aArr.forEach(item => {
     let href = $(item).attr('id')
     let name = $(item).parent().text()
     if (href) {
      for (let i = 0, len = toc.length; i < len; i++) {
       if (toc[i].href == '#' + href) {
        flag = false
       }
      }
      if (flag) {
       toc.push({
        href: '#' + href,
        name
       })
      }
     }
    })
    this.toc = toc
   })

3.优化空间

(1)进入文章页面后需求主动改写一次才干完结代码高亮效果,用户领会较差

(2) 查找栏、文章目录等处缺乏动效

(3)md转HTML插件无法直接识别md文档中的换行,需求手动加‘\n’

(4)改善页面计量单位,使其在不同设备上显示效果相同

(5)进入文章页后需求点两次回退按钮才干回到首页(由于改写过一次的原因)

(6)页面改为可伸缩的

(7)代码冗余,许多应该别离的代码写到了一起

(8)文章页加载慢,性能尚待优化

总结思考

  • 根底还需求巩固
  • 编程思想还停留在以前,需求提高

全体来讲,尽管问题繁复,但这次项目是出乎我的意料的,进步很大,谢谢我,也谢谢青训营。