| 
					
				 | 
			
			
				@@ -29,13 +29,24 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			:picture-in-picture-mode="[]" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			:show-background-playback-button="false" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			:src="videoUrl" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			:danmu-list="danmuList"  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			<!-- :danmu-list="danmuList" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			enable-danmu 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			danmu-btn> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			danmu-btn --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				<template v-show="showDanmu==1"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					<text v-for="(item, index) in activeDanmus" :key="item.id" class="danmu-item danmuMove"  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						:style="{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						  top: item.top + 'px', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						  ...item.style, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						  'animation-duration': '8s' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						 }" @animationend="animationend(item,index)"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						{{ item.text }} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					</text> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				</template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				<cover-view class="video-danmu-btnbox" :style="{display: isfull&&crtShow&&isLogin&&isAddKf==1 ? 'block':'none'}"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				<cover-image class="video-danmu-image" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				 src="https://cos.his.cdwjyyh.com/fs/20250418/beaf9df1a6204b8babc3e28d9b563c62.png" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				 @click="openDanmu(1)"></cover-image> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					<cover-image class="video-danmu-image" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					 src="https://cos.his.cdwjyyh.com/fs/20250418/beaf9df1a6204b8babc3e28d9b563c62.png" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					 @click="openDanmu(1)"></cover-image> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				</cover-view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			</video> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		</view> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -103,7 +114,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		<!-- 线路 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		<view class="video-line" @click="openPop" v-if="isLogin&&isAddKf==1"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			<image :src="baseUrl+'/images/changePlayer-icon.png'"></image> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			<text>线路{{lineIndex + 1 | numberToChinese}}</text> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			<text>线路{{numberToChinese(lineIndex + 1)}}</text> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		</view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		<!-- 线路弹窗 --> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		<uni-popup ref="popup" type="bottom"  class="full-width-popup"> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -116,7 +127,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				<view class="popupbox-content"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					<view :class="lineIndex == index ? 'line-item line-active': 'line-item'" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						v-for="(it,index) in lineList" :key="index" @click="handleLine(index)"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						线路{{index + 1 | numberToChinese}}</view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						线路{{numberToChinese(lineIndex + 1)}}</view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				</view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			</view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		</uni-popup> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -129,6 +140,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		<uni-popup ref="danmuPopup" type="bottom" style="z-index: 999;" @change="changeShowPopup"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			<view class="danmuPopup" :style="{marginLeft:isfull ? statusBarHeight+'px': 0,marginBottom: danmuboxHeight+'px'}"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				<view class="danmuPopup-head border-line"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					<image class="danmu-icon" :src="showDanmu==0?'/static/images/danmu-off.png':'/static/images/danmu-on.png'" mode="heightFix" @click="switchDanmu()"></image> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					<u-input  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					class="danmuPopup-input"  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					placeholder="发个弹幕吧~"  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -139,7 +151,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					:autoBlur="true"  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					maxlength="140"  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					clearable  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					v-model="danmuIput"></u-input> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					v-model.trim="danmuIput"></u-input> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					<button class="danmuPopup-send"  :disabled="danmubtnLoading"  @click="sendDanmu">发送</button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				</view> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			</view> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -334,19 +346,21 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				danmuboxHeight: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				user: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				crtShow: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				isCheckRealUrl: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				isCheckRealUrl: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				activeDanmus:[], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				flagTime: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				danmuItemStyle:{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					color: '#ffffff', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					fontSize: '16px', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					border: 'solid 1px #ffffff', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					borderRadius: '5px', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					padding: '2px 2px', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					backgroundColor: 'rgba(255, 255, 255, 0.1)' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				showDanmu: 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				ctx: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		filters: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			numberToChinese(number) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (number) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					const chineseNumber = ['一', '二', '三', '四', '五', '六', '七', '八', '九']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					return chineseNumber[number - 1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					return '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		computed: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			isAnswer() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				return (item, name) => { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -372,19 +386,9 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// 	this.loginByMp() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			var that=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.videoId=769; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.qwUserId=2110; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.corpId='ww5a88c4f879f204c5'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.linkType=0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.urlOption.videoId=769; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.urlOption.courseId=79; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.urlOption.companyId=170; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.urlOption.companyUserId=3972; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.urlOption.qwUserId=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.urlOption.corpId='ww5a88c4f879f204c5'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.urlOption.qwExternalId=6213064; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.urlOption.qwUserId=2110; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			// this.urlOption.linkType=0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (this.videoId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.getH5CourseByVideo() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.sortLink = this.urlOption.link || '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.getMenuButton() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// #ifndef H5 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -395,6 +399,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				clearInterval(this.pingpangTimes) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				this.socket = null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.initTracks() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		onShow() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.tipsOpen = false 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -406,9 +411,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				this.user = {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (this.videoId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.getH5CourseByVideo() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if(this.sortLink){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				this.getLink() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} else { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -468,6 +470,14 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			this.clearIntegral() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			numberToChinese(number) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (number) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					const chineseNumber = ['一', '二', '三', '四', '五', '六', '七', '八', '九']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return chineseNumber[number - 1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return '' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			keyboardHeightChange(res) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				// #ifndef H5 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				console.log("this.danmuboxHeight",this.danmuboxHeight) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -496,6 +506,10 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					this.playTime = currentTime 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (Math.floor(e.detail.currentTime) != this.flagTime) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.flagTime = Math.floor(e.detail.currentTime) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.checkDanmu() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			changeTime(that,e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				that.playDurationSeek = 0 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -529,6 +543,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			fullscreenchange(event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				this.isfull = event.detail.fullScreen 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.initTracks() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			controlstoggle(event) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				this.crtShow =  event.detail.show 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1134,7 +1149,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// 发送弹幕 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			sendDanmu() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if(this.danmuIput==''||this.danmuIput.trim()=='') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if(this.danmuIput=='') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					uni.showToast({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						title: '弹幕不能为空', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						icon: 'none' 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1152,6 +1167,16 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							text: item.content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							time: item.timePoint ? Number(item.timePoint) : this.playTime, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							color: "#FFFFFF", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							mode: item.mode|| "scroll", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							top: null, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							style: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								color: item.isColor==1 ? item.color || this.danmuItemStyle.color : this.danmuItemStyle.color,//是否彩色1是0否 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								fontSize: item.fontSize || this.danmuItemStyle.fontSize,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								padding: this.danmuItemStyle.padding, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								border:this.user.userId ==item.userId ? item.color ? `solid 1px ${item.color}`: this.danmuItemStyle.border : 'none', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								borderRadius: this.user.userId==item.userId ? this.danmuItemStyle.borderRadius : 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								backgroundColor: this.user.userId==item.userId ? this.danmuItemStyle.backgroundColor : 'transparent' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						})) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						this.danmuList = [] 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1196,7 +1221,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				this.socket.onMessage((res) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					console.log("收到消息parse",JSON.parse(res.data)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					// console.log("收到消息parse",JSON.parse(res.data)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					const redata = JSON.parse(res.data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					if(redata.cmd=="heartbeat"){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						  //心跳 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1226,7 +1251,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						//重启 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						that.initSocket() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					// that.msgEnd = true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				//监听socket错误 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				this.socket.onError((err) => { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1252,9 +1276,9 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						content: this.danmuIput, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						timePoint: this.playTime, // 弹幕对应视频时间节点()秒 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						platform: 'uniapp',  //发送平台,app传值“app”,小程序传值“uniapp” 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						fontSize: '14px', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						fontSize: '16px', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						mode: "scroll", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						color: "#fff", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						color: "#ffffff", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					this.socket.send({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						data: JSON.stringify(data), 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1264,7 +1288,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							this.isSend = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 						fail: () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							console.log("发送失败") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 							uni.showToast({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								title: '发送失败', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 								icon: 'none' 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1280,19 +1303,113 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if (!this.player) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					this.player = uni.createVideoContext('video-content-box'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.player.sendDanmu({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// this.player.sendDanmu({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 	text: content.content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 	color: "#FF0000", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 	time: this.playTime + 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const id = content.userId +'_' + new Date().getTime() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const mystyle = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					color: content.color || this.danmuItemStyle.color, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					fontSize: content.fontSize || this.danmuItemStyle.fontSize, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					border: content.color ? `solid 1px ${content.color}`: this.danmuItemStyle.border, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					borderRadius: this.danmuItemStyle.borderRadius, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					padding: this.danmuItemStyle.padding, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					backgroundColor: this.danmuItemStyle.backgroundColor 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const otherstyle = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					color: content.color || this.danmuItemStyle.color, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					fontSize: content.fontSize || this.danmuItemStyle.fontSize, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					padding: this.danmuItemStyle.padding, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const mode = content.mode || "scroll" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const obj = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					id: content.id || id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					userId: content.userId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					text: content.content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					color: "#FF0000", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					time: this.playTime + 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					time: this.flagTime + 1, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					color: content.color || this.danmuItemStyle.color, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					style: this.user.userId == content.userId ? mystyle : otherstyle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					top: null 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				console 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if(this.showDanmu == 0) return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.danmuList.push(obj) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			initTracks() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.tracks = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const trackHeight = 22; // 每行高度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const trackCount = 3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				for (let i = 0; i < trackCount; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.tracks.push({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						top: i * trackHeight+10, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						isFree: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// 获取字体高度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			getTextWidth(content) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (!this.ctx) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.ctx = uni.createCanvasContext('myCanvas') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const metrics = this.ctx.measureText(content) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				return Math.ceil(metrics.width) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// 分配轨道 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			getFreeTrack(item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const width = this.getTextWidth(item.content) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const passWidth = width + uni.getSystemInfoSync().screenWidth 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const duration = 8 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				for (let i = 0; i < this.tracks.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (this.tracks[i].isFree) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						this.tracks[i].isFree = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						// 等本条通过右边界的时间 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						let passtime = Math.ceil(duration * 1000 / passWidth * width) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						passtime = passtime + 1000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						// console.log("passtime==", passtime) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						setTimeout(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							this.tracks[i].isFree = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						}, passtime); // 5秒后释放轨道 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						return this.tracks[i].top; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 无可用轨道 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (item.userId == this.user.userId) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					let trackHeight = this.tracks[this.tracks.length - 1].top 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return Math.random() * trackHeight + 16 // 自己发的弹幕随机高度; // 无可用轨道 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					// console.log("无可用轨道") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return 'abandon' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			// 检测并激活弹幕 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			checkDanmu() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if(this.showDanmu == 0) return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 筛选当前时间应出现的弹幕 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const newDanmus = this.danmuList.filter((item) => Math.abs(item.time - this.flagTime) < 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 分配轨道高度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				newDanmus.forEach((item) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					// 滚动弹幕随机高度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if(!item.top) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						item.top = this.getFreeTrack(item) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// setTimeout(()=>{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// 	this.player.sendDanmu({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// 		text: content.content, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// 		color: "#FF0000", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// 		time: this.playTime 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// 	}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				// },100) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 过滤没有分配到空闲轨道弹幕 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				const aliveNewDanmus = newDanmus.filter((item) => item.top != 'abandon') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 添加到活跃列表 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.activeDanmus = [...this.activeDanmus, ...aliveNewDanmus] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			animationend(moveItem, i) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				// 移除动画结束的弹幕(性能优化) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.activeDanmus = this.activeDanmus.filter((item) => item.id != moveItem.id) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			switchDanmu() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				this.showDanmu = this.showDanmu == 1 ? 0:1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if(this.showDanmu == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.activeDanmus = [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					this.initTracks() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </script> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1996,7 +2113,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	.danmuPopup { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		background-color: #fff; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		padding-bottom: var(--window-bottom); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		padding-bottom: calc(var(--window-bottom) + 10px); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		&-head { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			width: 100%; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			padding: 10px; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2041,5 +2158,41 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			color: #757575; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.danmu-item { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		position: absolute; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		top: 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		white-space: nowrap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		font-size: 16px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		height: 20px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		display: inline-flex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		box-sizing: border-box; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		align-items: center; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.danmuMove { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// animation: mymove 8s linear forwards; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// animation-duration: 8s; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		animation-timing-function: linear; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		animation-delay: 0s; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		animation-iteration-count: 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		animation-direction: normal; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		animation-fill-mode: forwards; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		animation-play-state: running; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		animation-name: mymove; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		will-change: transform; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	@keyframes mymove { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		from { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			transform: translateX(100vw); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		to { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			transform: translateX(-100%); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.danmu-icon{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		height: 24px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		width: 24px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		margin-right: 12px; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </style> 
			 |