我写的一言轮播脚本(2018 更新)
看到很多 ACG 博客都用上了一言,但我觉得在同一个页面只显示一条内容未免有些单调,所以想让它定时轮播,而且采用较好的切换效果。
我后来在 WNJXYK 上看到了我想要的轮播效果,但那是基于 jQuery 制作的。
因为对于我这种讨厌为一个小功能放上大型前端库的人来说不能忍,所以我用原生 JS 写了一个。
2018 年,为了获得更佳的性能和稳定性,我把这个脚本进行了重写,从 JavaScript 动画更改为 CSS 渐变,并改掉了一些不科学的地方。
下面是实际效果:
如果你在使用 RSS 阅读器,请访问原文查看效果。
HTML 部分
<span id="hitokoto"></span>
JavaScript 部分
(function () {
var server = "https://api.lwl12.com/hitokoto/v1";
var target = document.getElementById("hitokoto");
var fadeDur = 1;
var waitDur = 10;
var errorMsg = "加载出现了问题!";
/* -=-=-=-=-=-=-=-=-=-=-=- 你的配置部分结束 -=-=-=-=-=-=-=-=-=-=-=- */
var first = true;
var present = "";
target.style.opacity = 0;
target.style.transition = "opacity " + fadeDur + "s";
function loadData() {
var connect = new XMLHttpRequest();
connect.open("GET", server, true);
connect.onload = function () {
if (connect.status >= 200 && connect.status < 400) {
present = connect.responseText;
if (first) {
first = false;
target.textContent = present;
fadeIn();
} else {
fadeOut();
}
} else {
target.style.opacity = 1;
target.textContent = errorMsg;
setTimeout(loadData, (fadeDur + waitDur) * 1000);
}
};
connect.onerror = function () {
target.textContent = errorMsg;
setTimeout(loadData, (fadeDur + waitDur) * 1000);
};
connect.send();
}
function fadeOut() {
target.style.opacity = 0;
setTimeout(function () {
target.textContent = present;
fadeIn();
}, fadeDur * 1000);
}
function fadeIn() {
target.style.opacity = 1;
setTimeout(loadData, (fadeDur + waitDur) * 1000);
}
loadData();
})();