hexoトピックにアルバムを追加する機能
6557 ワード
ブログの移行先http://lwzhang.github.io.
基本的にすべてのピクチャはどこに置くか、 はどのように大量にピクチャー はあり得ません等 良い解決策を見つける必要があります
注意:このブログは
新規ページ
上記のコマンドを実行すると、
アルバムのスタイルはこのテーマの作者のアルバムのスタイルを使って、もしみんなが他のテーマを使うならば、スタイルは自分で実現することができます.
画像の位置
画像は
画像の取得
原生
この
このうち
もし皆さんが私と同じテーマを使っていたら、
そうでなければ、みんなが使っているテーマに何か制限があるか見てみましょう.
静的ファイルの生成
テーマのプロファイル
最後に
アルバム機能が完成しました.
私のブログのアルバム機能を見てみましょう.http://lwzhang.github.io/photo/
基本的にすべての
hexo
テーマのデフォルトはアルバム機能を実現していないが、一方でアルバム機能の需要は少ない.結局、hexo
は主にブログを書くために使われている.一方、アルバム機能を実現するのは面倒です.例えば、source
フォルダに置くには、静的ファイルに解析する必要があります.ピクチャが多ければ解析が非常に遅くなります.url
(ファイル名)を取得して、ピクチャーはそんなに多くて、1つ1つの手動入力ピクチャーurl
注意:このブログは
yilia
テーマを使用しています.このテーマの作者littenはアルバム機能を実現していますが、彼はinstagram
の画像を同期しています.私は異なる方法でアルバム機能を実現します.新規ページ
hexo new page "photo"
上記のコマンドを実行すると、
source
フォルダにphoto
フォルダが生成され、photo
フォルダのindex.md
ファイルが開きます.変更内容は以下の通りです. title:
noDate: 'true'
---
<link type="text/css" href="/fancybox/jquery.fancybox.css" rel="stylesheet">
<div class="instagram"><section class="archives album"><ul class="img-box-ul"></ul></section></div>
アルバムのスタイルはこのテーマの作者のアルバムのスタイルを使って、もしみんなが他のテーマを使うならば、スタイルは自分で実現することができます.
画像の位置
画像は
source
ファイルに置くことができません.静的ファイルにコンパイルする必要があるので、とても遅いですが、どこに置けばいいですか.一般的には、ブログをgithub
にバックアップし、異なるパソコンでブログを書くことができます.では、アルバムをgithub
に一緒にアップロードすることもできます.だから、ブログのルートディレクトリの下に画像を置くフォルダphotos
を建てて、これでもっと多くの画像をアップロードすることができます.画像の取得
原生
js
はファイルをうまく処理できないので、js
では画像のファイル名を取得できません.js
ではファイルの処理はできませんが、nodejs
でいいでしょう.source\photo
フォルダにtool.js
ファイルを新規作成します.内容は次のとおりです. "use strict";
const fs = require("fs");
const path = "../../photos";
fs.readdir(path, function (err, files) {
if (err) {
return;
}
let arr = [];
(function iterator(index) {
if (index == files.length) {
fs.writeFile("output.json", JSON.stringify(arr, null, "\t"));
return;
}
fs.stat(path + "/" + files[index], function (err, stats) {
if (err) {
return;
}
if (stats.isFile()) {
arr.push(files[index]);
}
iterator(index + 1);
})
}(0));
});
tool.js
の役割は、すべてのピクチャ名をjson
ファイルに格納することです.node tool.js
を実行すると、source\photo
の下にoutput.json
ファイルが作成されます.新しい画像を追加するたびに、node tool.js
を実行します.この
json
ファイルがあれば、js
を使用してhtml
コードを生成します.html
コードの生成yourBlog\themes\yilia\source\js
(yourBlog
はあなたのブログのルートディレクトリで、yilia
をあなたの使用するトピックに置き換えます)フォルダの下にphoto.js
のフォルダを新規作成します.どうしてここに建てられたのですか.コンパイル後はpublic\js
フォルダに表示されるので、ブログで使用しているjs
はすべてここにあります.photo.js
コードは次のとおりです. define([], function () {
return {
page: 1,
offset: 20,
init: function () {
var that = this;
$.getJSON("/photo/output.json", function (data) {
that.render(that.page, data);
that.scroll(data);
});
},
render: function (page, data) {
var begin = (page - 1) * this.offset;
var end = page * this.offset;
if (begin >= data.length) return;
var html, li = "";
for (var i = begin; i < end && i < data.length; i++) {
li += '<li><div class="img-box">' +
'<a class="img-bg" rel="example_group" href="https://github.com/lwzhang/blog/blob/master/photos/' + data[i] + '?raw=true"></a>' +
'<img lazy-src="https://github.com/lwzhang/blog/blob/master/photos/' + data[i] + '?raw=true" />' +
'</li>';
}
$(".img-box-ul").append(li);
$(".img-box-ul").lazyload();
$("a[rel=example_group]").fancybox();
},
scroll: function (data) {
var that = this;
$(window).scroll(function() {
var windowPageYOffset = window.pageYOffset;
var windowPageYOffsetAddHeight = windowPageYOffset + window.innerHeight;
var sensitivity = 0;
var offsetTop = $(".instagram").offset().top + $(".instagram").height();
if (offsetTop >= windowPageYOffset && offsetTop < windowPageYOffsetAddHeight + sensitivity) {
that.render(++that.page, data);
}
})
}
}
})
このうち
https://github.com/lwzhang/blog/blob/master/photos/' + data[i] + '?raw=true
は、github
にアップロードされたピクチャリンクである.すべての画像を一度にページに挿入することはできないので、ページ分け機能をして、一度に20枚の画像をロードしました.photo.js
を導入する最も直接的な方法は、index.md
ファイルに導入することです. title:
noDate: 'true'
---
<link type="text/css" href="/fancybox/jquery.fancybox.css" rel="stylesheet">
<div class="instagram"><section class="archives album"><ul class="img-box-ul"></ul></section></div>
<script src="/js/photo.js"></script>
もし皆さんが私と同じテーマを使っていたら、
yourBlog\themes\yilia\source\js\main.js
ファイルの末尾に次のコードを追加します. if($(".instagram").length) {
require(['/js/photo.js', '/fancybox/jquery.fancybox.js', '/js/jquery.lazyload.js'], function(obj) {
obj.init();
});
}
そうでなければ、みんなが使っているテーマに何か制限があるか見てみましょう.
静的ファイルの生成
テーマのプロファイル
_config.yml
のmenu
の下にアルバムのメニューを追加することを忘れないでください. menu:
: /
: /archives
: /tags/
: photo
最後に
hexo g
を実行して静的ファイルを生成します.github
のアルバム機能をローカルで表示またはアップロードすることができます.アルバム機能が完成しました.
私のブログのアルバム機能を見てみましょう.http://lwzhang.github.io/photo/