hookehuyr

feat(弹幕组件): 优化顺序弹幕发送逻辑以支持多轨道同时填充

重构顺序弹幕发送逻辑,改为根据可用轨道数量同时填充弹幕
移除弹幕点击时的Toast提示以简化交互
......@@ -390,14 +390,48 @@ const initFullScreenDanmus = () => {
// 当前弹幕索引,用于顺序显示
let currentDanmuIndex = 0
// 发送顺序弹幕
// 发送顺序弹幕 - 根据可用轨道数量同时填充弹幕
const sendSequentialDanmu = () => {
// 按顺序获取弹幕数据
const danmuData = familyDanmus.value[currentDanmuIndex % familyDanmus.value.length]
sendDanmu(danmuData)
// 获取所有可用的轨道
const availableTracks = tracks.filter(track => checkTrackSpace(track))
if (availableTracks.length === 0) {
return // 没有可用轨道,直接返回
}
// 为每个可用轨道同时发送一个弹幕
availableTracks.forEach(track => {
// 按顺序获取弹幕数据
const danmuData = familyDanmus.value[currentDanmuIndex % familyDanmus.value.length]
// 发送弹幕到指定轨道
sendDanmuToTrack(danmuData, track)
// 更新索引,循环使用
currentDanmuIndex++
})
}
// 发送弹幕到指定轨道
const sendDanmuToTrack = (danmuData, track) => {
const danmu = {
id: `danmu-${++danmuId.value}-${Date.now()}-${Math.random()}`,
data: danmuData,
x: 750, // 从右侧开始
duration: 0,
isMoving: false,
opacity: 1,
startTime: Date.now()
}
// 添加到轨道
track.danmus.push(danmu)
track.lastDanmuTime = Date.now()
// 更新索引,循环使用
currentDanmuIndex++
// 启动动画
nextTick(() => {
startDanmuAnimation(danmu, track)
})
}
// 自动发送弹幕
......@@ -472,11 +506,11 @@ const clearDanmu = () => {
const handleDanmuClick = (danmu) => {
emit('danmu-click', danmu.data)
Taro.showToast({
title: `点击了${danmu.data.familyName}`,
icon: 'none',
duration: 2000
})
// Taro.showToast({
// title: `点击了${danmu.data.familyName}`,
// icon: 'none',
// duration: 2000
// })
}
// 暴露方法给父组件
......