热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

博客革新晋级

最先之前写的个人博客确切有点太丑了,近来重写了一番。做了挪动端适配,增加了文章标签以及做了相册等功用。看着很不错。talkischeap,showmeyoucode。一图胜千言,且
最先

之前写的个人博客确切有点太丑了,近来重写了一番。做了挪动端适配,增加了文章标签以及做了相册等功用。
看着很不错。talk is cheap,show me you code。一图胜千言,且看以下结果:

《博客革新晋级》

《博客革新晋级》

个人博客地点:http://www.baijiawei.top

项目GitHub地点:https://github.com/bjw1234/bl…

自定义滚动条

现在关于自定义滚动条支撑状况比较好的也就只要Chrome了,所以针对Chrome有必要把滚动条的款式革新一下。

虽然有jQuery插件能够完成各个浏览器下的自定义滚动条款式,然则因为全部项目都是用原生JS开辟完成的,
未运用jQuery,所以也没必要为了一个滚动条引入一个库和一个插件了。


::-webkit-scrollbar {
width: 10px;
height: 10px;
}
/*不要程度滚动条*/
::-webkit-scrollbar:horizontal {
height: 0;
}
/*骨干款式*/
::-webkit-scrollbar-track {
background-color: rgba(0, 0, 0, .1);
-webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1);
}
/*鼠标悬浮时骨干款式*/
::-webkit-scrollbar-track:hover {
background-color: rgba(0, 0, 0, .2);
-webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1);
}
/*滑块款式*/
::-webkit-scrollbar-thumb {
border-radius: 10px;
background-color: rgba(0, 0, 0, .3);
-webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1);
}
/*鼠标悬浮时滑块款式*/
::-webkit-scrollbar-thumb:hover {
border-radius: 10px;
background-color: rgba(0, 0, 0, .4);
-webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1);
}
:hover::-webkit-scrollbar-thumb {
border-radius: 10px;
background-color: rgba(0, 0, 0, .4);
-webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, .1);
}
/*上端按钮款式*/
::-webkit-scrollbar-button:start {
width: 10px;
height: 10px;
background: url(./image/scrollbar_arrow.png) no-repeat 0 0;
}
::-webkit-scrollbar-button:start:hover {
background: url(./image/scrollbar_arrow.png) no-repeat -15px 0;
}
/*下端按钮款式*/
::-webkit-scrollbar-button:end {
background: url(./image/scrollbar_arrow.png) no-repeat 0 -18px;
}
::-webkit-scrollbar-button:end:hover {
background: url(./image/scrollbar_arrow.png) no-repeat -15px -18px;
}

webkit供应的另有更多的伪类,能够定制更雄厚滚动条款式。
细致内容参考:https://www.webkit.org/blog/3…

页面顶canvas动画

这里给出原作者的地点:
https://codepen.io/iamfronten…

早先想着本身完成这个结果,也许写完以后发明人家的背景是用SVG做的,

另有一点点随风飞舞的赶脚,干脆就直接用的人家的代码。
^_^||

道理:经由过程window对象上的requestAnimationFrame要领不停地重绘canvas,完成小星星,流星等的位移、透明度的变化。

写一点伪码:


let canvas = document.getElementById('canvas');
let ctx = canvas.getContext('2d');
// 初始化
init();
// 绘制
draw();
function draw(){
// 清空画板
ctx.clearRect(0,0,canvasW,canvasH); // 绘制小星星
for(var i = 0; i stars[i].move(); // 位移
stars[i].changAlpha(); // 转变透明度
stars[i].drawSelf(); // 画出本身
stars[i].checkBound(); // 边界检测
}
// 绘制流星同理
... // 不停地重绘
window.requestAnimationFrame(draw);
}
// 星星类
function star(){
// 许多本身的属性
.... this.move = function(){}
this.changAlpha = function(){}
this.drawSelf = function(){}
this.checkBound = function(){}
}

假如流星涌现的几率是3%,我们怎样精准的掌握它呢?

// 猎取几率(Boolean)
function getProbability(percent) {
return Matth.floor(Math.random()*100+1) }
getProbability(3); // 当返回true的时刻再去增加彗星
流通的返回顶部

道理:也是运用requestAnimationFrame这个函数不停转变scrollTo(滚动到)的位置。
运用setTimeout函数调解容器的scrollTop值虽然也能完成返回顶部的结果,但没有上面这类要领流通。

// 返回顶部
function smoothScroll() {
var currentScroll = document.documentElement.scrollTop || document.body.scrollTop;
if (currentScroll > 0) {
window.requestAnimationFrame(smoothScroll);
window.scrollTo(0, currentScroll - (currentScroll / 5));
}
}
关于文章标签

一篇文章对应多个标签
一个标签也能够被多篇文章运用

典范的多对多关联。

后端数据库运用的是MongoDB,完成这类多对多关联的数据表索引有点不知从何下手的觉得。
干脆就运用了子文档的体式格局完成如许的结果。
ps: 假如您有思绪的话,愿望能够不吝赐教,非常感谢。

const mOngoose= require('mongoose');
const Category = require('./categorySch');
// Article
module.exports = new mongoose.Schema({
// 关联字段
children: [ // 子文档标签数组
Category
],
// 作者
user: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
},
// 内容
content: {
type: String,
default: ''
}
....
});

运用这类体式格局增加、查询标签都很轻易。

// 将用户提交的标签用空格切分返回一个对象
let categoryArr = category.split(' ').map(item => {
return { category_name: item };
});
// 将用户提交的数据到场数据库
return new Article({
title: title,
// 直接就能够增加
children: categoryArr,
}).save();
// 查询就更简朴了
article.children;

在模板中运用一个for轮回就能够直接衬着数据:

{% for category in art.children %}


  • {{ category.category_name }}

  • {% endfor %}

    至于依据标签查询对应文章,早先想着向后端通报标签的ID,然则,发明每篇文章下相同类别的标签对应的ID差别。
    这就是运用子文档的价值),干脆就直接通报标署名了,虽然说如许的体式格局不文雅,但也能完成想要的结果了。

    前一条和后一条数据

    let prev = function () {
    return Article.find({'_id': {'$gt': id}}).sort({_id: 1}).limit(1).then(result => {
    data.prev = null;
    if (result.length >= 0) {
    data.prev = result[0];
    }
    });
    };
    let next = function () {
    return Article.find({'_id': {'$lt': id}}).sort({_id: -1}).limit(1).then(result => {
    data.next = null;
    if (result.length >= 0) {
    data.next = result[0];
    }
    });
    };
    相册功用开辟

    图片存储运用了图床(途经图床),后端只需要存储markdown语法的字符串,
    前端就能够剖析成img标签,照样蛮好用的。

    末了

    至于像是服务器搭建、模板引擎、markdown语法高亮、分页等功用就不反复说了。

    细致内容能够看我之前的文章。
    https://segmentfault.com/a/11…


    推荐阅读
    • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
      本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
    • CSS3选择器的使用方法详解,提高Web开发效率和精准度
      本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
    • WebSocket与Socket.io的理解
      WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
    • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
    • 从零基础到精通的前台学习路线
      随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
    • C#多线程解决界面卡死问题的完美解决方案
      当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
    • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
    • 本文由编程笔记#小编为大家整理,主要介绍了css回到顶部按钮相关的知识,希望对你有一定的参考价值。 ... [详细]
    • DOM事件大全
      1.事件:js与html的交互就是通过事件的,观察者模式2.事件流:从页面中接收事件的顺序IE::事件冒泡流,事件冒泡,事件从最具体的元素接收,然后逐级向上传播,主流浏览器都支持N ... [详细]
    • 牛B三人组快速排序堆排序归并排序
      快速排序随便取个数,作为标志值,这里就默认为索引位置为0的值记录左索引和右索引,从右往左找比标志值小的,小值和左索引值交换& ... [详细]
    • 不BB,直接正题一.将大众要领绑定到Page上单个绑定constoldPagePagePagefunction(app){注重大众函数的名字不要反复,不然掩盖app.utilfun ... [详细]
    • 活动主题:五一巨献,问答有礼,105QB送给IT互联网界的劳动人民活动时间:4月30日晚上10点~5月2日晚上10点网址:http:ask.jiutianniao.com ... [详细]
    • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
      本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
    • 1使用了下拉刷新后<divclass"mui-scroll"><div>这里面的内容,所有的a标签都的href都无法正常跳转,div,spa ... [详细]
    • 数据结构与算法习题replacementselectionsort(置换选择排序)TimeLimit:1000msMemoryLimit:65536kBDescrip ... [详细]
    author-avatar
    我财我乐汽车869
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有