uniapp ----小程序上下滑动页面,视频自动播放(完整代码)

这篇具有很好参考价值的文章主要介绍了uniapp ----小程序上下滑动页面,视频自动播放(完整代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

uniapp ----小程序上下滑动页面,视频自动播放(完整代码)

<template>
	<view class="box">
		<f-navbar title="视频详情" navbarType='3'></f-navbar>
		<!-- 
		 
		 
		注意:这是 H5、微信小程序界面,请勿和 new_index.nvue、index.nvue 混用
		 
		1. new_index.nvue、index.nvue这两个是App页面
		 
		2. 另外:data.js 是上一版本留下的假数据,这一版改成了 URL 请求了(如不需要可以删除,也可作为后端请求参考)
		 
		3. 请各位大神多多留手,我已经把请求内存开到最大了
		 
		4. 视频 id 切记是字符串类型 
		
		 -->
		<!-- #ifdef MP -->
		<view class="bgx"
			:style="{height:(windowHeight)+'px',background: 'linear-gradient(to top, rgba('+dataList[k].bkcolor.top+'), rgba('+dataList[k].bkcolor.bottom+'))'}">
		</view>
		<swiper class="sv-swiper" :style="'width: '+ windowWidth +'px; height: '+ 89 +'%;'" :vertical="true"
			@animationfinish="animationfinish" @change="change" :current="current" :indicator-dots="false"
			@touchstart="mpTouchstart" @touchend="mpTouchend">
			<swiper-item v-for="(item,index) in dataList" :key="index">
				<view v-if="Math.abs(k-index)<=1" :class="item.font_color==0?'colorFFF':'color101010'">
					<view>
						<!-- (windowHeight-statusbarH)
						1.v-if:用于控制视频在节点的渲染数
						2.muted的默认值是 false,代表默认是禁音视频的
						3.http-cache默认开启视频缓存
						4.poster(封面(方案一)):这里的封面默认处理存储在阿里云的视频
						5.show-loading:这里默认去掉播放转圈的标志
						v-if="Math.abs(k-index)<=1"
						 -->
						<video v-if="isShow" :id="item.id+''+index" loop autoplay :muted="item.isplay" controls
							:show-play-btn="false" :custom-cache="false" :http-cache="true" :show-fullscreen-btn="true"
							:show-loading="false" :show-center-play-btn="false" enable-progress-gesture :src="item.path"
							@ended="ended" @click="tapVideoHover(item.state,$event)"
							:style="'width: '+ windowWidth +'px; height: '+ vplayHei +'rpx;z-index: 9;'"
							:poster="item.bkimg" @fullscreenchange.stop="fullscreenchange"></video>

						<view class="contz  widP100" @click="tapVideoHover(item.state,$event)">
							<view class="widP100 paddingA20 paddB0 fontSize16 boxSize linHeight40 wordWarp ellipsis">
								{{item.title}}
							</view>
							<view class="widP100 fontSize12 paddL20 paddT20 boxSize">
								<text user-select="auto">{{item.bv}}</text>
							</view>

							<view class="widP100 paddingA20  boxSize display linHeight40 wenzi"
								:style="{height:descHeight+'rpx'}">
								<view class="fontSize12 texts widP100">
									<!-- <text :style="{lineHeight: '30rpx'}"
										class="paddB20">{{item.detail.length>detNum? item.detail.slice(0, (detNum-1)):item.detail}}</text>
									 -->
									<text :id="'getLinehei'+item.id" :style="{lineHeight: '30rpx'}"
										class="paddB20">{{lineCount>conAll?details:item.detail}}</text>

									<span v-if="lineCount>conAll">
										{{item.fold ? details:'...'}}
										<span class="fontSize12 paddL10" @click.stop="foldBtn(item.id)">
											<span v-show="!item.fold">展开<text
													class="iconfont icon-shixinjiantou-xia fontSize12"></text></span>
											<span v-show="item.fold">收起<text
													class="iconfont icon-shixinjiantou-shang fontSize12"></text></span>
										</span>
									</span>
								</view>
							</view>
							<!-- item.relation_type 0未关联  1关联健身房  2关联商品(暂时没有) -->
							<view class="kuai widP100 display  fontSize14 marT10"
								:class="item.font_color==0?'colorW':'colorB'" v-if="!item.fold">
								<text class="FontCenter widP100" v-show="item.relation_type != 0 "
									@click.stop="goJsf(item.relation_detail.id,item.relation_detail.name,item.relation_type)">
									<text class="iconfont icon-charulianjie fontSize14"></text>
									<text class="paddL20">{{item.relation_type==1?'运动':'购物'}}</text><text
										class="paddL10">|</text><text
										class="paddL10">{{item.relation_detail.name}}</text>
								</text>

							</view>
							<view class="paddingA20 boxSize widP100 display" v-show="!item.fold">
								<image class="widHei36 " :src="item.avatar" @click.stop="goMueber(item.uid)"
									mode="aspectFill"></image>
								<view class="widP60 marL20 FontLeft " @click.stop="goMueber(item.uid)">
									<view class="fontSize14 marT10 ">{{item.nickname}}</view>
									<view class="fontSize10 ellipsis widP100">{{item.signature}}
									</view>
								</view>

								<view class="guanzhu fontSize12 marT10" :class="item.font_color==0?'':'guanzhu1 '"
									@click.stop="followBtn(item.uid,item.id)">
									{{item.is_follow==0?'关注':'已关注'}}
								</view>

							</view>

							<view class="followShare widP100 display " v-if="!item.fold"
								:class="item.font_color==0?'colorW':'colorB'">
								<view class="" @click.stop="collectORNot(item.id)">
									<button hover-class="none" :class="item.font_color==0?'colorFFF':'color101010'">
										<text :class="item.is_collect?'icon-shoucang':'icon-shoucang1'"
											class="iconfont iconSize20 fontSize20"></text>
										<text class="paddL10">{{item.collect_num}}</text>
									</button>
								</view>
								<view class="">
									<button open-type="share" hover-class="none"
										:class="item.font_color==0?'colorFFF':'color101010'">
										<text class="iconfont icon-fenxiang1 iconSize20 fontSize20"></text>
										<text class="paddL10">{{item.share_num}}</text>
									</button>
								</view>
								<view class="" @click.stop="clickComment(item.id)">
									<button hover-class="none" :class="item.font_color==0?'colorFFF':'color101010'">
										<text class="iconfont icon-xinxi1 iconSize20 fontSize20"></text>
										<text class="paddL10">{{item.comments_num}}</text>
									</button>
								</view>
								<view class="" @click.stop="likeORNotLike(item.id)">
									<button hover-class="none" :class="item.font_color==0?'colorFFF':'color101010'">
										<text :class="item.is_like?'icon-dianzan_kuai':'icon-dianzan'"
											class="iconfont  iconSize20 fontSize20"></text>
										<text class="paddL10">{{item.like_num}}</text>
									</button>
								</view>
							</view>

						</view>
						<view class="adz widP100 paddL20 paddR20  boxSize marB26 " :style="{height:adHeight+'rpx'}"
							v-if="!shouldShowAd && !item.fold">
							<image class="imgz" :src="dataList[k+1].bkimg" mode="aspectFill"></image>
						</view>
						<view class="widP100 paddL20 paddR20  boxSize marB20 adz" v-show="shouldShowAd && !item.fold "
							:style="{height:adHeight+'rpx'}">
							<advertising ref="advertising" :type='2'></advertising>
						</view>
					</view>
				</view>
			</swiper-item>
		</swiper>

		<view class="masks" v-if="isShowComment" @click.stop="clickComment(2)"></view>
		<view class="commentBox" v-if="isShowComment">
			<hb-comment ref="hbComment" @submitComment="submitComment" @del="delVidoeComment" @like="likeBtn"
				@focusOn="focusOn" @inputOn="inputOn" :deleteTip="'确认删除此条评论吗?'" :vid="vid" :cmData="commentData"
				v-if="commentData">
			</hb-comment>
		</view>
		<!-- #endif -->
	</view>
</template>

<script>
	// import userList from '../new_index/data.js'//这个是假数据
	let audo = uni.createInnerAudioContext()
	audo.loop = true
	export default {
		data() {
			return {
				authorid: '', //他人视频id
				windowWidth: 0,
				windowHeight: 0, // 可视屏幕高度
				platform: "",
				model: "",
				deleteHeight: 0,
				dataList: [],
				k: 0,
				oldVideo: "",
				voice: "",
				timeout: "",
				current: 0,
				boxStyle: { //视频,图片封面样式🌟💗
					'height': 0,
					'width': 0,
				},


				isShow: false,

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

				mpcleartime: "",

				isClick: false,

				changeTimeout: "",
				mptime: 0,
				mpstartTime: 0,

				duration: 500,

				vid: "", //当前视频id
				uid: uni.getStorageSync('user_id'),
				statusbarH: 0,
				adHeight: 200, //适配屏幕高度
				descHeight: 300, //简介高度
				vplayHei: 420, //视频高度
				topHeight: 0,
				lineCount: 0, //文字占用的行数
				conAll: 7, //在7行的时候文字隐藏
				details:'',//截取的文字
				detNum: 88, //详情文字数量
				type: 0, //进入状态 0:视频首页(默认) 1:本地2:推荐3:关注 4:作品5:喜欢6:收藏 7:健身房首页
				gid: 0, //健身房id
				pageNo: 1, //从首页传过去的页数


				is_comment: false, //是发布评论 否删除评论

				isShare: false, //是否分享
			


				isShowComment: false, //是否显示评论区
				commentData: {},
				readNumer: 193,
				commentList: [],
				comment: '', //用户评论内容
				clientY: 0, //手指滑动方向
				vertical: true, //是否可以滑动

				// advInfo: {}, //广告信息
				count: 1, //在第3条后显示广告

				page1: 0, //调用接口详情的次数
			}
		},
		components: {

		},
		computed: {
			shouldShowAd: {
				// 根据计数器的值判断是否应该显示广告
				get() {
					return this.count % 3 === 0;
				},
				set() {

				}
			}
		},

		watch: {
			async k(k, old_k) {
				// console.log(k, old_k)
				// #ifndef MP
				this.clearToTime();
				// #endif
				this.isShow = false
				this.dataList[old_k].playIng = false; //如果视频暂停,就加载封面
				this.dataList[old_k].isplay = true;
				this.dataList[old_k].state = 'pause';
				// console.log('预留第' + (old_k + 1) + '个视频:' + this.dataList[old_k].id + '' + old_k)
				// 2.0版本已经去掉了下面这一句,视频不用暂停,只需要把声音禁止就行
				uni.createVideoContext(this.dataList[old_k].id + '' + old_k, this)
					.stop() //如果视频暂停,那么旧视频停止,这里的this.dataList[old_k]._id + '' + old_k,后面加 old_k 是为了每一个视频的 id 值不同,这样就可以大程度的避免串音问题
				// console.log('已经暂停 --> 第' + (old_k + 1) + '个视频~') //提示
				this.dataList[k].state = 'play';
				this.isShow = true;
				this.xrotats = setTimeout(() => {
					this.showPlay = true;
					// #ifndef MP
					this.rotateX();
					// #endif
				}, 200)
				// #ifdef MP
				// 如果是小程序端
				clearTimeout(this.changeTimeout);
				this.dataList[k].isplay = false;
				setTimeout(() => {
					this.dataList[k].playIng = true;
				}, 250)
				if (this.mptime < 0.2) {
					this.changeTimeout = setTimeout(() => {
						uni.createVideoContext(this.dataList[this.k].id + '' + this.k, this).play();
					}, 1400)
				} else {
					uni.createVideoContext(this.dataList[this.k].id + '' + this.k, this).play();
				}
				// #endif

				var p = k + 1;
				// console.log('预加载第' + (p + 1) + '个视频:' + this.dataList[p].id + '' + p)

				this.vid = this.dataList[k].id; //全局定义当前视频id
				this.onVideoEnd()
			},

			count(newValue) {
				// 计数器变化时,检查是否应该显示广告
				this.shouldShowAd = newValue % 3 === 0;
				if (this.shouldShowAd) { //成功后请求广告信息
					this.getMiniAd();
				}
			},
		},
		onLoad(option) {

			// 带参跳转
			if (option.vid) {
				this.vid = option.vid;
				this.type = option.type;
				this.gid = option.gid;
				this.pageNo = option.page;
				this.authorid = option.authorid || '';
			}

			this.getVideoDetail(); //刚进入页面加载数据
			// #ifndef MP
			this.rotateX();
			// #endif
			this.getSystemInfoSync();
		},
		onShow() {
			console.log('回到前台');
			this.uid = uni.getStorageSync('user_id') || '';
			if (this.dataList.length !== 0) {
				// #ifdef MP
				this.dataList[this.k].state = 'play';
				uni.createVideoContext(this.dataList[this.k].id + '' + this.k, this).play()
				// #endif

			}

			if (this.isShare) { //判断是否已经分享
				this.shareVideo();
				this.isShare = false;
			}
		},
		onShareAppMessage() {
			console.log('分享-------')
			this.isShare = true;
		},
		onHide() {
			// #ifdef MP
			this.dataList[this.k].state = 'pause';
			uni.createVideoContext(this.dataList[this.k].id + '' + this.k, this).pause()
			// #endif

			console.log('到后台');
		},
		onReady() {
			this.getLineNum();
		},
		methods: {
			// 获取视频详情文字占用的行数
			getLineNum() {
				setTimeout(() => {
					uni.createSelectorQuery().in(this).select('#getLinehei' + this.vid).boundingClientRect(
					rect => {
						let height = rect.height;
						let detNum = this.detNum;
						this.lineCount = parseInt(height / uni.upx2px(30));
						if (this.lineCount > this.conAll) {  //超出行数 截取文字字数
							let det = this.dataList[this.k].detail.trim(' ')
							this.details = det.slice(0,detNum)
						} 
					}).exec();
				}, 500)
			},

			onVideoEnd() {
				// 每当视频播放完成时,将计数器加1
				this.count++;
			},
			// 根据手机屏幕的高度适配广告位置
			getSystemInfoSync() {
				let datas = uni.getSystemInfoSync();
				this.platform = datas.platform;
				this.model = datas.model;
				this.statusbarH = datas.statusBarHeight;
				var model = this.model
				if (this.platform == 'ios' && (model !== 'iPhone6' || model !== 'iPhone6s' || model !== 'iPhone7' ||
						model !== 'iPhone8')) {
					this.deleteHeight = 0 //有 tabbar的 修改这里可以改变视频高度
				}
				this.windowWidth = datas.windowWidth;
				this.windowHeight = datas.windowHeight;
				this.boxStyle.width = this.windowWidth + 'px'; //给宽度加px
				this.boxStyle.height = this.windowHeight - this.deleteHeight - this.statusbarH; //有 tabbar的 修改这里可以改变视频高度

				if (datas.windowHeight <= 745) {
					this.adHeight = 100;
					this.descHeight = 220;
					this.conAll = 5;
					this.detNum = 60;
				} else {
					this.adHeight = 220;
				}

			},
			// 获取广告
			getMiniAd() {
				this.$refs.advertising[2].getMiniAdv();
			},

			// 保证视频可以正常播放
			fullscreenchange(event) {
				let v = this.dataList[this.k];
				// if(v.state!='pause'){}
				uni.createVideoContext(v.id + '' + this.k, this).play();
				v.state = 'play';
				v.isplay = false;
			},

			// 跳转健身房
			goJsf(id, name, type) {
				if (type == 2) return this.$alert('暂未开放!');
				this.$jumpMy('/pages/venue/venueDetail?id=' + id + '&name=' + name)
			},
			goMueber(uid) {
				this.$jumpMy('/pages/my/otherHome?otherid=' + uid)
			},

			/*封装用户点赞等操作 id:当前视频id res 后台返回的状态1成功0取消 
			 msg提示 type 1点赞 2收藏 3分享 4关注 5评论*/
			getFunz(id, res, msg = '', type = 1) {
				const datas = this.dataList.find(item => item.id === id);
				let num = datas.like_num;
				switch (type) {
					case 1:
						datas.is_like = res;
						datas.like_num = res ? (num + 1) : (num - 1);
						break;
					case 2:
						num = datas.collect_num;
						datas.is_collect = res;
						datas.collect_num = res ? (num + 1) : (num - 1);
						break;
					case 3:
						datas.share_num = datas.share_num + 1;
						break;
					case 4:
						datas.is_follow = res;
						break;
					case 5:
						num = datas.comments_num;
						datas.is_comment = res;
						datas.comments_num = res ? (num + 1) : (num - 1);
						break;
				}
				this.$alert(res ? msg + '成功!' : '取消' + msg + '!')
			},
			// 视频点赞&& 取消点赞
			likeORNotLike(id) {
				this.$myRequest('likeORNotLike', 'POST', {
						uid: this.uid,
						video_id: id,
					})
					.then(v => {
						let res = v.data;
						this.getFunz(id, res, '点赞', 1)
					})
			},
			// 收藏&& 取消收藏
			collectORNot(id) {
				this.$myRequest('collectORNot', 'POST', {
						uid: this.uid,
						video_id: id,
					})
					.then(v => {
						let res = v.data;
						this.getFunz(id, res, '收藏', 2)
					})
			},

			// 分享视频
			shareVideo() {
				this.$myRequest('shareVideo', 'POST', {
						vid: this.vid,
					})
					.then(v => {
						let res = v.data;
						this.getFunz(this.vid, res, '分享', 3)
					})
			},

			// 点击按钮是否关注
			followBtn(uid, id) {
				this.$myRequest('followOrNotFollow', 'POST', {
						id: this.uid,
						follow_id: uid,
					})
					.then(v => {
						let res = v.data;
						this.getFunz(id, res, '关注', 4)
					})
			},

			//一开始手指活动的方向
			fingerstart(e) {
				this.clientY = e.changedTouches[0].clientY
			},
			// 判断页面是上滑还是下滑
			fingerend(e) {
				const subY = e.changedTouches[0].clientY - this.clientY;
				if (subY > 50 || subY < -50) {
					// if(this.isShowComment) return this.$alert('请先关掉评论区!')
					if (!this.vertical) return this.$alert('文字收起才可以滑动哦!');
				}
			},
			//文字展开收起的功能
			foldBtn(id) {
				this.dataList.forEach(item => {
					if (item.id == id) {
						let det = item.detail;
						item.fold = !item.fold;
						if (item.fold) {
							this.detailInfos = det;
							this.vertical = false; //文字展开后手机禁止滑动
						} else {
							this.vertical = true;
						}
					}
				})
			},

			// 评论数组转变
			getTree(data) {
				let result = [];
				let map = {};
				data.forEach(item => {
					map[item.id] = item;
				});
				data.forEach(item => {
					let parent = map[item.parentId];
					if (parent) {
						(parent.children || (parent.children = [])).push(item);
					} else {
						result.push(item);
					}
				});
				return result;
			},

			// 输入框聚焦
			focusOn(val) {
				this.comment = val
			},

			// 输入评论
			inputOn(val) {
				this.comment = val;
			},
			// 点击评论按钮
			clickComment(id) {
				//0不能评论  1能
				if (this.dataList[this.k].can_comment == 0) return this.$alert('未开启评论功能!');
				// this.getcommentData();
				this.isShowComment = !this.isShowComment;

			},


			// 提交评论并清除记忆
			submitComment() {
				this.is_comment = true;
				this.getFunz(this.vid, this.is_comment, '评论', 5)

			},
			// 删除评论
			delVidoeComment(cid) {
				this.is_comment = false;
				this.getFunz(this.vid, this.is_comment, '评论', 5)
			},
			// 评论点赞 id评论id
			likeBtn(id) {},

			// 点击空白返回并保存记忆
			clickOther(e) {
				this.isShowComment = false;
			},

			// 点击评论事件
			clickCommentlist(e) {
				console.log('1111', e);
			},
			// 点击头像/用户名称事件
			clickUser(e) {
				console.log(e);
			},

			mpTouchend() {
				this.mptime = (new Date() / 1000) - this.mpstartTime;
			},
			mpTouchstart() {
				this.mpstartTime = (new Date() / 1000);
			},
			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.showPlay = true;
					this.rotates += 1;
				}, 30)
			},
			closeScrollview() {
				// 点击评论里面的叉叉,就会关闭评论
				this.$refs.pinglun.close();
			},
			ended() {
				// 1.播放当前视频结束时触发,自动切换下一个视频
				// this.current = this.k+1
			},
			//点击播放&&暂停
			tapVideoHover(state, event) {
				console.log('state--', state);
				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') {
					this.isClick = true;
					this.dataList[this.k].playIng = true
					uni.createVideoContext(this.dataList[this.k].id + '' + this.k, this).play(); //暂停以后继续播放
					// #ifdef MP
					this.dataList[this.k].isplay = false
					// #endif

				}
				if (this.dataList[this.k].state == 'pause') {
					uni.createVideoContext(this.dataList[this.k].id + '' + this.k, this).pause(); //暂停以后继续播放
					// #ifdef MP
					this.dataList[this.k].isplay = true
					// #endif

				}
			},
			change(event) {
				this.k = event.detail.current
			},
			animationfinish(event) {
				// 1.这里进行判断,如果是最后一个视频就进入 get() 方法加载视频进入列表
				if (this.k == this.dataList.length - 1) {
					this.GETVideoDetail();
				}
			},
			//每一组结束时新的请求
			GETVideoDetail() {
				this.pageNo++
				// 1.这里引入后端请求数据
				// 需要传的参数
				let query = {
					vid: this.vid,
					uid: this.uid,
					type: this.type,
					gid: this.gid || '',
					area: '',
					page: this.pageNo,
					authorid: this.authorid,
				};

				this.$myRequest('getVideoDetail1', 'POST', query)
					.then(v => {
						let datas = v.data;
						// 2.这里把视频添加到视频列表
						for (let i = 0; i < datas.length; i++) {
							this.dataList.push(datas[i])
						}
					})

			},
			getVideoDetail() {
				// 1.这里引入后端请求数据
				// 需要传的参数
				let query = {
					vid: this.vid,
					uid: this.uid,
					type: this.type,
					gid: this.gid || '',
					area: '',
					page: '',
					authorid: this.authorid,

				};

				this.$myRequest('getVideoDetail1', 'POST', query)
					.then(v => {
						this.isShow = false;
						var msg = v.data
						// 2.这里把视频添加到视频列表
						for (let i = 0; i < msg.length; i++) {
							this.dataList.push(msg[i])
						}
						// 3.播放当前视频
						setTimeout(() => {
							this.isShow = true;

							// #ifdef MP
							// 如果是小程序端
							this.dataList[this.k].isplay = false
							this.dataList[this.k].state = 'play'
							// #endif
							this.dataList[this.k].playIng = true
							setTimeout(() => {

								// #ifdef MP
								uni.createVideoContext(this.dataList[this.k].id + '' + this.k,
									this).play()
								// #endif
							}, 500)
							// this.getcommentData();
						}, 200)
						this.vid = this.dataList[this.k].id;
						this.pageNo = this.dataList[0].page;
						console.log('wwwwww', this.pageNo)
					})
			},
			share() {
				uni.showToast({
					title: '分享',
					icon: 'none'
				})
			},

			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;
			}
		}
	}
</script>

<style>
	.boxz {
		background-color: #000;
		position: relative;
	}

	.wenzi {
		height: 336rpx;
	}

	.contz {
		/* height: 80%;
		overflow-y: scroll;
		position: relative; */
		position: absolute;
		/* margin-top: 500rpx; */
	}

	.videoPlay,
	.videoPlay video,
	.mask1 {
		width: 100%;
		height: 420rpx;
		display: block;
		/* margin-top: 40rpx; */
		position: absolute;
	}

	.mask1 {
		background-color: transparent;
		z-index: 9;
	}

	.mask2 {
		position: absolute;
		z-index: 99;
		background-color: transparent;
		width: 80rpx;
		height: 80rpx;
		right: 0;
		bottom: 0;
	}

	/* .videoz1 {
		position: relative;
	} */

	.sv-swiper {
		position: absolute;
		width: 100%;
		left: 0;
		z-index: 9;
	}

	.sv-swiper swiper-item {
		overflow-y: auto;
	}

	/* .sv-swiper swiper-item:nth-child(2),.sv-swiper swiper-item:nth-child(3){
		margin-top: -200rpx;
	} */
	.sv-swiper swiper-item ::-webkit-scrollbar {
		width: 0 !important;
	}

	.bgx {
		width: 100%;
		background-color: #000;
		position: absolute;
		left: 0;
		top: 0;
	}

	.kuai {
		height: 72rpx;
		line-height: 72rpx;

	}

	.colorW {
		background-color: rgba(255, 255, 255, 0.2);
	}

	.colorB {
		background-color: rgba(16, 16, 16, 0.2);
	}

	.paddB0 {
		padding-bottom: 0;
	}



	button {
		font-size: 32rpx;
		line-height: 80rpx;
		margin-top: 6rpx;
	}

	.guanzhu1 {
		border: 1px solid #101010;
	}

	.videoFullScreen {
		position: relative;
		box-sizing: border-box;
		padding: 0;
		width: 100vw;
		height: 100vh;
		overflow-y: auto;
		/* height: 100%; */
	}

	.videoFullScreen video {
		width: 100%;
		object-fit: fill;
		height: 100%;
		display: block;
	}



	.followShare {
		/* justify-content: space-around; */
		height: 90rpx;
		line-height: 80rpx;
		/* background-color: rgba(255, 255, 255, 0.2); */
		z-index: 99;
	}

	.followShare view {
		flex: 1;
	}

	.adz {
		position: fixed;
		/* padding-bottom: 20rpx; */
		bottom: 0;
		left: 0;
		z-index: 99;
	}

	.btnz {
		float: right;
		clear: both;
	}

	.btnz1 {
		margin-top: -30rpx;
	}

	.fold {
		text-overflow: -o-ellipsis-lastline;
		text-overflow: ellipsis;
		-webkit-box-orient: vertical;
		display: -webkit-box;
		overflow: hidden;
	}

	.unfold {
		height: 42%;
		overflow-y: scroll;
		position: absolute;
		z-index: 99;
		transition: all 0.4s cubic-bezier(0.25, 1, 0.25, 1);

	}

	.unfold1 {
		height: 130rpx;
		transition: all 0.4s cubic-bezier(0.25, 1, 0.25, 1);
	}

	.texts::before {
		content: '';
		float: right;
		height: 80rpx;

	}
</style>

视频自动播放代码,uni-app,小程序,音视频文章来源地址https://www.toymoban.com/news/detail-560439.html

到了这里,关于uniapp ----小程序上下滑动页面,视频自动播放(完整代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包