一直想尝试下全栈开发,想尝试一下,选题的初衷是自己对资源共享和二手市场的前景非常看好
共享资源的概念是有利于社会进步,并且是思维的一种跨越;未来一定是一个更美好的社会,我们需要做的就是让那一天尽早的到来
##
]]>当然,并不是所有的 Web 都叫做 PWA。根据 google 定义,PWA 应该具有一下特性:
首先输入fdisk -l命令后,发现/dev/vdb,说明实例含有数据盘,需要挂载
运行fdisk /dev/vdb,对数据盘进行分区,依次输入n,p,1,然后按两次回车,最后输入wq,进行分区
分区完成之后运行fdisk -l命令,查看新的分区。可以看到新的分区vdb1已经创建好了。
运行mkfs.ext3 /dev/vdb,对新分区进行格式化。
格式化完成之后运行echo /dev/xvdb1 /mnt ext3 defaults 0 0 >> /etc/fstab (这是一条命令)写入分区信息。
完成之后运行 cat /etc/fstab 可以进行查看
运行mount /dev/vdb1 /mnt 挂载新分区,然后执行df -h 查看分区,如果出现数据盘信息,说明挂载成功,就可以开始使用新分区
作者:wuyumumu
链接:https://www.jianshu.com/p/8fb738cd8672
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm
特别注意:Ubuntu中可执行的名字是 nodejs 而不是node
一款管理nodejs版本的工具
升级node.js到最新稳定版
n stable
升级node.js到最新版
n latest
安装gcc g++的依赖库
apt-get install build-essential
apt-get install libtool
安装 pcre依赖库
sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev
安装 zlib依赖库
apt-get install zlib1g-dev
安装 ssl依赖库
apt-get install openssl
安装Nginx(http://nginx.org)
#下载最新版本:
wget http://nginx.org/download/nginx-1.13.4.tar.gz(根据官网查看最新版本下载对应版本)
#解压:
tar -zxvf nginx-1.13.4.tar.gz
#进入解压目录:
cd nginx-1.13.4
#配置:
./configure --prefix=/usr/local/nginx
#编辑nginx:
make
#安装nginx:
sudo make install
#启动nginx:
先切到根目录cd /
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#查看nginx进程:
ps -ef|grep nginx
#查看nginx版本(根目录下执行)
usr/local/nginx/sbin/nginx -v
测试nginx安装成功
wget http://127.0.0.1 (会下载一个默认的html文件,直接ls查看当前目录可看到)
markdown 预览插件
让代码更符合规范
括号上色插件,神器推荐
颜色上色插件
取色插件
rem转换工具
debugger插件,正在学怎么用
代码规范插件
图标插件
查看历史修改记录插件
可爱的代码颜色风格
应该改支持代码提示插件吧
markdown 语法提示插件
路径补全插件
暂时没用上
也没用上
插件备份工具,貌似是神器,目前没用过
一款美化插件配置如下:
"background.useDefault": false,
"background.enabled": true,
"background.customImages": [
"file:///Users/mac/Desktop/1.png"
],
"background.style": {
"opacity": 0.6
}
]]>cnpm i express-generator -g
.
├── app.js
├── bin
│ └── www
├── package.json
├── public
│ ├── images
│ ├── javascripts
│ └── stylesheets
│ └── style.css
├── routes
│ ├── index.js
│ └── users.js
└── views
├── error.jade
├── index.jade
└── layout.jade
7 directories, 9 files
<!-- 没有挂载路径 -->
app.use(function (req, res, next) {
...
next()
}, function (req, res, next) {
console.log('Request Type:', req.method);
next();
})
<!-- 挂载路径的中间件 -->
app.use('/user/', function(req, res, next){
...
next()
})
路由和句柄函数,处理get(post)请求
app.get('/', function() {
res.send('USER')
})
var app = express()
var router = express.Router()
```
和上面类似,只是写法不同
router.use(‘/‘, function(req, res, next) {
…
next()
})
app.use(‘/‘, router)
#### 错误处理中间件
app.use(function (err, req, res, next) {
console.error(err.stack);
res.status(500).send(‘Something broke!’);
});
#### 内置中间件
> 唯一内置中间件:express.static()
* dotfiles
是否对外输出文件名以点(.)开头的文件。
可选值为 “allow”、“deny” 和 “ignore”
默认:ignore
* etag
是否启用 etag 生成
默认:true
* extensions
设置文件扩展名备份选项
默认:[]
* index
发送目录索引文件,设置为 false 禁用目录索引。
Mixed
默认:“index.html”
* lastModified
设置 Last-Modified 头为文件在操作系统上的最后修改日期。可能值为 true 或 false。
默认:true
* maxAge
以毫秒或者其字符串格式设置 Cache-Control 头的 max-age 属性。
默认:0
* redirect
当路径为目录时,重定向至 “/”。
默认:true
* setHeaders
设置 HTTP 头以提供文件的函数。
Function
app.use(express.static(‘public’, options));
#### 第三方中间件
##### cookie-parser
用于解析 cookie 的中间件
##### body-parser
用于解析request body部分,并对上传内容大小作出限制
app.use(bodyParser.json({ limit: ‘50mb’ }));
app.use(bodyParser.urlencoded({ limit: ‘50mb’, extended: true }));
#### canvas
var base64Data = req.body.imgData;
var img = new Canvas.Image;
img.onload = function(){
var w = img.width;
var h = img.height;
var canvas = new Canvas(w, h);
var ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
var out = fs.createWriteStream(__dirname + '/crop.jpg');
var stream = canvas.createJPEGStream({
bufsize : 2048,
quality : 80
});
stream.on('data', function(chunk){
out.write(chunk);
});
stream.on('end', function(){
out.end();
res.send("上传成功!");
});
}
img.onerror = function(err){
res.send(err);
}
img.src = base64Data;
#### fs模块 (node自带模块)
对文件执行读取和写入
function(req, res, next) {
if (req.body.formFile) {
// 对象转换为字符串
var base64Data = req.body.formFile.replace(/^data:image\/\w+;base64,/, “”);
var dataBuffer = new Buffer(base64Data, ‘base64’);
fs.writeFile(“out.png”, dataBuffer, function (err) {
if (err) {
res.send(err);
} else {
res.send(“保存成功!”);
}
});
}
}
```
框架:react
注意:路由用的是4.0版
打包工具:webpack2.0
项目唯一入口
这里发现一个问题,就是当我打包时全部 js 在同一个文件中,文件太大了,性能体验上是非常可怕的,反正我觉得如果2g网浏览是GG了的。处理的方式是: 给入口添加一个 vendor,将依赖库写入这个 vendor 中,如果觉得依赖包太大可以写成 vendor1,vendor2.
项目输出文件夹
[name].[hash:8].js
html,js,css,img 处理组件
其他优化插件,该处只介绍 webpack 自带的一些插件库
webpack.BannerPlugin
给打包文件添加一个banner
webpack.optimize.UglifyJsPlugin
压缩 js
webpack.optimize.OccurrenceOrderPlugin
添加唯一 ID
热加载插件,在 script 中的命令参数:
–devtool eval:为你的代码创建源地址。当有任何报错的时候可以让你更加精确地定位到文件和行号
–progress: 显示合并代码进度
–colors: 在命令行中显示颜色
–content-base build: 指向设置的输出目录
–hot: 注意在 config 文件中如果已经new plugin,就不要hot了,二选一。
根据预先的模板实例化一个html
new HtmlWebpackPlugin({
title: '',
template: __dirname + "/src/index.html",
minify: {
"removeAttributeQuotes": true, // 移除注释
"removeComments": true, // 移除空格
"removeEmptyAttributes": true, // 移除空白行
},
chunks: ['index', 'vendors'], // 配置该html文件要添加的模块
// inject: 'body'
})
删除 webpack 缓存插件
new CleanWebpackPlugin('build/', { // 清除缓存文件
root: __dirname,
verbose: true,
dry: false
})
将 css 抽离出 js
test: /\.css$/,
use: ExtractTextPlugin.extract({
fallback: "style-loader", // 提取 css 文件
use: [{ // 编译文件
loader: "css-loader",
options: {
// modules: true, // 组件化
minimize: true // 压缩
}
}, {
loader: "postcss-loader" // 将 css 添加前缀
}
]
})
友好的错误提示插件
autoprefixer(需要和 postcss-loader 一起使用)
补全 css 前缀
babel 合集
babel-core
babel-loader
babel-plugin-react-transform
babel-preset-env
babel-preset-react
react-transform-catch-errors、redbox-react
react 报错插件
copy-to-clipboard
点击复制到剪贴板插件
ReactDOM.render(
,
document.getElementById(‘app’)
)
在父级 APP 中记得加入 this.props.children
```
路由渲染不要带着DOM一起渲染,如果可以将 router 单独作为一个组件处理,本例稍简单,并未分离出去
神坑啊!设置的时候是将 8K 以内的图片打包后转为 base64,所以并看不到 img 文件夹生成。。。而我判断打包成功的标准就是是否生成 img 文件夹
]]>我一直在探索属于我自己独一无二的代码风格
最近在看这本书,书中有很多技巧让我受益颇多
1· 方法函数是驼峰命名
2· 构造函数是首字母大写命名
3· 常量采取全大写命名
4· js 中不要省略小数点前的 0 (css可以)
1. static 开头类的属性,eg:defaultProps, propTypes
2. 构造函数 constructor
3. getter/setter
4. 组件生命周期
5. _开头的私有方法
6. 事件监听方法
7. render* 开头的方法
8. render
EXP(以 react 为例):
```
//组件
class Exp extends Component {
//初始化
static propTypes = {
onSubmit: PropTypes.func
}
//构造函数
constructor () {
super()
this.state = {
test: '1'
}
}
// getter/setter
getter() {
}
// 即将挂载
componentWillMount () {
localStorage.getItem('username')
}
// 已挂载
componentDidMount () {
}
// 私有方法
_selfFunction (username) {
localStorage.setItem('username', username)
}
// 监听方法
function1 () {
//第一个 if 语句
if () {
var test = 'abc',
first = 1,
//立即执行函数
secound = (function () { return 0}())
//第二个 if 语句
if (allNumber || first || secound || third || monday || sunday ||
satarday) {
//第三个 if 语句
if () {
function act (ppt) {}
act( ppt )
}
}
} else {
}
}
}
```
]]>IE:obj.parentElement
Firefox:obj.parentNode
解决办法:都用obj.parentNode
if (navigator.appName.indexOf('Explorer') > -1) {
document.getElementById('element').innerText = 'my text'
} else {
document.getElementById('element').textContent = 'my text'
}
box {width:100px; border: 1px;}
IE:box.width = 100
FF:box.width = 100 + 1*2
解决方法:{width: 100px!important; width: 98px;}
设置为 float 的 div 在 ie 下设置的 margin 会加倍
解决方法:加入 display:inline
IE 不识别 min
解决方法:min-width: 600px; width: expression(document.body.clientWidth < 600px ? ‘600px’ : ‘auto’)
解决方法:左边浮动,右边margin-right: -3px;
li {
width:200px;
white-spave: nowrap;
text-overflow: elipsis;
overflow: hidden;
}
FF 不支持
解决方法:将 body 换成 HTML
html {scrollbar-face-color: #fff;….}
解决方法:将flash 设置为透明
解决方法:注意顺序 L-V-H-A
在 IE 中会有一点边距
解决方法:ul,form {margin: 0; padding: 0;}
可以下载 js 库
####
]]>可以在字符串中抽取从 start下标开始的指定数目的字符
length可以不要,代表整个截取的长度
可以在数组 start 开始截取指定长度的数组,如果为负数就从最后一个开始,subStr也是
end 不包括end本身
把字符串分割成字符串数组
separator 可以是字符串,也可以是正则,howmany 表示截取的长度不超过该数量
从数组中添加/删除项目,然后返回被删除的项目
index 表示删除的位置,howmany 表示删除几项,如果为0表示不删除,item代表插入的项目
把字符串中老的字符替换成新的字符
在原来的字符串基础上连接多个字符串,也可以连接数组
找到一个或多个和正则表达式的匹配
找到第一次出现正则表达式或者字符串的地方,返回该位置的下标,如果没有就返回-1
字符串大小写切换
去除字符串两边的空白
判断数组中的所有项是否都符合条件
用字符串固定替换数组的元素
创建一个新的数组 newArr, 新数组是通过检测的所有oldArr元素的集合
将数组转换成字符串,并用separator 分开,可以省略
反转字符串或数组
var BrowserInfo = {
userAgent: navigator.userAgent.toLowerCase()
isAndroid: Boolean(navigator.userAgent.match(/android/ig)),
isIphone: Boolean(navigator.userAgent.match(/iphone|ipod/ig)),
isIpad: Boolean(navigator.userAgent.match(/ipad/ig)),
isWeixin: Boolean(navigator.userAgent.match(/MicroMessenger/ig)),
}
function getExp(name, url) {
var reg = new RegExp("(^|\\?|&)" + name + "=([^&]*)(\\s|&|$)", "i")
if (reg.test(url)) return decodeURIComponent(RegExp.$2.replace(/\+/g, " ")) return ""
}
function launchFullScreen(element) {
if (element.requestFullScreen) {
element.requestFullScreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.webkitRequestFullScreen) {
element.webkitRequestFullScreen();
}
}
function selectAll(objSelect) {
if(objSelect.checked == true) {
$("input[name='chkId']").attr("checked", true)
$("input[name='chkAll']").attr("checked", true)
} else if (objSelect.checked == true) {
$("input[name='chkId']").attr("checked", false)
$("input[name='chkAll']").attr("checked", false)
}
}
<!--判断是否是 IE 浏览器-->
if (document.all){
alert(”IE浏览器”);
}else{
alert(”非IE浏览器”);
}
if (!!window.ActiveXObject){
alert(”IE浏览器”);
}else{
alert(”非IE浏览器”);
}
<!--判断是IE几-->
var isIE=!!window.ActiveXObject;
var isIE6=isIE&&!window.XMLHttpRequest;
var isIE8=isIE&&!!document.documentMode;
var isIE7=isIE&&!isIE6&&!isIE8;
if (isIE){
if (isIE6){
alert(”ie6″);
}else if (isIE8){
alert(”ie8″);
}else if (isIE7){
alert(”ie7″);
}
}
function setCookie(name, value, expires, path, domain) {
if (!expires) expires = -1
if (!path) path = "/"
var d = "" + name + "=" + value
var e
if (expires < 0) {
e = ""
}
else if (expires == 0) {
var f = new Date(1970, 1, 1)
e = ";expires=" + f.toUTCString()
}
else {
var now = new Date()
var f = new Date(now.getTime() + expires * 1000)
e = ";expires=" + f.toUTCString()
}
var dm;
if (!domain) {
dm = ""
}
else {
dm = ";domain=" + domain
}
document.cookie = name + "=" + value + ";path=" + path + e + dm
};
function readCookie(name) {
var nameEQ = name + "="
var ca = document.cookie.split(';')
for (var i = 0; i < ca.length; i++) {
var c = ca[i]
while (c.charAt(0) == ' ') c = c.substring(1, c.length)
if (c.indexOf(nameEQ) == 0) {
return decodeURIComponent(c.substring(nameEQ.length, c.length))
}
} return null
}
]]>1、记住,平均每天看电视超过三小时以上的,一定都是那些月收入不超过两千元的,如果你想要月收入超过两千,请不要把时间浪费在电视上,同样的道理,那些平均每天玩网络游戏或聊天超过三个小时以上的,也都是那些月收入不超过两千的。
2、这个世界,有这么一小撮的人,打开报纸,是他们的消息,打开电视,是他们的消息,街头巷尾,议论的事他们的消息,仿佛世界是为他们准备的,他们能够呼风唤雨,无所不能。你的目标,应该是努力成为这一小撮人。
3、如果,你真的爱你的爸妈,爱你的女朋友,就好好得去奋斗,去拼搏吧,这样,你才有能力,有经济条件,有自由时间,去陪她们,去好好爱他们。
4、这个社会,是赢家通吃,输者一无所有,社会,永远都是只以成败论英雄。过程只是人生的一部分,再辛苦,没有成功只能说明你的能力还不够。
5、这个世界上,一流的人才,可以把三流项目做成二流或更好,但是,三流人才,会把一流项目,做的还不如三流。
6、趁着年轻,多出去走走看看,读万卷书,不如行万里路,行万里路,不如阅人无数。
7、与人交往的时候,多听少说,这就是,上帝为什么给我们一个嘴巴两个耳朵的原因。
8、不要装13,对于装13的人,最好的办法就是,见块砖头,悄悄跟上去,一下子从背后放到他。
9、一个年轻人,如果三年的时间里,没有任何想法,他这一生,就基本这个样子,没有多大改变了。
10、成功者就是胆识加魄力。
11、给自己定一个五年的目标,然后,把它分解成一年一年,半年半年的,三个月的,一个月的,这样,你才能找到自己的目标和方向。
12、如果我只能送你一句忠告,那就是,这个世界上没有免费的午餐,永远不要走捷径。
1、给自己定目标,一年、两年、五年,也许你出生不如别人好,通过努力,往往可以改变70%的命运,破罐子破摔只能和懦弱做朋友。
2、朋友请你吃饭,不要觉得理所当然,请礼尚往来,否则你的名声会越来越差。
3、好朋友里面,一定要培养出一个知己,不要以为你有多么八面玲珑,到处是朋友,最后真心对你的,只要一个,相信我。
4、不喜欢的人少接触,但别在背后说坏话,说是非之人,必定是是非之人,谨记,祸从口出。
5、是人都有惰性,这是与生俱来的,但是我们后天可以改变这种惰性,因为有很多人正在改变,对于某种事物或是生意不要等别人做到了,我才想到,不要等别人已经赚到钱了,我才想去做,没有人相信的是市场和机遇,大家都相信的叫做膨胀。
6、知道自己要干什么,夜深人静,问问自己,将来的打算,并朝着那个方向去实现,而不是无所事事和做一些无谓的事。
7、出路出路,走出去了,总是会有路的,困难苦难,困在家里就是难,社会普遍认为。
8、做人,要做到;万事孝为先,教童品之道,夫妻和谐美,幸福万年长。但是这些不是拿来用嘴说说就能办到的,解放初期年代要做到这些,需要付出很大的努力和辛苦,当今现实的社会需要你付出很大的金钱,聪明的人都知道这个道理。
9、空闲时间不要经常上网做无聊的事和玩一些没有意义的游戏,读点文学作品,学习一些经营流程,管理规范,国际时事,法律常识。这能保证你在任何聚会都有谈资。
10、宁可错杀一千次来自各方面的信息,也不放过任何一个有可能成功的机会。只有这样你才不会去买后悔药。
11、要做一件事,成功之前,没有必要告诉其他人。成功之后不用你说,其他人都会知道的。这就是信息时代所带来的效应。
12、力求上进的人,不要总想着靠谁谁,人都是自私的,自己才是最靠得住的人。
]]>二十岁没钱,那很正常;三十岁没钱,可能是没有好的家境,需要更大的努力;四十岁没钱,只能自己找原因。穷人变成富人是可能的,而且很可能。穷人能穷一辈子,也是必然的,存在就是理由,只是有所选择。
html & css:对web标准的理解,浏览器内核差异,兼容性,hack,css基本功:布局,盒子模型,选择器优先级,flexbox
javascript: 数据类型,运算,对象,function,继承,闭包,作用域,原型链,事件,正则(regExp),json,ajax,dom,bom,内存泄漏,跨域,异步封装,模板引擎,前端mvc,路由,模块化,canvas,es6,nodeJS
其他:移动端,相应式,自动化构建,http,离线储存,web安全,优化,重构,团队协作,可维护,易用性,SEO,UED,架构,职业生涯,快速学习能力
var json = JSON.stringfy({a: ‘hello’, b: ‘world’})
var obj = JSON.parse(‘{“a”: “hello”}’)
待续~
暂时未上线~
]]>整理一些面试题,以备用
function A(name) {
this.name = name;
this.sayHello = function(){alert(this.name+ "say hello!")}
}
function B(name, id) {
this.temp = A
this.temp(name)
delete this.temp
this.id = id
this.checkId = function(ID) {alert(this.id == ID)}
}
function stopBubble(e) {
if (e && e.stopPropagation) {
e.stopPropgation ()
} else {
window.event.cancelBubble = true
}
return false
}
优点: node是基于时间驱动和无阻塞的,所以非常适合处理并发请求,因此构建在node上的代理服务器相比其他技术实现的服务器表现要好的多,与node代理服务器交互的客户端代码也是用js写的,用的相同的语言,这感觉前后端非常亲切和美妙
缺点: node是一个相对比较新的开源项目,所以不太稳定,它总是在变,而且缺少足够多的第三方库的支持
1· 水平居中
设置justify-content:center;
2· 垂直居中
a: 插入 table ,再设置vertical-align: middle;
b: 先设置display: table-cell;再设置vertical-align: middle;
!important > id > class > tag
400: 语义有误 401:当前请求需要用户验证 403: 服务器已经理解请求,但是拒绝执行他 404:页面找不到
加载:根据请求的url进行域名解析,向服务器发起请求,接受文件(html,js,css,图像等)
解析:对加载到的资源(html,js,css)进行语法解析,建议相应的内部数据结构(比如html的dom树,js的属性表,css的样式表规则等等)
node.js的模块系统,就是参照CommonJS规范实现的。在CommonJS中,有一个全局性方法require(),用于加载模块。假定有一个数学模块math.js,就可以像下面这样加载。NodeJS是CommonJS规范的实现,webpack 也是以CommonJS的形式来书写。
var math = require(‘math’)
浏览器兼不兼容commonJS,在于是否缺少这几个环境变量
将 npm包 编译成可以被 html 页面引入的 js模块
]]>一个类似的库:browser-unpack
俗话说:善奕者谋势,不善奕者谋子
- 许多企业之所以做不大,就在于只谋子不谋势。谋势就是定战略,有了战略,路再长,总有一天会走到;没有战略,走得越猛,死得越早。置战略需求于不顾,希望用1分钱换来100元的效果的主,很难走出穷的境界,因为占便宜本身就代表没有境界。死抠一城一池,是活三年的企业,因为它不抬头看天。东一榔头西一棒子的,是活三月的企业,因为它不低头看地。不看天,山雨欲来浑然不觉,要被洪水淹死;不看地,夜半悬崖大步流星,要被群山淹没。
据一些管理学家的最新研究,发现有十种老板,由于各方面的制约,是很难将生意做大的。
从上来看,我需要提升的地方还有很多很多,从心态到气场,从执行的态度,到为人处世的方法,学无止境,提高自己的格局,改变自己的视野,不要被眼前的枷锁所束缚,世界很大,我还有很多地方没有去走,牛人很多,我还有很多品质需要研究
改变自己,不甘平庸,相信明天!!!
引入一个浏览器窗口的概念,开启在同源的同窗口,即使跳到其他页面,数据仍然存在,页面刷新也不会消除数据,
特点
- 减少网络流量:一旦数据保存在本地后,就可以避免再向服务器请求数据,因此减少不必要的数据请求,减少数据在浏览器和服务器间不必要地来回传递
- 快速显示数据:性能好,从本地读数据比通过网络从服务器获得数据快得多,本地数据可以即时获得。再加上网页本身也可以有缓存,因此整个页面和数据都在本地的话,可以立即显示
- 临时储存:很多时候数据只需要在用户浏览一组页面期间使用,关闭窗口后数据就可以丢弃了,这种情况使用sessionStorage非常方便
数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递,数据还有路径(path)的概念,可以限制cookie只属于某个路径下。
特点
- cookie数据不能超过4k,同时因为每次http请求都会携带cookie,所以cookie只适合保存很小的数据,如会话标识
- 只在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭,即有一个过期值
- cookie也是在所有同源窗口中都是共享的。
使用方法:
var storage = null;
if(window.localStorage){ //判断浏览器是否支持localStorage
storage = window.localStorage;
storage.setItem("name", "Rick"); //调用setItem方法,存储数据
alert(storage.getItem("name")); //调用getItem方法,弹框显示 name 为 Rick
storage.removeItem("name"); //调用removeItem方法,移除数据
alert(storage.getItem("name")); //调用getItem方法,弹框显示 name 为 null
}
]]>很多人容易把坏男人很狼联系起来,事实上确实很有道理。健康的狼与健康的人有着许多共同点。比如敏锐的直觉,好玩的天性,都充满好奇心,并且坚韧,善于适应不断变化的环境,一样的勇敢。以及根植在骨子里的忠诚
但是往往会被冠以“狡猾” 和“危险”的名号
是抽烟,逃课,打架,玩世不恭,对感情暧昧,吊儿郎当的度日子,看上去没有丝毫的进取心
他可能带着你逃单,然后给气喘吁吁的你递上一瓶水,也可能在你蹦极吓得流泪的时候一脚把你踹下去,他可能为你和别人打架被打成狗,他有着高度的想象力和执行力
大部分人庸庸碌碌的过着日子,只有少部分人愿意打破自己的舒适区,去尝试一些未知的甚至是危险的事物。
坏,他不意味着疯狂或是失控,更不意味着矫正,放弃原本的社会规则,或者是背离人性。刚好相反,它非常的宽容,对过往的一切能够兼容并蓄。它非常的积极,对未知的一切都能够无所畏惧
吹嘘了这么久的自己,有些东西确实很有代表性。有很多人说我有一种骨子里坏坏的感觉,但我只想说,那是我脑海里追求的生活方式,从表面上体现了出来。但是坏的是表现,不是本质
我不喜欢平凡,喜欢追求自己想要的生活,即使三十年,四十年后,我也不会停下追寻的脚步,因为我知道,人的一生很短暂,你怎么样为自己的一生保留一些永恒的东西?现在的我没有背景,所以一切只能靠自己的双手去创造。
]]>平凡的人因为有了自己的思想而伟大。不随波逐流将会是我一生的追求
首先,它定义了五种样式:
html{}
input[type=text] {}
a:hover {}
#header {}
.sidebar {}
通常只有一个选择器,一个id,或一个class
比 layout 范围小,可以是特定单一领域下特别的设定,通常会将名称加在子 class 作为 prefix
.nav--main_item {}
<ul>
<li> </li>
<li class="active"> </li>
<ul>
.is-active 比.active 来的好读
.sidebar {
.sidebar--left__section {
.sidebar--left__section--header {}
}
}
html 里 class 之间用两个空格比一个空格好阅读
itemClasses () {
let result = []
let score = Math.floor(this.score * 2) / 2
let hasDecimal = score % 1 !== 0
let integer = Math.floor(score)
for (let i = 0; i < integer; i++) {
result.push(CLS_ON)
}
if (hasDecimal) {
result.push(CLS_HELF)
}
while (result.length < STARLENG) {
result.push(CLS_OFF)
}
return result
}
分别获取它们的整数,小数,和无
为了防止内容超过容器,图标遮挡内容的现象
实现原理就是设置一个容器,将该容器的最小大小设置为100%,容器外面再设一个容器,给他一个负的 margin 或者是 padding,将它固定在容器的最下方
可以参考我这篇(文章)[http://jzxer.cn/sticky-footer.html]
可以在 npm 包管理器中下载
- 使用方法就是直接给你需要滚动的列表上创建一个实例,该实例的调用要放在nextTrick()中,因为触屏滚动每次都是需要更新 dom 的
新建一个 express.Router() 实例,给它们分配路由路径,记得加入一个 errno ,判断是否正确获取数据
这个时候就发现 node 是多么的强大,前后端全包了~
指的是底部购物车组件,这个部分比较麻烦的是数据绑定,因为我们需要绑定一个数据流,点击添加商品,判断商品是否大于起送价,否则返回空,按钮不可点击,购物车头部无红色小标签,是则按钮变为绿色,购物logo变成蓝色,出现红色计数标签。
实现的思路是,点击添加会改变shopcart里的数据,双向绑定,这里用到了 $emit 就是将子路由中的数据传递给父组件,和ref的原理很像,父组件再通过监听事件得到子组件的数据。
]]>今天,我想讲讲关于stick-footer布局技巧,它的内容大概就是当你页面大小为100%时,希望底部定位一个 X 按钮啥的,不管文本内容不够,或者是文本内容超过屏幕时,这个按钮位置总在文本的下方
<body>
<div class="wrapper">
content
<div class="push"></div>
</div>
<footer class="footer"></footer>
</body>
html, body {
height: 100%;
margin: 0;
}
.wrapper {
min-height: 100%;
/* Equal to height of footer */
/* But also accounting for potential margin-bottom of last child */
margin-bottom: -50px;
}
.footer,
.push {
height: 50px;
}
<body>
<div class="content">
<div class="content-inside">
content
</div>
</div>
<footer class="footer"></footer>
</body>
html, body {
height: 100%;
margin: 0;
}
.content {
min-height: 100%;
}
.content-inside {
padding: 20px;
padding-bottom: 50px;
}
.footer {
height: 50px;
margin-top: -50px;
}
<body>
<div class="content">
content
</div>
<footer class="footer"></footer>
</body>
.content {
min-height: calc(100vh - 70px);
}
.footer {
height: 50px;
}
calc中的 70px,和50px是假定了content中最后一个元素有个20px的margin bottom,你不必在意这些~
<body>
<div class="content">
content
</div>
<footer class="footer"></footer>
</body>
html {
height: 100%;
}
body {
min-height: 100%;
display: flex;
flex-direction: column;
}
.content {
flex: 1;
}
flexbox版本同样很简单,并且相比前面三种方式,它不需要知道footer的高度,避免了Magic Number的尴尬。
<body>
<div class="content">
content
</div>
<footer class="footer"></footer>
</body>
html {
height: 100%;
}
body {
min-height: 100%;
display: grid;
grid-template-rows: 1fr auto;
}
.footer {
grid-row-start: 2;
grid-row-end: 3;
}
]]>Chrome Canary 或者 Firefox Developer Edition才能看到效果。
我很希望,自己的未来能不一样
我想要的,就是在平凡中不断的改变自己
路上的人,有人嘲笑,有人鼓励
我全都笑纳
好的留在心里
坏的随风飘逝
展现真正的自己,表达的更简单一些
在机会来临时
奋不顾身的抓牢它
不要被眼前的利益所迷惑
放眼更广阔的未来
做好自己
抓住身边一切的美好
当有一天对一切都无所畏惧
那就是
重生
人有时候真的挺纠结,就像我今天看了 《龙飞凤舞》,觉得上流社会的生活有时候即糜烂,又觉得美好
有的人花了一生时间,去挤进那样的生活圈,有的人甘愿过着平凡的生活
殊不知,彼此之间都存在着羡慕与无奈
我也不例外
如果哪天,我能够进入这样的世界
我是否能够保持清醒,不被外界所干扰,任然保持初心?
我也不敢保证,所以我一直在努力
为了不亏欠曾经的自己
我不敢停下脚步
我怕我停下来
就找不到回去的路
我也舍弃了太多
只因为我曾经欠下太多
但我不后悔
明天的路, 我想自己走
即使错了,那也是个经历,我会记在心中
将来成功的那天,回忆,何不是一种财富?
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
正则表达式是烦琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真阅读本教程,加上应用的时候进行一定的参考,掌握正则表达式不是问题。
许多程序设计语言都支持利用正则表达式进行字符串操作。
###
]]>div在html早期版本就支持了,section和article是html5提出的两个语义化标签。如果只是针对一个块内容做样式化,三者并无区别。
作为语义化标签,section 应用的典型场景有文章的章节、标签对话框中的标签页、或者论文中有编号的部分。一般来说,当元素内容明确地出现在文档大纲中时,section 就是适用的。
对于article标签来说,无论从结构上还是内容上来说,article 本身就是独立的、完整的。有个最简单的判断方法是看这段内容脱离了所在的语境,是否还是完整的、独立的,如果是,则应该用article标签。
合理的语义化标签,可以更好的方便seo,也不知道为什么,我现在更喜欢细节的东西
div < section < article ,语义是从无到有,逐渐增强的。div 无任何语义,仅仅用作样式化或者脚本化,对于一段主题性的内容,则就适用 section,而假如这段内容可以脱离上下文,作为完整的独立存在的一段内容,则就适用 article。原则上来说,能使用 article 的时候,也是可以使用 section 的,但是实际上,假如使用 article 更合适,那么就不要使用 section 。
]]>对于一个对界要求很高的人来说,今天有必要研究下各种常见的布局,目前罗列了四种布局,来来来,一起看看
左右两栏采用绝对定位,中间的由两边的margin撑开
```
#main {
margin:0 200px;
background:red;
}
#left{
position:absolute;
top:0;left:0;
width:200px;
background:blue;
height:100%;
}
#right{
position:absolute;
top:0;right:0;
width:200px;
background:green;
height:100%;
}
这种布局缺点是,当缩放到一定大小的时候,会出现重叠现象
### 自身浮动法
> 左栏左浮动,右栏右浮动,中间栏放最后
<body>
<div id="left"></div>
<div id="right"></div>
<div id="main"></div>
</body>
#main {margin:0 200px;background:red;}
#left{float:left;width:200px;background:blue;height:100%;}
#right{float:right;width:200px;background:green;height:100%;}
简单而高效,代码还容易理解,适合初学者
### 圣杯布局
//注意元素次序
//习惯性的CSS reset
body,html{
height:100%;
padding: 0;
margin: 0
}
//父元素body空出左右栏位
body {
padding-left: 100px;
padding-right: 200px;
}
//左边元素更改
.left {
background: red;
width: 100px;
float: left;
margin-left: -100%;
position: relative;
left: -100px;
height: 100%;
}
//中间部分
.main {
background: blue;
width: 100%;
height: 100%;
float: left;
}
//右边元素定义
.right {
background: red;
width: 200px;
height: 100%;
float: left;
margin-left: -200px;
position: relative;
right: -200px;
}
稍微难理解一点,不过这种布局目前我觉得是适配性比其他两种要好的布局方式,缺点是后期维护性不高
### 双飞翼布局
div class=”main”>
css样式就是将body上的左右margin值去掉,加在新增的 div 中
这种布局方式为淘宝 UED 提出,目前最好用的一种布局方式,相比较圣杯布局,去掉了相对布局,代码更简洁
一个人的页面能力怎么样,从他对一个网站的布局如何就可以看出来,我觉得一个网站不但要用户看起来舒服,还要工程师在看到你的代码的时候,觉得布局非常巧妙。
小记:前两天面试,展现项目过程中经理问我轮播图的原理,我一脸懵逼,因为当时有现成的插件,所以我没怎么去研究,当然,我也知道该来的还是要来的…
首先我大概讲一下,传统轮播图的主要部分:
<div id="list" style="left:-200px">
<img src="./img/5.jpg" alt="">
<img src="./img/1.jpg" alt="">
<img src="./img/2.jpg" alt="">
<img src="./img/3.jpg" alt="">
<img src="./img/4.jpg" alt="">
<img src="./img/5.jpg" alt="">
<img src="./img/1.jpg" alt="">
</div>
当是最后一张图或第一张图时,将第一张上一张跳转为最后一张时的宽,最后一张跳转为第一张时的宽if (newList < -1000) {
dot = 1
list.style.left = -200 + 'px'
}
if (newList > -200) {
dot = 5
list.style.left = -1000 + 'px'
}
这要实现的思想有
function showBtn() {
for (var i = 0; i < btns.length; i++) {
if (btns[i].className == 'show-btn') {
btns[i].className = ''
break
}
}
btns[dot-1].className = 'show-btn'
}
//遍历数组,将有该属性设为空
for (var i = 0; i < btns.length; i++) {
btns[i].onclick = function () {
if (this.className == 'showBtn') {
return
}
var myIndex = parseInt(this.getAttribute('index'))
var leng = -200 * (myIndex - dot)
animate(leng)
dot = myIndex
showBtn()
}
}
//遍历数组,将每一个小按钮设了个index属性,这里用到 getAttribute 可以获取除了普通style 或 class 之外的一些属性,获取index值,点击时得到当前的index值,正好和当前的dot值相减,可得跳转的距离
这里要注意的是,当小按钮被重复按的时候,给他一个判断,不然重复点击同一个图标会重复发生相同事件,占内存,耗cpu
就是当用户点击时,有一个慢慢偏移的过程,而不是闪现的动作,我们来看看实现原理
首先,定义参数
var time = 300 //位移总时间
var interval = 10 //位移时间间隔
var speed = leng/(time/interval) //每次位移量,就是一共调用多少次的意思
设置递归函数
if ((speed < 0 && parseInt(list.style.left) > newList) || (speed > 0 && parseInt(list.style.left) < newList)) {
list.style.left = parseInt(list.style.left) + speed + 'px'
setTimeout(go, interval) //递归,调用自身函数
判断是否仍在动画
如果用户一直在点击切换图时,如果电脑配置不好,或是其他一些因素,可能会轮播卡顿,为了防止这一现象,就用一个判断来看上一次动画是否完成,若未完成就不能继续切换,等到这次动画跳转完为止
```
var animated = false //设初值
if(!animated) {
animate(200)
} //如果为false,则继续动画
### 自动播放
首先给个思路,当鼠标移入的时候,自动播放停止,移出的时候开始自动播放
* 我们设两个函数,play() 和 stop()
function play() {
timer = setTimeout(function() {
next.onclick()
play()
},interval)
}
function stop() {
clearTimeout(timer)
}
```
给整个 container 容器添加该鼠标事件
这年头还是不能偷懒啊,说不定当时知道这个人家就把给我要了呢,好气哦…
]]>改天再研究下旋转木马的那种装个13…
前段时间看到腾讯云服务器对学生有优惠,而且很大一坨,就买了一个回来研究,废话不多说,开搞咯~
地方的话就近原则,访问应该会快点
我这里是配了 Windows2012 64位系统,1核1G内存
Linux的系统,听说比较好用,但目前我还没用过,Windows我觉得也还行
进入云服务器控制中心,打开安全组,按需求开放端口
我是开放了全部端口的,你可以随意
进入云服务器之后,打开服务器管理器,[新建角色] => [基于角色和功能的安装] => [从服务器池中选择服务器] => [web服务器应用程序开发,勾选.net4.5 和CGI] => [IIS可承载的web核心] => [确认安装]
中间如果碰到什么问题,仔细看流程,如果还报错,我也帮不了你了
安装完成之后就可以通过ip地址访问到一个有IIS提示的蓝色网站,该项目的默认地址是 C:inetpub/wwwroot 你想更改的话可以直接拿你的html(htm)文件放在该目录下,一定要保证根目录有个html(htm)文件
右键 添加应用程序,将该项目的物理路径填上去就可以了
> cnpm i hexo-cli -g
报错的话就输入
> cnpm i hexo --save
查看安装是否成功
> hexo -v
> hexo init
然后
> cnpm install
到这里你差不多就可以看到效果了,如果你要连接 GitHub,就要往下继续
在根目录打开 vim _config.yml,翻到最下面,改成我这样子的
deploy:
type: git
repo: https://git.coding.net/jzxer/jzxer.git
branch: master
deploy:
type: coding
repo: https://github.com/j710328466/j710328466.github.io.git
branch: master
> npm install hexo-deployer-git --save
创建一篇新文章
$ hexo new "My New Post"
监听
$ hexo server
打包
$ hexo generate
上传
$ hexo deploy
theme: material
将主题改成你喜欢的
每个不同的主题会需要不同的配置,主题配置文件在主题目录下的 _config.yml。有两个比较好的主题推荐给大家。
Yilia 是为 hexo 2.4+ 制作的主题。
崇尚简约优雅,以及极致的性能。
目前Github上Star最高的Hexo主题,支持几种不同的风格。
作者提供了非常完善的配置说明。
原之质,物之渊
就是我现在用的这款,简洁大方,响应式设计。
提供方法和API请求,类似于mutation
mutation 修改 state 只能是同步的
- action 充满了各种异步 api
actions: { increment (context) { context.commit('increment') } } 另一种写法 increment({commit}) { commit('increment') }
]]>store.dispatch(‘increment’)
一直想做一个vue项目 然后呢 我就做了
部分地方不全部根据原版,也有自由发挥的,目前功能模块比较简陋,如果显示不完整,请下载以下api文件并打开
项目地址:github
预览地址:demo
# install dependencies
cnpm i
(可以用cnpm或yarn,更方便快捷,你值得拥有)
# serve with hot reload at localhost:8564
npm run dev
# build for production with minification
npm run build
# build for production and view the bundle analyzer report
npm run build --report
# 网易云API部署 listen localhost:3000
npm run start
(播放页面正在完善中,样式只是大概,待细化…)
(目前子目录只开通歌手列表)
重点来了,这个是我在该项目中花了最多时间的地方,相信很多同学使用axios都碰到过我这个问题,目前我这里使用了三种方法处理该问题,请大家针对自己的项目问题对号入座
跨域访问,简单来说就是 A 网站的 javascript 代码试图访问 B 网站,包括提交内容和获取内容。由于安全原因,跨域访问是被各大浏览器所默认禁止的。
①. 针对本地相同端口服务器之间的跨域
app.all('*', function (req, res, next) {
res.header("Access-Control-Allow-Credentials", true)
res.header("Access-Control-Allow-Origin", "*")
res.header("Access-Control-Allow-Headers", "X-Requested-With")
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS")
res.header("X-Powered-By", ' 3.2.1')
res.header("Content-Type", "application/json;charset=utf-8")
next()
})
然后它就会报错~,具体原因是你同一个端口申请相同端口的东西,不好意思,那不叫跨域…
②. 针对本地不同端口的服务器之间的跨域
就是将上面的头文件放在当前项目申请的服务器的那个api中。
③. 针对本地服务器对域名服务器访问的跨域问题
找到当前项目congfig文件夹下index.js文件,然后在文件中将proxyTable内容改为:
proxyTable: {
'/api': {
target: '[1]',
changeOrigin: true,
pathRewrite: {
'^/api': '/'
}
}
}
就是你当前想访问的api地址,项目中访问的时候就只要用/api做反向代理即可
这是我第一个用vue撸的项目,可能功能有点简陋,很多地方有待提高,不过这次实践让我对组件化的理解有了一定的提升,后期会继续加入其它功能模块的,文中有用词不对的地方,欢迎大家指出,项目有什么bug,也希望大家多多提issue
如果对你有帮助,给个star吧
git config –global user.name “名字”
git config –global user.email “邮箱”
这是你连接的必要部分,就相当于账号的登录密码,有这个你才能对GitHub上的项目进行操作
ssh-keygen -t rsa -C “710328466@qq.com”
进入首页,新建一个repository
填写相应信息
Repository name: 仓库名称
Description(可选): 仓库描述介绍
Public, Private : 仓库权限(公开共享,私有或指定合作者)
Initialize this repository with a README: 添加一个README.md
gitignore: 不需要进行版本管理的仓库类型,对应生成文件.gitignore
license: 证书类型,对应生成文件LICENSE
#
这个步骤以后你的本地项目文件夹下面就会多出个文件夹,该文件夹名即为你github上面的项目名,如图我多出了个yourItem文件夹,我们把本地项目文件夹下的所有文件(除了新多出的那个文件夹不用),其余都复制到那个新多出的文件夹下
git add . (添加所有文件)
git add readme.md
git commit -m “信息”
git push -u origin master 将本地文件上传到git仓库
如果push -u….报错,你就改成git pull –rebase origin master,重新push就可以了
添加到缓存
查看该项目改变的文件
- git status
默认是暂未缓存的改动,这个可以查自己目前版本和上一个版本的改动位置
查看已缓存的改动
查看已缓存与未缓存的所有改动
显示摘要而非整个diff
将条目从缓存区中移除
用于移动或重命名一个文件,目录
git add README git mv README README.md ls
后面加单词,即是创建分支: git branch day1
git branch -d testing
切换分支
创建新分支并切换到该分支下
]]>合并分支
小结,一个优秀的前端leader,我认为应该具备的能力:
重要功能或需求的开发,或提供解决方案,做技术选型
· HTML
理解语义化
· CSS
动态居中动画
Bootstrap 样式类
Preprocessor兼容性
Hack与特征检测
CSS3属性与性能
· js
Name hoisting
Prototype
Closure
Main loop
Promise
Delegation
Cross domain
· Mobile
渐进增强
移动端交互
兼容性问题
· Debug工具
· 方法性能
JSCache
control
性能测试
具备产品思维,需求分析评审,分发开发任务,和产品经理、设计师以及后端等沟通、协调
开发需求的跟进,代码review,代码合并与发布等,精通svn或git是必须的,记住是精通,你新招的新手同事很可能不知道什么时候把别人写好的东西弄没了,你至少要知道如何找回吧
前端开发规范,开发文档、开发标准的建立和实施,关键是实施
新员工的培训、辅导
前端的技术更新太快了,一个优秀的前端leader还要引导团队了解和学习新的技术,为以后做技术储备
]]>这很重要,技术男大多很宅,要想做一个好的leader,就要多和不同的人特别是多和沟通方面强势的人打交道。
要不,等你做到leader的位置,即便是站在前端的角度来看有些极度不合理的需求,你也可能镇不住,天天接这样的需求,怨言就犹如漫天飞雪,受不了的人会选择离开,如果你的团队离职率高的话。。。Boss会觉得你是合适的吗?
]]>世间真是无奇不有….
先确定好和弦进行,比如 1-6-4-5
再找到该调中每个和弦的五级和弦,5-3-1-2
把两个和弦的音归拢 12357 - 56713 - 34561 - 45672
这样每个和弦就可以用那5个音了。现在先练习一下,在C大调中的 C-Am-F-G中用每个和弦对应的那5个音来进行第一步的练习。(对应的5个音可以按照默认的那个顺序也可以打乱练习,重点听这些音对和弦产生的效果)
重点音与经过音。
在上个练习后大家应该找到每个和弦拥有的那5个音中哪些对该和弦的性质有比较明显的效果,哪些音对该和弦有特殊的效果,哪些音对该和弦没有多大用处比较平淡。(每个人的感觉不同,练习时候的心态和练习内容不同所以最终对音乐的感受也不一样,自然最后确定的音附也不一样,相信自己的感觉,这样坚持才能发展自己的特点)
将找到的对每个和弦有用的音作为该和弦的重点,没用的作为经过音,同时不包含在每个和弦的那5个音中剩余的那两个音(46-24-27-13)刚开始练习阶段不要弹,以后熟练了再作为经过音加入到练习中。
(这个练习中,速度一定要慢,60-100左右的速度,每个和弦可以延长到2小结,重点音用4分或2分音符,经过音用16分或8分音符,每次弹奏的旋律多重复几次熟记于心)
这次就是节奏的训练,同样的旋律试着把每个音的时值改变,加入附点音,先现音,休止符等。并随着水平的进步加快速度。
从第一阶段到这个阶段差不多要练3-6个月的时间,大家先好好练习吧
(这个练习中,速度一定要慢,60-100左右的速度,每个和弦可以延长到2小结,重点音用4分或2分音符,经过音用16分或8分音符,每次弹奏的旋律多重复几次熟记于心)
建议大家先一个和弦一个和弦的练,把每个和弦和他对应的音练熟再换下一个和弦,然后再将两个和弦连起来练,然后再练下一个,再下一个,再连起来。
第一阶段的重点就是一定要在和弦中充分的把每一个应该弹的音在大脑里反映清楚并且弹好记熟。
第二阶段重点就要特别留意每个音符和对应的每个和弦和感觉(首先和弦的分解音肯定是比较稳定的感觉,剩下的两个音才是关键他们分别是和弦根音的7度和9度,这两个音和不同的和弦内音组成的旋律感觉最有特色)
另外刚开始一定注意,慢速弹,一定把要弹的音先在脑子过一遍在反映到琴上,熟练以后才能得心应手,还要注意,每个和弦有5个可以选择的音符,还剩下的两个音(相对于和弦的根音是4度和6度)不是不能用,大家可以试试,这两个音给人的感觉并不是很舒服,最好在完成这两个阶段以后在加入进来练习。
npm install hexo-meterial
该方法会将主题下载到node_modules文件夹下,找到该文件后,将文件名改为material
找到主题文件下的_config.template.yml 改成 _config.yml
npm update hexo-material
让后将文件复制到 Material 主题文件中
用于设置主题 UI 与 UX。
用来控制 Material 主题中自带的多种 js 特性。
entry_excerpt: 首页文章输出摘要的字符长度。默认为 80。
用于设置站点背景。
用于设置 Paradox 侧边栏用户下拉菜单,默认为空。
dropdown:
page:
link: "mailto: someone@example.com"
icon: email
divider: 设置成 true 后会在归档按钮底部增加一条分割线。
hexo new <title>
手动创建也行
layout 布局 post
title 标题 文件名
date 建立日期 文件建立日期
updated 更新日期 文件更新日期
tags 标签(不适用于分页)
categories 分类(不适用于分页)
permalink 覆盖文章网址
thumbnail 缩略图地址
toc 显示 TOC 按钮 true
comment 显示评论 true
notag 不生成标签按钮 false
top 置顶 false
新建一个 about 页面:
hexo new page "about"
在 hexo 目录下的 source 文件夹内创建一个名为 links(只是建议,可根据自己喜好修改)的文件夹。
然后在文件内创建一个名为 index.md 的 Markdown 文件。
在 index.md 文件内写入如下内容即可。
---
title: links
date:
layout: links
---
title 可修改,layout 不可修改。
同样在在 hexo 目录下的 source 文件夹内创建一个名为 _data(禁止改名)的文件夹。
然后在文件内创建一个名为 links.yml 的文件。
单个友情链接的格式为:
Name:
link: http://example.com
avatar: http://example.com/avatar.png
descr: "这是一个描述"
在 hexo 目录下的 source 文件夹内创建一个名为 gallery(只是建议,可根据自己喜好修改)的文件夹。
然后在文件内创建一个名为 index.md 的 Markdown 文件。
在 index.md 文件内写入如下内容即可。
---
title: gallery
date:
layout: gallery
---
同样在在 hexo 目录下的 source 文件夹内创建一个名为 _data(禁止改名)的文件夹。
然后在文件内创建一个名为 gallery.yml 的文件。
单个图片的格式为:
Name:
full_link: http://example.com/full-image.png
thumb_link: http://example.com/thumb-image.png
descr: "这是一个描述"
在 hexo 目录下的 source 文件夹内创建一个名为 tags(只是建议,可根据自己喜好修改)的文件夹。
然后在文件内创建一个名为 index.md 的 Markdown 文件。
在 index.md 文件内写入如下内容即可。
---
title: tags
date:
layout: tags
---
如果某篇文章不想显示在站点中,只需要在 front-matter 中加入
layout: private
]]>