217 lines
5.4 KiB
JavaScript
217 lines
5.4 KiB
JavaScript
import Barrage from '@/components/barrage/barrage.vue';
|
|
import BarrageControlBar from '@/components/barrage/ControlBar.nvue';
|
|
import BarrageInput from '@/components/barrage/BarrageInput.nvue';
|
|
import BarrageSettingLayer from '@/components/barrage/SettingLayer.nvue';
|
|
|
|
const colors = ['#FFFFFF','#999999', '#E6151E', '#9D22B1', '#3D50B6', '#03A9F4', '#009688', '#259B24', '#8BC34A'];
|
|
|
|
const barrage = {
|
|
data () {
|
|
return {
|
|
barrageOpen: false, // 是否开启弹幕
|
|
barrageList: [] ,// 弹幕数据列表
|
|
pickColorMode: false, // 是否展示弹幕颜色设置视图
|
|
settingBarrageMode: false, // 是否展示弹幕设置浮层
|
|
activeColorIndex: 0, // 当前激活弹幕颜色序号
|
|
barrageColors: colors, // 颜色列表
|
|
showFixedFooter: false, //是否展示吸底输入框组件、颜色设置组件
|
|
barrageInputValue: '', // 输入框value
|
|
barrageOpacity: 100 ,// 弹幕不透明度
|
|
barrageFontSize: 28, // 弹幕字号
|
|
barrageSpeed: 10000, // 弹幕速度
|
|
barrageArea: 100 ,// 弹幕显示区域
|
|
barrageTimer: null ,// 发送弹幕倒计时
|
|
barrageSendDisabled: false, // 禁止发送弹幕
|
|
barrageSendDisabledTime: 5, // 禁止发送时间
|
|
}
|
|
},
|
|
computed: {
|
|
barrageColor () {
|
|
return `0x${colors[this.activeColorIndex].substr(1).toLocaleLowerCase()}`
|
|
}
|
|
},
|
|
components: {
|
|
Barrage,
|
|
BarrageControlBar,
|
|
BarrageInput,
|
|
BarrageSettingLayer
|
|
},
|
|
methods: {
|
|
initBarrage () {
|
|
try {
|
|
this.$refs.CCView.barrageInit();
|
|
} catch (e) {
|
|
console.log(e);
|
|
}
|
|
},
|
|
setBarrageVideoId (id) {
|
|
try {
|
|
this.$refs.CCView.setBarrageVideoId(id);
|
|
} catch (e) {
|
|
console.log(e);
|
|
}
|
|
},
|
|
postBarrageTime (time) {
|
|
// time 秒
|
|
// console.log('postBarrageTime params', time);
|
|
try {
|
|
this.$refs.CCView.associationWithTimeDidChange(time);
|
|
} catch (e) {
|
|
console.log(e);
|
|
}
|
|
},
|
|
sendBarrage (params) {
|
|
try {
|
|
this.$refs.CCView.sendBarrageWithBarrage(params);
|
|
} catch (e) {
|
|
console.log(e);
|
|
}
|
|
},
|
|
handleBarrageSend (content) {
|
|
let params = {
|
|
content,
|
|
fc: this.barrageColor, // 颜色
|
|
pt: this.currentTime * 1000 // 弹幕时间点 毫秒
|
|
}
|
|
this.barrageInputValue = content;
|
|
console.log(params);
|
|
this.handleToggleFixedFooter();
|
|
if (this.barrageInputValue == '') {
|
|
uni.showToast({
|
|
icon: "none",
|
|
title: '请输入内容'
|
|
})
|
|
return;
|
|
}
|
|
// 发送
|
|
this.sendBarrage(params);
|
|
},
|
|
barrageSendCountDown () {
|
|
if (this.barrageSendDisabledTime === 0) {
|
|
this.barrageSendDisabled = false;
|
|
this.barrageSendDisabledTime = 5;
|
|
this.barrageTimer = null;
|
|
return;
|
|
}
|
|
this.barrageSendDisabled = true;
|
|
this.barrageTimer = setTimeout(() => {
|
|
this.barrageSendDisabledTime--;
|
|
this.barrageSendCountDown()
|
|
}, 1000)
|
|
},
|
|
onBarrageError (e) {
|
|
console.log('onBarrageError:', e);
|
|
},
|
|
onBarrageList (e) {
|
|
// console.log('onBarrageList:', e);
|
|
try {
|
|
this.barrageList = e.detail && e.detail.barrageList;
|
|
} catch (e) {
|
|
console.log(e)
|
|
}
|
|
},
|
|
onSendBarrageSuccess (e) {
|
|
console.log('onSendBarrageSuccess:', e);
|
|
uni.showToast({
|
|
title: '发送成功',
|
|
icon: 'none'
|
|
})
|
|
this.$refs.Barrage.add({
|
|
content: this.barrageInputValue,
|
|
fc: this.barrageColor,
|
|
pt: this.currentTime * 1000,
|
|
self: true
|
|
});
|
|
// 清空输入框内容
|
|
this.barrageInputValue = '';
|
|
this.$refs.barrageInput.cleanTextAction();
|
|
// 开启输入倒计时
|
|
this.barrageSendCountDown();
|
|
},
|
|
onSendBarrageError (e) {
|
|
console.log('onSendBarrageError:', e);
|
|
uni.showToast({
|
|
title: '发送失败',
|
|
icon: 'none'
|
|
})
|
|
},
|
|
handleToggleBarrageOpen () {
|
|
this.barrageOpen = !this.barrageOpen;
|
|
},
|
|
handleColorPick (index) {
|
|
this.activeColorIndex = index;
|
|
},
|
|
handleToggleFixedFooter () {
|
|
if (this.barrageSendDisabled) return;
|
|
// this.showFixedFooter = !this.showFixedFooter
|
|
if (this.settingBarrageMode) this.settingBarrageMode = false;
|
|
if (!this.showFixedFooter) {
|
|
this.showFixedFooter = true;
|
|
this.toggleKeyBoard('focus');
|
|
} else {
|
|
this.toggleKeyBoard('blur', () => {
|
|
this.showFixedFooter = false;
|
|
});
|
|
}
|
|
},
|
|
toggleKeyBoard (action, callback) {
|
|
this.$nextTick(() => {
|
|
if (action === 'focus') {
|
|
setTimeout(() => {
|
|
this.$refs.barrageInput.focusAction();
|
|
}, 300)
|
|
}
|
|
if (action === 'blur') {
|
|
this.$refs.barrageInput.blurAction();
|
|
}
|
|
setTimeout(() => {
|
|
if (callback) {
|
|
callback();
|
|
}
|
|
}, 300)
|
|
})
|
|
},
|
|
togglePickColorMode () {
|
|
this.pickColorMode = !this.pickColorMode;
|
|
this.$nextTick(() => {
|
|
if (this.pickColorMode)
|
|
this.$refs.barrageInput.blurAction();
|
|
else {
|
|
this.$refs.barrageInput.focusAction();
|
|
}
|
|
})
|
|
},
|
|
handleToggleBarrageSetting () {
|
|
this.settingBarrageMode = !this.settingBarrageMode
|
|
this.isControlBarShow = !this.settingBarrageMode
|
|
if (this.showFixedFooter) this.showFixedFooter = false;
|
|
this.toggleKeyBoard();
|
|
},
|
|
handleFocus () {
|
|
this.pickColorMode = false;
|
|
},
|
|
handleBlur () {
|
|
// ...
|
|
},
|
|
handleSetBarrageOpacity (value) {
|
|
this.barrageOpacity = value;
|
|
},
|
|
handleSetBarrageFontSize (value) {
|
|
this.barrageFontSize = value;
|
|
},
|
|
handleSetBarrageSpeed (value) {
|
|
this.barrageSpeed = value;
|
|
},
|
|
handleSetBarrageArea (value) {
|
|
this.barrageArea = value;
|
|
},
|
|
resetBarrageList () {
|
|
this.barrageList = [];
|
|
if (this.$refs.barrage) {
|
|
this.$refs.barrage.clean();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
export default barrage; |