<template>
	<view class="container">
		<image
			v-if="isShowAixin"
			src="@/static/img/index/aixining.png"
			:style="'position: fixed; margin-left: ' + aixinLeft + 'px; margin-top: ' + aixinTop + 'px; width: 70px; height: 65px; transform: rotate(' + Rotate + 'deg);'"
		></image>
		<view
			:style="'width: ' + windowWidth + 'px; height: ' + boxStyle.height + 'px;'"
			v-if="isShow1"
		>
			<list
				@scroll="scrolls"
				:show-scrollbar="false"
				ref="videoComp"
				:pagingEnabled="true"
				:scrollable="true"
			>
				<!-- 刷新模块 -->
				<!-- 		<refresh
					class="refresh"
					@refresh="onrefresh"
					@pullingdown="onpullingdown"
					:display="refreshing ? 'show' : 'hide'"
				>
					<loading style="background-color: #ffffff">
						<image
							src="@/static/img/index/logins.gif"
							:style="'width: 80upx; height: 40upx; margin-top: 80upx; margin-bottom: 30upx; margin-left: ' + (windowWidth - 200) + 'px;'"
						></image>
					</loading>
				</refresh> -->

				<!-- 循环数据 -->
				<cell
					v-for="(item, i) in dataList"
					:key="i"
				>
					<!-- 用div把视频模组套起来 -->
					<view
						:style="'width: ' + windowWidth + 'px; height: ' + boxStyle.height + 'px;'"
						:ref="'item' + i"
					>
						<image
							v-if="k !== i"
							:src="item.firstFrameImg"
							:mode="item.width >= item.height ? 'aspectFit' : 'scaleToFill'"
							:style="'width: ' + windowWidth + 'px; height: ' + boxStyle.height + 'px; position: absolute;'"
						></image>
						<view v-if="k - i <= 1">
							<view class="root">
								<!-- 
								具体视频参数可以参考官方文档
								说明：
								1.v-if很关键，这里主要是为了减少 dom 元素【这样才不会加载视频多了闪退】，
									这里 Math.abs(k-i)<=5 也就是往上预加载 5 个视频，往下预加载 5 
									个视频这样做的目的是为了让视频能够提前加载但是不播放，在真正滑到位
									置的时候播放视频。
									【2.0.1就是  1  Math.abs(k-i)<=1：请勿修改，记住，要不然会提前播放很多视频】
									
								2.要注意 @play="playIngs" 里面的 playIngs 方法，这个方法只是在视频播放的时候
									起效果，我们控制视频播放不是用这个的。这个的主要作用是给视频封面的。我们先用
									下面的视频封面盖住视频，等到视频播放的时候，我们不要急着直接播放，而是延迟一下下，
									300-600ms左右。因为视频播放需要一点点时间，这点时间里会黑屏，这个时候我们就用
									下面的封面盖住，这样用户就不会有从黑屏到有画面的感觉了，但是如果遇到视频太大，缓冲
									时间太长，还是会出现短暂的黑屏，大部分是不会有黑屏的（这样盖住的话）。
									
									【更新记录：2.0版】已经解决了视频黑屏问题，和加载速度慢的情况，如果还是出现了黑屏，
									意味着此时手滑动的速度，已经超过了视频加载的速度，对于这个问题，建议修改 preloadNumber 
									变量，当它的值大一点的时候就会提前加载视频，这样用户在滑到视频的时候就不会有停顿感了
									【注意】：老用户在 video 中增加和修改 
									（1）:muted="!item.playIng"，
									（2）@timeupdate="timeupdate($event,i)"
									（3）把 199 行注释了，
									（4）:id="item.id"，
									（5）修改：uni.createVideoContext(this.dataList[this.k].id + '' + this.k,this) 为
										uni.createVideoContext(this.dataList[this.k].id,this)
									（6）在 timeupdate 方法里加入，if(index == this.k){把里面的加一个总的判断}
								3.其他的下面有详解
								 -->
								<video
									:id="item.id"
									:loop="true"
									:src="item.url"
									:muted="item.isplay"
									@play="playIngs(i)"
									:enable-progress-gesture="false"
									:page-gesture="false"
									:controls="false"
									:http-cache="true"
									:show-loading="false"
									:show-fullscreen-btn="false"
									:show-center-play-btn="false"
									:style="boxStyle"
									:object-fit="item.width >= item.height ? 'contain' : 'fill'"
									@timeupdate="timeupdate($event, i)"
									:poster="item.firstFrameImg"
								></video>
								<!-- 这里是封面 -->
								<image
									v-if="!item.playIng"
									:src="item.firstFrameImg"
									:mode="item.width >= item.height ? 'aspectFit' : 'scaleToFill'"
									:style="'width: ' + windowWidth + 'px; height: ' + boxStyle.height + 'px; position: absolute;'"
								></image>
								<!-- 
								mode: 图片裁剪、缩放的模式
								mode 有 14 种模式，其中 5 种是缩放模式，9 种是裁剪模式。
								https://uniapp.dcloud.io/component/image
								 -->
							</view>
							<!-- 直接用 view 就行了，一样是可以覆盖原生组件的 -->
							<!-- 这个是暂停时出现的图标 -->
							<view
								class="videoHover"
								@click="tapVideoHover(item.state, $event)"
								@touchstart="touchstartHover"
								:style="boxStyle"
							>
								<image
									v-if="item.state == 'pause'"
									class="playState"
									src="@/static/img/index/play.png"
								></image>
							</view>
							<view class="userInfo">
								<!-- 1.头像 -->
								<view class="touxbox">
									<image
										v-if="item.isShowProgressBarTime == false"
										@click="tozuozhe(item.vlogerId)"
										class="userAvatar"
										:src="item.vlogerFace"
										mode="aspectFill"
									></image>
									<!-- 1.1 头像下面的加号 -->
									<!-- v-if="!item.doIFollowVloger && userId != thisVlogerId" -->
									<image
										v-if="!item.doIFollowVloger && userId != item.vlogerId"
										src="/static/images/icon-follow.png"
										class="follow-me"
										@click="followMe(item.vlogerId)"
									></image>
								</view>
								<!-- 2.点赞 -->
								<view
									v-if="item.isShowProgressBarTime == false"
									@click="cLike(item.like)"
									style="opacity: 0.9; margin-top: 17px"
								>
									<image
										v-if="item.doILikeThisVlog"
										@click="likeOrDislikeVlog(item)"
										src="@/static/img/index/xin.png"
										style="width: 40px; height: 40px; position: absolute; right: 6px"
									></image>
									<image
										v-if="!item.doILikeThisVlog"
										@click="likeOrDislikeVlog(item)"
										src="@/static/img/index/xin-2.png"
										style="width: 40px; height: 40px; position: absolute; right: 6px"
									></image>
									<text
										style="color: #ffffff; margin-top: 5px; font-size: 14px; text-align: center; margin-top: 40px; font-weight: bold"
										:class="{ likeNumActive: item.doILikeThisVlog }"
									>
										{{ getGraceNumber(item.likeCounts) }}
									</text>
								</view>
								<!-- 3.评论 -->
								<view
									v-if="item.isShowProgressBarTime == false"
									class="comment"
									@click="toComment(item)"
									style="opacity: 0.9; margin-top: 17px"
								>
									<image
										src="/static/images/icon-comments.png"
										style="width: 35px; height: 35px; position: absolute; right: 7px"
									></image>
									<text style="color: #ffffff; margin-top: 5px; font-size: 14px; font-weight: bold; text-align: center; margin-top: 40px">
										{{ getGraceNumber(item.commentsCounts) }}
									</text>
								</view>
								<!-- 4.分享 -->
								<view
									v-if="item.isShowProgressBarTime == false"
									@click="share(item)"
									style="opacity: 0.9; margin-top: 17px"
								>
									<image
										src="@/static/img/index/share-fill.png"
										style="width: 40px; height: 40px; position: absolute; right: 5px"
									></image>
									<text style="color: #ffffff; margin-top: 5px; font-size: 14px; text-align: center; font-weight: bold; margin-top: 40px">分享</text>
								</view>
								<!-- 5.转轮 -->
								<block v-if="platform == 'ios' && false">
									<view
										v-if="item.isShowProgressBarTime == false"
										@click="dealVoice"
										style="margin-top: 17px"
									>
										<view style="width: 48px; height: 48px; border-radius: 50px; position: absolute; right: 2.5px">
											<image
												:style="'width: 48px; height: 48px; border-radius: 50px; transform: rotate(' + rotates + 'deg);'"
												src="@/static/img/index/bfq.png"
												mode="aspectFill"
											></image>
											<!-- 这里放所用音乐的图 -->
											<image
												v-if="showPlay"
												:style="
													'width: 30px; height: 30px; margin-top: 9px; margin-left: 9px; position: absolute; border-radius: 50px; transform: rotate(' +
													rotates +
													'deg);'
												"
												:src="item.vlogerFace"
												mode="aspectFill"
											></image>
										</view>
									</view>
									<view
										v-if="platform == 'ios'"
										style="margin-top: 48px"
									></view>
								</block>
								<block v-if="platform !== 'ios' && false">
									<view
										v-if="item.isShowProgressBarTime == false"
										@click="dealVoice"
										style="margin-top: 15px; width: 48px; height: 48px"
									>
										<text style="font-size: 0.1px; opacity: 0">.</text>
										<view style="width: 48px; height: 48px; border-radius: 50px; position: absolute">
											<image
												:style="'width: 48px; height: 48px; border-radius: 50px; transform: rotate(' + rotates + 'deg);'"
												src="@/static/img/index/bfq.png"
												mode="aspectFill"
											></image>
											<image
												v-if="showPlay"
												:style="
													'width: 30px; height: 30px; margin-top: 9px; margin-left: 9px; position: absolute; border-radius: 50px; transform: rotate(' +
													rotates +
													'deg);'
												"
												:src="item.vlogerFace"
												mode="aspectFill"
											></image>
										</view>
									</view>
								</block>
							</view>
							<!-- 最底下的文字部分 -->
							<view
								class="content"
								v-if="dataList.length !== 0 && dataList[k].isShowProgressBarTime == false"
							>
								<text
									class="userName"
									:style="'width: ' + (windowWidth - 90) + 'px;'"
								>
									{{ item.vlogerName }}
								</text>
								<!-- i={{i}} -->
								<text
									class="words"
									:style="'width: ' + (windowWidth - 90) + 'px;'"
								>
									{{ item.content }}
								</text>
								<!-- -{{ k + 1 }} -->
							</view>
							<!-- 1.视频预览时的图片，currenttimes：就是获取当前滑块的时间点，如果不需要，可以注释掉 -->
							<!-- 2.如果使用下面的视频预览的话要注意的是视频链接最好是阿里云上的，因为
									https://xxxxxxxxx.mp4?x-oss-process=video/snapshot,t_1000,f_jpg
									这个是阿里云的东西，至于其他的视频截帧我还没有试过。
									-->
							<!-- 3.阿里云视频截帧地址：https://help.aliyun.com/document_detail/64555.html -->

							<!-- 这里放雪碧图,这版先不弄 -->
							<!-- 	
						
							<image
								v-if="item.isShowimage == true"
								:src="item.firstFrameImg"
								mode="aspectFill"
								:style="
									'width: 120upx; height: 160upx; border-radius: 10upx; position: absolute; bottom: ' +
									(ProgressBarBottom + 160) +
									'upx; left: ' +
									(currentPositions - 15) +
									'px;'
								"
							></image> 
							
						-->
						</view>
					</view>
				</cell>
			</list>
			<!-- 1.注意：进度条这类拖拽的东西不能放进block\cell这些循环体中的，要不然touchmove方法会捕捉有误 -->
			<view
				v-if="dataList.length !== 0 && dataList[k].isShowProgressBarTime == true"
				:style="'position: absolute; bottom: ' + (ProgressBarBottom + this.windowWidth * 0.2) / 2 + 'px; left: ' + (windowWidth * 2 - this.windowWidth * 1.35) / 2 + 'px;'"
			>
				<text style="font-size: 22px; font-weight: bold; color: #f1f1f1">{{ changeTime }} / {{ videoTimes }}</text>
			</view>
			<!-- 这里就是进度条了：纯手工进度条，调整位置的话就把他们的 bottom 改成一下就行了 -->
			<view
				v-if="isDragging == false"
				@touchmove="touchmove"
				@touchend="touchend"
				@touchstart="touchstart"
				:style="{ bottom: 0 + 'px', position: 'absolute', left: 0 }"
			>
				<!-- 1.这一步必须加，为了适配低端机型 -->
				<text :style="'width: ' + windowWidth + 'px; opacity: 0;'">.</text>
				<!-- 2.这是未加载的时的右边的灰色部分 -->
				<view
					:style="
						'width: ' +
						windowWidth +
						'px; height: 4upx; background-color: #C8C7CC; position: absolute; bottom: ' +
						ProgressBarBottom +
						'upx; opacity: ' +
						ProgressBarOpacity +
						';'
					"
				></view>
				<!-- 3.这里我采用的分离式办法：就是让滑动样式和不滑动的样式分开，这样相互不干扰，可以避免进度条闪动的问题 -->
				<!-- 4.注意：isShowProgressBarTime 加入了返回数据中 -->
				<view
					v-if="dataList.length !== 0 && dataList[k].isShowProgressBarTime == false"
					:style="
						'width: ' +
						currentPosition +
						'px; height: 4upx; background-color: #FFFFFF; position: absolute; bottom: ' +
						ProgressBarBottom +
						'upx; left: 0; opacity: ' +
						(ProgressBarOpacity - 0.1) +
						';'
					"
				></view>
				<view
					v-if="dataList.length !== 0 && dataList[k].isShowProgressBarTime == true"
					:style="
						'width: ' +
						currentPositions +
						'px; height: 8upx; background-color: #FFFFFF; position: absolute; bottom: ' +
						ProgressBarBottom +
						'upx; left: 0; opacity: ' +
						(ProgressBarOpacity + 0.05) +
						';'
					"
				></view>
				<view
					v-if="dataList.length !== 0 && dataList[k].isShowProgressBarTime == false"
					:style="
						'width: 4px; height: 4px; background-color: #FFFFFF; border-radius: 10px; position: absolute; bottom: ' +
						(ProgressBarBottom - 2) +
						'upx; left: ' +
						currentPosition +
						'px; opacity: ' +
						ProgressBarOpacity +
						';'
					"
				></view>
				<view
					v-if="dataList.length !== 0 && dataList[k].isShowProgressBarTime == true"
					:style="
						'width: ' +
						dotWidth +
						'px; height: ' +
						dotWidth +
						'px; background-color: #FFFFFF; border-radius: 10px; position: absolute; bottom: ' +
						(ProgressBarBottom - 5) +
						'upx; left: ' +
						(currentPositions - 5) +
						'px; opacity: ' +
						ProgressBarOpacity +
						';'
					"
				></view>
			</view>
		</view>
		<!-- 评论 -->
		<view>
			<!-- 底部窗口popup -->
			<uni-popup
				ref="pinglun"
				type="comment"
			>
				<uni-popup-comments
					:thisVlogerId="pinglunInfo.vlogerId"
					:thisVlogId="pinglunInfo.vlogId"
					:from="'tuijian'"
				></uni-popup-comments>
			</uni-popup>
			<!-- 分享 -->
			<uni-popup
				ref="share"
				background-color="#fff"
				type="share"
			>
				<uni-popup-share
					:thisVlogerId="pinglunInfo.vlogerId"
					:thisVlogId="pinglunInfo.vlogId"
					:vlogUrl="pinglunInfo.url"
					:isPrivate="pinglunInfo.isPrivate"
					:vlogItem="pinglunInfo"
				></uni-popup-share>
			</uni-popup>
		</view>
	</view>
</template>
<script>
import storage from '@/utils/storage.js'; //缓存
import { graceNumber } from '@/utils/tools.js';
import api from '@/config/api.js';
import { vlogList, vlogLike, vlogUnLike, vlogComment, vlogFollow, vlogTotalLikedCounts } from '@/api/vlog';
/*
	引入评论组件
	*/
// import douyinScrollview from '@/components/douyin-scrollview/douyin-scrollview.nvue';

export default {
	data() {
		return {
			//下面打🌟号的是必须要的基础字段
			//下面打💗号的是拥有滑动条的必须字段
			dataList: [], //用于数据循环的列表🌟💗
			wHeight: 0, //获取的屏幕高度🌟💗
			boxStyle: {
				//视频，图片封面样式🌟💗
				height: 0,
				width: 0
			},
			Heights: 0,
			k: 0, //默认为0🌟💗
			playIngIds: [], //正在播放的视频id列队，列队用于处理滑动过快导致的跳频问题🌟💗
			ready: false, //可忽略
			isDragging: false, //false代表停止滑动🌟💗
			refreshing: true, //用于下拉刷新🌟💗
			windowWidth: 0, //获取屏幕宽度🌟💗
			windowHeight: 0,
			dex: [0, 0], //用于判断是上滑还是下滑，第一个存旧值，第二个存新值【目前在1.0.7已经废弃】
			currents: 0, //用于左右滑动，0代表视频界面，1代表右滑界面🌟💗
			platform: '', //用于获取操作系统：ios、android🌟💗
			playIng: false, //用于视频初始化时是否播放，默认不播放🌟💗
			videoTime: '', //视频总时长，这个主要用来截取时间数值💗
			videoTimes: '', //视频时长，用这个来获取时间值，例如：00:30这个时间值💗
			changeTime: '', //显示滑动进度条时变化的时间💗
			isShowimage: false, //是否显示封面【1.0.4已废弃，但是意思需要记住】
			currenttimes: 0, //当前时间💗
			isShowProgressBarTime: false, //是否拖动进度条，如果拖动（true）则显示进度条时间，否则不显示（false）【1.0.4已废弃，但是意思需要记住】
			ProgressBarOpacity: 0.7, //进度条不拖动时的默认值，就是透明的💗
			dotWidth: 0, //播放的小圆点，默认没有💗
			deleteHeight: 0, //测试高度🌟💗
			percent: 0, //百分小数💗
			currentPosition: 0, //滑块当前位置💗//2.0已弃用，现已用于后端参数
			currentPositions: 0, //滑块当前位置的副本💗//2.0已弃用，现已用于后端参数
			newTime: 0, //跟手滑动后的最新时间💗
			timeNumber: 0, //🌟💗
			ProgressBarBottom: 0, //进度条离底部的距离💗
			object_fit: 'contain', //视频样式默认包含🌟💗
			mode: 'aspectFit', //图片封面样式🌟💗
			timeout: '', //🌟用来阻止 setTimeout()方法
			voice: '', //🌟用来阻止 setTimeout()方法
			oldVideo: '',

			isAutoplay: false, //是否开启自动播放(默认不开启)
			autoplayText: '开启自动播放',
			timers: '',

			// 引入评论 - 参数
			heightNum: 1.18,

			// 双击点赞参数
			touchNum: 0,
			aixinLeft: 0,
			aixinTop: 0,
			isShowAixin: false,
			Rotate: 0,

			isShow1: false, //控制渲染变量1
			isShow2: false, //控制渲染变量2 ： 专门控制 uni-popup

			showPlay: false, //转轮显示控制
			rotates: 0, //转轮旋转角度
			rotateTime: '', //转轮递归事件控制
			xrotats: '',

			player: '',
			// 新增内容
			page: 1,
			channel: null, // 处理进度条
			channelComment: null, // 处理评论数量显示
			userId: '',
			pinglunInfo: {
				vlogerId: '', // 博主id
				vlogId: '', // 视频id
				url: '',
				isPrivate: 0
			}
		};
	},
	// components: {
	// 	douyinScrollview
	// },
	watch: {
		k(k, old_k) {
			//监听 k 值的变化，可以控制视频的播放与暂停
			console.log(k);
			// 清理定时器
			this.clearToTime();
			this.dataList[old_k].playIng = false; //如果视频暂停，就加载封面
			this.dataList[old_k].isplay = true;
			uni.createVideoContext(this.dataList[old_k].id, this).play();
			clearTimeout(this.oldVideo);
			this.oldVideo = setTimeout(() => {
				uni.createVideoContext(this.dataList[old_k].id, this).seek(0);
				uni.createVideoContext(this.dataList[old_k].id, this).pause();
				console.log('预留第' + (old_k + 1) + '个视频：' + this.dataList[old_k].id);
			}, 500);
			this.dataList[k].state = 'play';
			console.log('已经暂停 --> 第' + (old_k + 1) + '个视频～'); //提示
			clearTimeout(this.player);
			this.player = setTimeout(() => {
				uni.createVideoContext(this.dataList[k].id, this).play();
			}, 50);

			if (k == this.dataList.length - 1) {
				(async () => {
					await this.getData();
					var p = k;
					++p;
					this.dataList[p].isplay = true;
					setTimeout(() => {
						uni.createVideoContext(this.dataList[p].id, this).play();
						clearTimeout(this.timeout);
						this.timeout = setTimeout(() => {
							uni.createVideoContext(this.dataList[p].id, this).seek(0);
							uni.createVideoContext(this.dataList[p].id, this).pause();
							console.log('预加载第' + (p + 1) + '个视频：' + this.dataList[p].id);
						}, 1500);
					}, 20);
				})();
			}
			//【此处处理进度条卡住的问题】
			if (uni.getSystemInfoSync().platform !== 'ios') {
				setTimeout(() => {
					uni.createVideoContext(this.dataList[k].id, this).pause();
					uni.createVideoContext(this.dataList[k].id, this).play();
				}, 100);
			}
			this.xrotats = setTimeout(() => {
				this.showPlay = true;
				this.rotateX();
			}, 200);
		}
	},

	// created() {
	// 	this.channel = new BroadcastChannel('video-progress');
	// },
	created() {
		this.channel = new BroadcastChannel('video-progress');
		this.channelComment = new BroadcastChannel('comment-counts');
		this.channelComment.onmessage = (event) => {
			const { type, data } = event.data;
			if (type == 'comment-counts') {
				if (data.from == 'tuijian') {
					this.refreshVlogCounts();
					this.freshCommentCounts();
				}
			}
		};
		this.platform = uni.getSystemInfoSync().platform;
		var model = uni.getSystemInfoSync().model;
		if (this.platform == 'ios' && (model !== 'iPhone6' || model !== 'iPhone6s' || model !== 'iPhone7' || model !== 'iPhone8')) {
			// this.deleteHeight = 32; //有 tabbar的 修改这里可以改变视频高度
			this.deleteHeight = uni.getSystemInfoSync().statusBarHeight + 26; //进度条高度16，点高度10
			/*
				 引入评论参数
				 */

			this.heightNum = 1.27;
		} else {
			// this.deleteHeight = 0;
			this.deleteHeight = uni.getSystemInfoSync().statusBarHeight + 16; // 安卓只处理进度条高度10
			/*
				引入评论参数
				*/
			this.heightNum = 1.18;
		}
		// 控制渲染 -- start
		this.isShow1 = true;
		setTimeout(() => {
			this.isShow2 = true;
		}, 400);
		// 控制渲染 -- end
		this.windowWidth = uni.getSystemInfoSync().screenWidth; //获取屏幕宽度
		this.boxStyle.width = this.windowWidth + 'px'; //给宽度加px
		this.wHeight = uni.getSystemInfoSync().screenHeight; //获取屏幕高度
		console.log(this.wHeight);
		this.boxStyle.height = this.wHeight - this.deleteHeight; //改变视频高度
		console.log(this.boxStyle);
		this.get(); //这一步，加载视频数据
		this.rotateX();
	},
	onReady() {},
	methods: {
		async refreshVlogCounts() {
			// 查询当前点赞数，重新赋值给当前视频
			var me = this;
			var vlog = me.dataList[this.k];
			var result = await vlogTotalLikedCounts(vlog.vlogId);
			if (result.data.status == 200) {
				var counts = result.data.data;
				this.dataList[this.k].likeCounts = counts;
			}
		},
		async freshCommentCounts() {
			var me = this;
			var vlog = me.dataList[this.k];
			var result = await vlogComment(vlog.vlogId);
			if (result.data.status == 200) {
				var counts = result.data.data;
				this.dataList[this.k].commentsCounts = counts;
			}
		},
		// 关注博主
		async followMe(vlogerId) {
			var myUserInfo = storage.getVlogUserInfo();
			if (myUserInfo == null) {
				uni.navigateTo({
					url: '/pages/passport/login',
					animationType: 'slide-in-bottom'
				});
				return;
			}
			var userId = myUserInfo.id;
			var result = await vlogFollow(userId, vlogerId);
			if (result.data.status == 200) {
				// 关注成功后修改当前数据的状态
				this.dataList[this.k].doIFollowVloger = true;
			} else {
				uni.showToast({
					title: result.data.msg,
					icon: 'none',
					duration: 3000
				});
			}
		},
		// 把超过1000或10000的数字调整，比如1.3k/6.8w
		getGraceNumber(num) {
			return graceNumber(num);
		},
		async likeOrDislikeVlog(item) {
			var info = storage.getVlogUserInfo();
			if (info != null) {
				this.userId = info.id;
			}
			// 没登录拒绝操作
			if (this.userId == '') {
				uni.navigateTo({
					url: '/pages/passport/login',
					animationType: 'slide-in-bottom'
				});
				return;
			}
			var isLike = item.doILikeThisVlog;

			if (isLike == false) {
				// 喜欢
				var result = await vlogLike({
					userId: this.userId,
					vlogerId: item.vlogerId,
					vlogId: item.vlogId
				});
				console.log(result);
				if (result.data.status == 200) {
					item.likeCounts++;
					item.doILikeThisVlog = !item.doILikeThisVlog;
				} else {
					uni.showToast({
						title: result.data.msg,
						icon: 'none',
						duration: 3000
					});
				}
			} else {
				// 取消喜欢
				var result = await vlogUnLike({
					userId: this.userId,
					vlogerId: item.vlogerId,
					vlogId: item.vlogId
				});
				if (result.data.status == 200) {
					item.likeCounts--;
					item.doILikeThisVlog = !item.doILikeThisVlog;
				} else {
					uni.showToast({
						title: result.data.msg,
						icon: 'none',
						duration: 3000
					});
				}
			}
		},
		// --------------------
		showVd() {
			console.log('回到前台');
			if (this.dataList.length !== 0) {
				this.dataList[this.k].state = 'play';
				uni.createVideoContext(this.dataList[this.k].id, this).play();
			}
		},
		hideVd() {
			this.dataList[this.k].state = 'pause'; //界面隐藏也要停止播放视频
			uni.createVideoContext(this.dataList[this.k].id, this).pause(); //暂停以后继续播放
			console.log('到后台');
		},
		dealVoice() {
			// uni.showToast({
			// 	title: '处理声音',
			// 	icon: 'none'
			// });
		},
		clearToTime() {
			//清理定时器
			for (let i = 0; i < 20; i++) {
				clearTimeout(this.rotateTime);
				clearTimeout(this.xrotats);
				this.showPlay = false;
				this.rotates = 0;
			}
		},
		clearTime() {
			//清理定时器
			for (let i = 0; i < 20; i++) {
				clearTimeout(this.rotateTime);
				clearTimeout(this.xrotats);
			}
		},
		rotateX() {
			// clearTimeout(this.rotateTime);
			this.rotateTime = setTimeout(() => {
				this.rotateX();
				this.rotates += 1;
			}, 30);
		},
		autoPlay() {
			this.isAutoplay = !this.isAutoplay;
			if (!this.isAutoplay) {
				this.autoplayText = '开启自动播放';
				uni.showToast({
					title: '关闭自动播放',
					icon: 'none',
					duration: 3000
				});
			} else {
				this.autoplayText = '关闭自动播放';
				uni.showToast({
					title: '开启自动播放',
					icon: 'none',
					duration: 3000
				});
			}
		},
		async getData() {
			// loadmore
			let myUserInfo = storage.getVlogUserInfo();
			let userId = '';
			if (myUserInfo != null) {
				userId = myUserInfo.id;
			}
			const res = await vlogList(this.page, 10, userId);
			console.log(res);
			if (res.data.status == 200) {
				var msg = res.data.data.rows;
				var List = JSON.parse(JSON.stringify(this.dataList));
				if (msg.length > 0) {
					this.page = this.page + 1;
				}
				for (let i = 0; i < msg.length; i++) {
					msg[i].id = msg[i].vlogId;
					msg[i].playIng = false;
					msg[i].isShowimage = false;
					msg[i].isShowProgressBarTime = false;
					msg[i].isplay = true;
					msg[i].state = 'pause';
					List.push(msg[i]);
				}
				this.dataList = List;
			}
		},
		touchstart(event) {
			this.channel.postMessage({
				type: 'drag-start',
				data: false
			});
			this.dataList[this.k].isShowimage = true; //刚触摸的时候就要显示预览视频图片了
			this.dataList[this.k].isShowProgressBarTime = true; //显示时间线
			this.ProgressBarOpacity = 1; //让滑块显示起来更明显一点
			this.dotWidth = 10; //让点显示起来更明显一点
		},
		touchend(event) {
			this.channel.postMessage({
				type: 'drag-end',
				data: true
			});
			//当手松开后，跳到最新时间
			uni.createVideoContext(this.dataList[this.k].id, this).seek(this.newTime);
			if (this.dataList[this.k].state == 'pause') {
				this.dataList[this.k].state = 'play';
				uni.createVideoContext(this.dataList[this.k].id, this).play();
			}
			this.dataList[this.k].isShowProgressBarTime = false; //触摸结束后，隐藏时间线
			this.dataList[this.k].isShowimage = false; //触摸结束后，隐藏时间预览
			this.ProgressBarOpacity = 0.5; //隐藏起来进度条，不那么明显了
			this.dotWidth = 0; //隐藏起来进度条，不那么明显了
		},
		touchmove(event) {
			event.stopPropagation();
			//当手移动滑块时，计算位置、百分小数、新的时间
			var msg = [];
			if (this.videoTime !== '') {
				msg = this.videoTime.split(':');
			}
			var timeNumber = Number(msg[0]) * 60 + Number(msg[1]);
			this.currentPositions = event.changedTouches[0].screenX;
			this.percent = this.currentPositions / this.windowWidth;
			this.newTime = this.percent * timeNumber;
			this.currenttimes = parseInt(this.newTime);
			let theTime = this.newTime;
			let middle = 0; // 分
			if (theTime > 60) {
				middle = parseInt(theTime / 60);
				theTime = parseInt(theTime % 60);
			}
			this.changeTime = `${Math.round(middle) > 9 ? Math.round(middle) : '0' + Math.round(middle)}:${
				Math.round(theTime) > 9 ? Math.round(theTime) : '0' + Math.round(theTime)
			}`;
		},
		timeupdate(event, index) {
			//计算滑块当前位置，计算当前百分小数
			// console.log(index)
			if (index == this.k) {
				// console.log(event)
				var currenttime = event.detail.currentTime;
				this.timeNumber = Math.round(event.detail.duration);
				this.getTime();
				this.percent = currenttime / this.timeNumber;
				this.currentPosition = this.windowWidth * this.percent;
				let theTime = currenttime;
				let middle = 0; // 分
				if (theTime > 60) {
					middle = parseInt(theTime / 60);
					theTime = parseInt(theTime % 60);
				}
				this.changeTime = `${Math.round(middle) > 9 ? Math.round(middle) : '0' + Math.round(middle)}:${
					Math.round(theTime) > 9 ? Math.round(theTime) : '0' + Math.round(theTime)
				}`;

				clearTimeout(this.voice);
				this.voice = setTimeout(() => {
					this.dataList[this.k].isplay = false;
				}, 200);
				setTimeout(() => {
					this.dataList[this.k].playIng = true;
				}, 650);

				//自动切换视频
				if (this.isAutoplay) {
					//true,代表自动播放
					if (Math.round(currenttime) == this.timeNumber - 1) {
						const dom = uni.requireNativePlugin('dom');
						let doms = 'item' + (this.k + 1);
						setTimeout(() => {
							let el = this.$refs[doms][0];
							dom.scrollToElement(el, {
								offset: 0,
								animated: true
							});
						}, 500);
					}
				}
			}
		},
		getTime() {
			//得到时间函数
			this.videoTime = this.formatSeconds(this.timeNumber);
			// console.log(that.videoTime)
			var msg = [];
			if (this.videoTime !== '') {
				msg = this.videoTime.split(':');
			}
			this.videoTimes = `${msg[0] > 9 ? msg[0] : '0' + msg[0]}:${msg[1] > 9 ? msg[1] : '0' + msg[1]}`;
		},
		formatSeconds(value) {
			//获取时间函数
			let theTime = parseInt(value); // 秒
			let middle = 0; // 分
			if (theTime > 60) {
				middle = parseInt(theTime / 60);
				theTime = parseInt(theTime % 60);
			}
			return `${middle > 9 ? middle : middle}:${theTime > 9 ? theTime : theTime}`;
		},
		playIngs(index) {
			//
		},
		moreVideo(index) {},
		toVideo(index) {},
		erweima() {},
		tozuozhe(userId) {
			var myInfo = storage.getVlogUserInfo();
			var myId = '';
			if (myInfo != null) {
				myId = myInfo.id;
			}
			if (userId == myId) {
				uni.switchTab({
					url: '/pages/me/me'
				});
			} else {
				uni.navigateTo({
					url: '/pages/me/vlogerInfo?userPageId=' + userId
				});
			}
		},
		stop() {
			// console.log('stop')
		},
		scrolls(event) {
			this.isDragging = event.isDragging;
			if (!event.isDragging) {
				//isDragging：判断用户是不是在滑动，滑动：true，停止滑动：false。我们要用户停止滑动时才给 k 赋值，这样就可以避免很多麻烦
				var i = Math.round(Math.abs(event.contentOffset.y) / (this.wHeight - this.deleteHeight + 1)); //先用绝对值取出滑动的距离，然后除以屏幕高度，取一个整，就知道你现在滑动到哪一个视频了
				if (i !== this.k) {
					//这里加判断是因为这个方法会执行很多次，会造成重复请求，所以这里写一个限制
					let num = 300;
					clearTimeout(this.timers);
					this.timers = setTimeout(() => {
						this.k = i; //判断了用户没有滑动，确认了用户的确是在看这个视频，然后就赋值啦
						this.dataList[this.k].state = 'play';
						console.log('正在播放 --> 第' + (this.k + 1) + '个视频～');
					}, num);
				}
			}
		},
		init() {
			this.page = 1;
			this.dataList = [];
			this.k = 0;
		},
		async get() {
			// 这个方法主要就是用来第一次进入视频播放时用来处理的
			// this.dataList = userList;//这个就是赋值加载视频啦
			this.init();
			let myUserInfo = storage.getVlogUserInfo();
			if (myUserInfo != null) {
				this.userId = myUserInfo.id;
			}
			const res = await vlogList(this.page, 10, this.userId);
			console.log(res);
			if (res.data.status == 200) {
				var msg = res.data.data.rows;
				for (let i = 0; i < msg.length; i++) {
					msg[i].id = msg[i].vlogId;
					msg[i].playIng = false;
					msg[i].isShowimage = false;
					msg[i].isShowProgressBarTime = false;
					msg[i].isplay = true;
					msg[i].state = 'pause';
				}

				if (msg.length > 0) {
					this.dataList = JSON.parse(JSON.stringify(msg));
					this.dataList[0].state = 'play';
					this.page = this.page + 1;
					setTimeout(() => {
						//这里的延迟是为了避免执行时间太快而直接跳过执行的 bug
						uni.createVideoContext(this.dataList[0].id, this).seek(0);
						uni.createVideoContext(this.dataList[0].id, this).play();
					}, 200);
					this.dataList[0].isplay = false;
					setTimeout(() => {
						this.dataList[0].playIng = true;
					}, 500);
					var p = 0;
					this.showPlay = true;
					setTimeout(() => {
						++p;
						if (this.dataList.length > 1) {
							this.dataList[p].isplay = true;
							setTimeout(() => {
								uni.createVideoContext(this.dataList[p].id, this).seek(0);
								uni.createVideoContext(this.dataList[p].id, this).pause();
								console.log('预加载第' + (p + 1) + '个视频：' + this.dataList[p].id);
							}, 800);
						}
					}, 50);
				}
			} else {
				uni.showToast({
					title: result.data.msg,
					icon: 'none',
					duration: 3000
				});
			}
		},
		onpullingdown() {
			// console.log('正在下拉刷新，此时手还在触摸没有松开')
			this.refreshing = true;
		},
		onrefresh() {
			// console.log('下拉刷新完毕，此时手松开了')
			setTimeout(() => {
				this.refreshing = false;
			}, 1000);
		},
		// 双击点赞效果
		touchstartHover(event) {
			if (this.touchNum >= 1) {
				// console.log('双击 -- X坐标：'+ event.touches[0].screenX);
				// console.log('双击 -- Y坐标：'+ event.touches[0].screenY);
				this.aixinLeft = event.touches[0].screenX - 50;
				this.aixinTop = event.touches[0].screenY - 50;
				this.isShowAixin = true;
				let max = 40;
				let min = -40;
				this.Rotate = Math.floor(Math.random() * (max - min + 1)) + min;
				setTimeout(() => {
					this.isShowAixin = false;
				}, 700);
				this.onTabItemTaps();
			}
		},
		//点击播放&&暂停
		tapVideoHover(state, event) {
			this.dataList[this.k].isShowimage = false;
			this.dataList[this.k].isShowProgressBarTime = false;
			this.ProgressBarOpacity = 0.5;
			this.dotWidth = 0;
			console.log('state--', state);
			// 1.启用双击点赞 --- start
			this.touchNum++;
			setTimeout(() => {
				if (this.touchNum == 1) {
					if (state == 'play' || state == 'continue') {
						this.dataList[this.k].state = 'pause';
					} else {
						this.dataList[this.k].state = 'continue';
					}
					if (this.dataList[this.k].state == 'continue') {
						uni.createVideoContext(this.dataList[this.k].id, this).play(); //暂停以后继续播放
						this.clearTime();
						setTimeout(() => {
							this.rotateX();
						}, 50);
					}
					if (this.dataList[this.k].state == 'pause') {
						uni.createVideoContext(this.dataList[this.k].id, this).pause(); //暂停以后继续播放
						this.clearTime();
					}
				}
				if (this.touchNum >= 2) {
					this.doubleLike();
				}
				this.touchNum = 0;
			}, 200);
			// --------------- ending
			// 2. 不启用双击点赞 start
			// if(state=='play'||state=='continue'){
			// 	this.dataList[this.k].state = 'pause';
			// }else{
			// 	this.dataList[this.k].state = 'continue';
			// }
			// if(this.dataList[this.k].state == 'continue'){
			// 	uni.createVideoContext(this.dataList[this.k].id,this).play();//暂停以后继续播放
			// }
			// if(this.dataList[this.k].state == 'pause'){
			// 	uni.createVideoContext(this.dataList[this.k].id,this).pause();//暂停以后继续播放
			// }
			// --------------- ending
		},
		doubleLike() {
			if (this.dataList[this.k].like == false) {
				this.dataList[this.k].like_n += 1;
				this.dataList[this.k].like = true;
			}
			/*
				点赞
				*/
		},
		toComment(item) {
			// 注意点击评论之后会执行这里
			/*
				（1）先加载缓冲
				（2）获取当前视频 ID 信息
				（3）🌟🌟🌟🌟重要🌟🌟🌟🌟
					- 一定要记得看 index.vue 里面
					 uni.setStorageSync("user",this.peopleList[i]);
					 这个东西，用于存储当前用户信息。在 插件里面会使用到这个东西，
					 记得写一下。
					 
				（4）打开评论
				*/
			this.pinglunInfo = item;
			uni.showToast({
				title: '加载中...',
				icon: 'none',
				position: 'bottom',
				duration: 300
			});
			// uni.setStorageSync('videoID', this.dataList[index].id);
			this.$refs.pinglun.open('bottom');
			uni.hideTabBar({
				animation: true
			});
		},
		share(item) {
			this.pinglunInfo = item;
			this.$refs.share.open();
			uni.hideTabBar({
				animation: true
			});
		},
		cLike(sss) {
			this.dataList[this.k].like = !this.dataList[this.k].like;
			const video = this.dataList[this.k];
			sss ? (video.like_n -= 1) : (video.like_n += 1);
			/*
				点赞
				*/
		},
		moveHandle() {},

		onTabItemTaps() {
			// #ifdef APP-PLUS
			if (uni.getSystemInfoSync().platform == 'ios') {
				let UIImpactFeedbackGenerator = plus.ios.importClass('UIImpactFeedbackGenerator');
				let impact = new UIImpactFeedbackGenerator();
				impact.prepare();
				impact.init(1);
				impact.impactOccurred();
				var item = this.dataList[this.k];
				this.likeOrDislikeVlog(item);
			}
			if (uni.getSystemInfoSync().platform == 'android') {
				uni.vibrateShort({
					success: () => {
						console.log('点击震动');
						var item = this.dataList[this.k];
						this.likeOrDislikeVlog(item);
					}
				});
			}
			// #endif
		}
	}
};
</script>
<style scoped>
.touxbox {
	justify-content: center;
	align-items: center;
}
.follow-me {
	width: 40rpx;
	height: 40rpx;
	border-radius: 40px;
	position: absolute;
	left: 30rpx;
	bottom: 15rpx;
}
.container {
	background-color: #000000;
}
.item {
	/* width : 750rpx; */
	background-color: #000000;
	position: relative;
}
.videoHover {
	position: absolute;
	top: 0;
	left: 0;
	flex: 1;
	background-color: rgba(0, 0, 0, 0.1);
	justify-content: center;
	align-items: center;

	/* border-style: dashed;
		border-color: #DD524D;
		border-width: 1px; */
}
.playState {
	width: 160rpx;
	height: 160rpx;
	opacity: 0.2;
}
.userInfo {
	position: absolute;
	bottom: 80px;
	right: 10px;
	flex-direction: column;
}
.userAvatar {
	border-radius: 500%;
	margin-bottom: 15px;
	border-style: solid;
	border-width: 2px;
	border-color: #ffffff;
}
.userAvatar {
	width: 100rpx;
	height: 100rpx;
}
.likeIco,
.shareIco,
.commentIco {
	width: 60rpx;
	height: 60rpx;
	margin-top: 15px;
}
.likeNum,
.commentNum,
.shareTex {
	color: #ffffff;
	font-size: 30rpx;
	text-align: center;
	margin: 5px;
}
.likeNumActive {
	color: red;
}
.content {
	width: 610rpx;
	z-index: 99;
	position: absolute;
	bottom: 30px;
	/* background-color: #007AFF; */
	/* justify-content: center; */
	padding: 15rpx;
	flex-direction: column;
	justify-content: flex-start;
	color: #ffffff;
}
.userName {
	font-size: 30rpx;
	color: #ffffff;
	margin-top: 80upx;
}
.words {
	margin-top: 10rpx;
	color: #ffffff;
	font-size: 28rpx;
	font-weight: 400;
	lines: 5;
	text-overflow: ellipsis;
}
.root {
	/* background-color: #000000; */
	background-color: #00ffff;
}
</style>
