fixed 弹幕修复
This commit is contained in:
1 parent
eddfac9a7b
commit
dd642782b4
8 files changed
+417
-135
No files matched your search
@@ -79,81 +79,9 @@ if (typeof lazyLoadInit === 'function') {
|
||||
console.warn('lazyLoadInit is not defined');
|
||||
}
|
||||
|
||||
async function loadBarrager() {
|
||||
try {
|
||||
const commentsData = await initArtalkAndGetComments();
|
||||
if (commentsData) {
|
||||
await createBarragerFromArtalk(commentsData);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('加载弹幕时发生错误:', error);
|
||||
}
|
||||
}
|
||||
|
||||
// 异步初始化 Artalk 并获取评论数据
|
||||
function initArtalkAndGetComments() {
|
||||
return new Promise((resolve, reject) => {
|
||||
Artalk.use((ctx) => {
|
||||
ctx.on('list-loaded', () => {
|
||||
console.log('评论列表加载完毕');
|
||||
const commentsData = ctx.getComments();
|
||||
if (commentsData) {
|
||||
resolve(commentsData);
|
||||
// console.log(commentsData);
|
||||
} else {
|
||||
reject('获取评论数据失败');
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
// 异步初始化 Artalk 并获取评论数据 (Moved to barrage.js)
|
||||
|
||||
// 从 Artalk 评论数据生成弹幕
|
||||
async function createBarragerFromArtalk(commentsData) {
|
||||
// 确保弹幕容器存在
|
||||
const barragerContainer = document.querySelector('.barrager');
|
||||
if (!barragerContainer) {
|
||||
console.warn('未找到弹幕容器 .barrager');
|
||||
return;
|
||||
}
|
||||
|
||||
// 1. 过滤和处理评论数据 (只保留昵称和内容)
|
||||
const barrageList = commentsData.map(comment => {
|
||||
// 简单清理 HTML 标签,保留纯文本 (可选)
|
||||
const contentText = comment.content.replace(/<[^>]+>/g, "").substring(0, 50); // 限制长度
|
||||
return {
|
||||
info: contentText, // 弹幕内容
|
||||
href: '#', // 链接 (可选,点击弹幕跳转)
|
||||
speed: 10 + Math.random() * 5, // 随机速度
|
||||
color: '#fff', // 字体颜色 (白色)
|
||||
old_ie_color: '#000000', // 旧版 IE 颜色
|
||||
};
|
||||
}).filter(item => item.info.trim() !== ""); // 过滤空评论
|
||||
|
||||
// 如果没有评论,则不显示弹幕
|
||||
if (barrageList.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 2. 初始化 jQuery.barrager (如果尚未初始化)
|
||||
// 注意:这里假设 jquery.barrager.js 已经加载并挂载到 jQuery 对象上
|
||||
// 由于 barrager 插件通常是直接操作 DOM,我们可能需要循环添加
|
||||
|
||||
// 简单的循环发送弹幕示例 (每隔一段时间发送一条)
|
||||
let index = 0;
|
||||
const sendBarrage = () => {
|
||||
if (index >= barrageList.length) {
|
||||
index = 0; // 循环播放
|
||||
}
|
||||
const item = barrageList[index];
|
||||
// 使用 jQuery 选择器调用 barrager
|
||||
$('body').barrager(item);
|
||||
index++;
|
||||
};
|
||||
|
||||
// 每 2 秒发送一条弹幕
|
||||
setInterval(sendBarrage, 2000);
|
||||
}
|
||||
|
||||
|
||||
async function fetchHitokoto() {
|
||||
@@ -225,11 +153,11 @@ function initCodeCopy() {
|
||||
});
|
||||
}
|
||||
|
||||
// 页面加载完成后初始化
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
initCodeCopy();
|
||||
initDescriptionHitokoto();
|
||||
});
|
||||
// 页面加载完成后初始化 (Merged into main DOMContentLoaded listener)
|
||||
// document.addEventListener('DOMContentLoaded', function() {
|
||||
// initCodeCopy();
|
||||
// initDescriptionHitokoto();
|
||||
// });
|
||||
|
||||
// 初始化个人描述一言切换
|
||||
function initDescriptionHitokoto() {
|
||||
@@ -367,11 +295,15 @@ function initFloatingTools() {
|
||||
document.addEventListener('pjax:complete', function() {
|
||||
updateFloatingToolsVisibility();
|
||||
hideSelectionPopup();
|
||||
// PJAX 跳转后重新加载弹幕 (Moved to barrage.js)
|
||||
});
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
initFloatingTools();
|
||||
initSelectionPopup();
|
||||
initCodeCopy();
|
||||
initDescriptionHitokoto();
|
||||
// 页面首次加载时启动弹幕 (Moved to barrage.js)
|
||||
});
|
||||
|
||||
// Selection Popup Logic
|
||||
|
||||
Reference in new issue
Block a user