我写的一言轮播脚本(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();
})();