更新记录
3.1.0(2023-11-15)
下载此版本
超高性能稳定版 支持安卓及ios
平台兼容性
App |
快应用 |
微信小程序 |
支付宝小程序 |
百度小程序 |
字节小程序 |
QQ小程序 |
HBuilderX 3.6.0 app-nvue |
× |
× |
× |
× |
× |
× |
钉钉小程序 |
快手小程序 |
飞书小程序 |
京东小程序 |
× |
× |
× |
× |
H5-Safari |
Android Browser |
微信浏览器(Android) |
QQ浏览器(Android) |
Chrome |
IE |
Edge |
Firefox |
PC-Safari |
× |
× |
× |
× |
× |
× |
× |
× |
× |
基于 uniapp 开发的仿抖音小程序组件(超高性能)APP双端
-
GIF 帧率不够,实际真机效果非常丝滑
-
实测,不管加载多少数据也能丝滑滚动
-
适用于 vue3,vue2 请自行修
-
自动预加载视频
-
首次渲染优化
快速开始,下载插件后请按照此方法运行调试
参考 API
属性 |
类型 |
默认值 |
说明 |
videoList |
Array |
- |
视频列表,数组对象 {src: string, poster?: string, objectFit?: string} |
autoObjectFit |
Boolean |
true |
是否开启视频频自动自适应平铺模式,竖屏全屏覆盖,横屏自适应居中, 此参数优先级低于 videoList 中的 objectFit |
loop |
Boolean |
true |
是否循环播放视频 |
controls |
Boolean |
false |
显示原生控制栏 |
autoplay |
Boolean |
true |
是否自动播放 |
autoChange |
Boolean |
false |
是否自动滚动播放 |
loadMoreOffsetCount |
Number |
2 |
滚动加载阈值(即播放到剩余多少个之后触发加载更多 |
@play |
EventHandle |
- |
当开始/继续播放时触发 play 事件 |
@error |
EventHandle |
- |
视频播放出错时触发 |
@ended |
EventHandle |
- |
当播放到末尾时触发 ended 事件 |
@loadMore |
EventHandle |
- |
当滚动到最后第 N 条数据后,需要加载更多时触发 |
@change |
EventHandle |
- |
切换视频时触发 |
@click |
EventHandle |
- |
点击整个视频区域触发 |
@controlstoggle |
EventHandle |
- |
控制栏状态变化触发 |
Slots 插槽
属性 |
默认值 |
说明 |
default |
- |
自定义内容,覆盖到视频上方的所有自定义内容 v-slot="data" 为当前渲染数据,请参照使用示例 |
使用示例
<template>
<div class="video-container">
<mTikTok
ref="mTikTokRef"
:video-list="state.videoList"
@loadMore="loadMore"
@change="change"
>
<!-- 此处为用户完全自定义 data 中的数据为当前渲染的数据 -->
<template v-slot="data">
<view class="video-side-right">
<view class="action-item action-item-user">
<image
class="shop-logo"
src="https://examples-1251000004.cos.ap-shanghai.myqcloud.com/sample.jpeg?imageMogr2/crop/180x180/gravity/center"
/>
<view class="action-btn">
<text class="iconfont">+</text>
</view>
<text class="action-item-text"></text>
</view>
<view class="action-item">
<text class="iconfont icon-star11beifen">❤</text>
<text class="action-item-text">{{ data.item.id }}</text>
</view>
<view class="action-item">
<text class="iconfont icon-share">☝</text>
<text class="action-item-text">分享</text>
</view>
</view>
<view class="video-bottom-area">
<view class="shop-name"> @{{ data.item.name }} </view>
<view class="shop-card">{{ data.item.desc }}</view>
</view>
</template>
</mTikTok>
</div>
</template>
<script lang="ts" setup>
import { onMounted, reactive, ref } from "vue";
// 导入组件
import mTikTok from "@/components/mTikTok.vue";
const mTikTokRef = ref<InstanceType<typeof mTikTok>>();
const state = reactive({
videoList: [
{
src: "https://xjc.demo.hongcd.com/uploads/20230214/84e165388f5bfdb1550522f50f5a57bb.mp4",
id: "1",
name: "开玩笑的鸡毛",
desc: "这里是简介内容",
},
{
src: "https://xjc.demo.hongcd.com/uploads/20230214/3f26d950ac286eecedba49f5295f0819.mp4",
id: "2",
name: "开玩笑的鸡毛",
desc: "这里是简介内容",
},
{
src: "https://xjc.demo.hongcd.com/uploads/20230215/8b5ac0420fe61e2f9660d7b8af998f7b.mp4",
id: "3",
name: "开玩笑的鸡毛",
desc: "这里是简介内容",
},
{
src: "https://xjc.demo.hongcd.com/uploads/20210128/d932b2d78cebb0a8cb8f9a6216790dfb.mp4",
id: "4",
name: "开玩笑的鸡毛",
desc: "这里是简介内容",
},
{
src: "https://xjc.demo.hongcd.com/uploads/20210128/0c64cbeea28b10c06eee8728c762449e.mp4",
id: "5",
name: "开玩笑的鸡毛",
desc: "这里是简介内容",
},
{
src: "https://xjc.demo.hongcd.com/uploads/20210327/1b72e1b6153cd29df07f5449991e8083.mp4",
id: "6",
name: "开玩笑的鸡毛",
desc: "这里是简介内容",
},
{
src: "https://xjc.demo.hongcd.com/uploads/20230214/7e1a0baaebc4e656bbbfbc44d7a55a60.mp4",
id: "7",
name: "开玩笑的鸡毛",
desc: "这里是简介内容",
},
],
});
const loadMore = () => {
// 触发加载更多
console.log("加载更多");
};
// 切换视频触发,返回当前播放的内容
const change = (e: any) => {
console.log("🚀 ~ file: index.vue:53 ~ change ~ data:", e);
};
// 播放第几个
const playIndex = (index: number) => {
mTikTokRef.value?.initSwiperData(index);
};
onMounted(() => {
// 直接播放第3个
// playIndex(3);
});
</script>
<style lang="scss">
.video-layer {
position: absolute;
right: 12px;
bottom: 120px;
color: #fff;
}
.video-bottom-area {
position: absolute;
left: 20px;
bottom: 40px;
z-index: 999;
.shop-name {
color: #fff;
margin-bottom: 6px;
}
.shop-card {
width: 160px;
height: 80px;
background-color: rgba(255, 255, 255, 0.5);
}
}
.video-side-right {
position: absolute;
right: 12px;
bottom: 120px;
color: #fff;
z-index: 999;
.action-item {
position: relative;
margin-bottom: 20px;
text-align: center;
.shop-logo {
width: 40px;
height: 40px;
border-radius: 50%;
overflow: hidden;
}
.iconfont {
display: block;
font-size: 28px;
}
.action-item-text {
display: block;
font-size: 12px;
}
.action-btn {
position: absolute;
left: 50%;
transform: translateX(-50%);
bottom: -8px;
width: 20px;
height: 20px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
background-color: #f60;
.iconfont {
font-size: 16px;
}
}
}
.action-item-user {
margin-bottom: 40px;
}
}
</style>
<!-- -->
<!-- 控制滑动区域和事件 -->
<!-- -->
<!-- -->
<!-- -->
<!-- -->
<!-- 视频渲染数预加载数影响性能 -->
<!-- -->
<video- class="video"src="item.src" title=""height="height"width="width"play="item.flag"gDuration="item.content.video_long" objectFit="" initialTime=""pause="pauseVideo"playEnd="playEnd"videoIndex="idx"ref="`video_${idx}`"changeSlide="slideHideView">
</video-control>
<!--
点此预约活动
-->
{{item.like.length}}
<!-- 购物车和头像 -->
<!-- 购物车 -->
购买:¥{{item.pay_amount}}
<!-- 用户头像和标题 -->
{{item.nickname}}
{{item.content.text}}
{{item.content.text.substr(27, 140)}}
... 展开全文
收起
<!--
{{leab.name}}
-->
<!-- 左右滑动页面 -->
<!-- 99 -->
<!-- 888 -->
<!-- 收藏提示 -->
收藏成功
已取消收藏
<!-- -->
item.name).join(' ')
},
showActionMenu() {
return this.action_menu;
},
staticPath() {
return _data.staticCircle();
}
},
created() {
this.init()
//隐藏subnvue
// uni.getSubNVueById('comment').hide()
// uni.getSubNVueById('input-box').hide()
},
async mounted() {
//this.videoPlay(this.index)
// await this.pushVideoList()
// this.$nextTick(() => {
// this.videoPlay(this.index)
// })
// this.$nextTick(() => {
// this.videoList.push({
// src:'../../../static/video-test/video_1.mp4',
// content:'测试视频1',
// flag:true,
// check:false,
// like:'10w',
// comment:'1045',
// avater:'http://img.kaiyanapp.com/e44ed5fcfa424ba35761ce5f1339bc16.jpeg?imageMogr2/quality/60/format/jpg',
// initialTime:10,
// at:'Dcloud',
// duration:841,
// objectFit:'fill',
// produce:'测试视频1'
// }
// })
uni.getSystemInfo({
success: (res) => {
this.Mtscreen = res.windowHeight / 2 + 'px'
}
});
},
onReady() {
plus.navigator.setStatusBarStyle("light"); //只支持dark和light
this.selfTop = (uni.getSystemInfoSync().windowHeight / 2) + 150
},
onLoad(e) {
this.topNavigate = plus.navigator.hasNotchInScreen() ? '110rpx' : '65rpx'
this.user_id = _data.data('user_info').id
this.getVideoInfo()
this.animation = uni.createAnimation()
// 创建动画实例
},
onShow() {
this.videoPlay(this.index)
},
onHide() {
for (let item of this.videoList) {
item.flag = false
}
},
methods: {
//设置参数
init() {
this.typeX = false //开启左右滑动
this.playCount = 0 //剩余多少视频加载视频列表
this.startDistance = 5 //判断左右上下拖动的启动距离 px
this.minTime = 200 //判断快速滑动的时间,该时间内无视回弹距离判断
this.backDistance = 200 //判断上下滑动的回弹距离 px
},
getVideoInfo() {
const videoUrl = 'http://im.4o1.net/im/circle/getCircleOrds'
const params = {
_token: uni.getStorageSync('token'),
page: this.page
}
uni.request({
url: videoUrl,
data: params,
header: {
'Content-Type': 'application/json', //自定义请求头信息
},
method: 'POST', //请求方式,必须为大写
success: (res) => {
let getData = res.data
console.log(getData);
if (getData.msg == 1) { //正常
getData.data.forEach((item, index) => {
if (this.isPlay && index == 0) {
item.flag = true
} else {
item.flag = false
}
item.src = this.staticPath + item.content.video_path
item.avatarUrl = 'http://im.4o1.net/' + item.content.value
})
this.videoList = [...this.videoList, ...getData.data]
console.log(this.videoList);
setTimeout(() => { //初始化滑动区域
uni.createSelectorQuery().in(this).selectAll('#coverleft_0')
.boundingClientRect((rects) => {
if (this.$refs.prodeceProduct_0 == undefined) {
this.coverLeftHeight = rects.height - 20
} else {
this.coverLeftHeight = rects.height
}
}).exec();
}, 1000)
}
}
})
},
pushVideoList() {
// this.uuid = ''
this.page++
this.isPlay = false
this.getVideoInfo()
},
backListBtn(e) {
e.stopPropagation();
uni.navigateBack()
},
slideHideView(e) { //滑动隐藏多余区域
this.showSliderControlView = e == 0 ? true : false
},
replayActionVideo() { //真正操作重播
clearTimeout(this.isRecommendVideo)
},
tapLove(index, uuid) {
if (this.distanceX != 0) return
const params = {
userId: uni.getStorageSync("userId"),
uuid
}
let url = this.videoList[index].likeStatus == 1 ? 'video/cancelLike' : 'video/addLike'
getApp().globalData.actionRequest(params, url).then(res => {
if (res.data.resultCode == 1) {
this.videoList[index].likeStatus = res.data.data.likeStatus
this.videoList[index].likeCount = res.data.data.likeCount
} else if (res.data.errCode == 401) {
this.showDisread = true
}
})
},
tapAvater(index, item) {
if (this.distanceX != 0) return
const params = {
fanId: uni.getStorageSync("userId"), //当前用户ID
userId: item.userId //视频发布者ID
}
if (item.followStatus == 1) {
uni.showModal({
title: '确认不再关注?',
content: '',
success: res => {
if (res.confirm) {
getApp().globalData.actionRequest(params, 'user/cancelFollow').then(res => {
if (res.data.resultCode == 1) {
this.videoList[index].followStatus = res.data.data.followStatus
} else if (res.data.errCode == 401) {
this.showDisread = true
}
})
}
}
})
} else {
getApp().globalData.actionRequest(params, 'user/addFollow').then(res => {
if (res.data.resultCode == 1) {
// item.followStatus = res.data.data.followStatus
this.videoList[index].followStatus = res.data.data.followStatus
} else if (res.data.errCode == 401) {
this.showDisread = true
}
})
}
},
tapMsg(index, uuid) {
if (this.distanceX != 0) return
if (!this.showComment) {
// this.showComment = true
this.commentIndex = index
this.commentUuid = uuid
animation.transition(this.$refs.showComment, {
styles: {
transform: `translate(0px, 0px)`,
},
duration: 200, //ms
timingFunction: 'ease-in-out',
delay: 0 //ms
}, () => {
this.showComment = true
})
} else {
// this.showComment = false
animation.transition(this.$refs.showComment, {
styles: {
transform: `translate(0px, 1000rpx)`,
},
duration: 200, //ms
timingFunction: 'ease-in-out',
delay: 0 //ms
}, () => {
this.showComment = false
})
}
},
collectionHandle(video_index, item) { //收藏
const params = {
userId: uni.getStorageSync('userId'),
uuid: item.uuid
}
let sendUrl = null
if (item.collectionStatus && item.collectionStatus == 1) {
sendUrl = 'video/cancelCollection'
} else {
sendUrl = 'video/addCollection'
}
getApp().globalData.actionRequest(params, sendUrl).then(res => {
if (res.data.resultCode == 1) {
this.videoList[video_index].collectionStatus = res.data.data.collectionStatus
this.running(res.data.data.collectionStatus)
} else if (res.data.errCode == 401) {
this.showDisread = true
}
})
},
tapShare(index, item) {
if (this.isPlayCtontrol || this.distanceX != 0) return
this.shareInfo(index, item)
},
openLabelList(item) { //标签列表
uni.navigateTo({
url: '/pages/index/labelList/labelList?id=' + item.id,
animationType: 'slide-in-right',
animationDuration: 200
})
},
openHomePage(userId) {
const pages = getCurrentPages()
if (pages.length > 2) {
uni.redirectTo({ //查看更多必须关闭当前页面
url: '/pages/myself/homepage/homepage?userId=' + userId,
animationType: 'slide-in-right',
animationDuration: 200
});
} else {
uni.navigateTo({
url: '/pages/myself/homepage/homepage?userId=' + userId,
animationType: 'slide-in-right',
animationDuration: 200
})
}
},
openAttachDetail(item, type) { //产品
if (this.distanceX != 0) return
this.videoPlay(this.index) //暂停视频
this.showDisread = false
if (type == 0) { //了解活动
if (uni.getStorageSync("userId") == '') {
this.showDisread = true
return
}
setTimeout(() => {
uni.navigateTo({
url: '/pages/activity/detail/detail?&uuid=' + item.activityId,
animationType: 'slide-in-right',
animationDuration: 200
})
}, 200)
} else { //了解更多
this.answerBody = false
const params = {
userId: uni.getStorageSync("userId"), //视频发布者ID
productId: item.productId, //产品ID
typeId: item.uuid, //媒介ID(比如视频ID,活动ID)
type: 0 //媒介类型(0:视频;1:活动)
}
getApp().globalData.actionRequest(params, 'video/deal').then(res => {
if (res.data.resultCode == 1) {
this.showCollect = true
this.startAnswerAction = true
this.questionTitle = res.data.data.content
this.questionBtn = res.data.data.type
this.questionItem = item //认证成功更新认证当前状态
} else if (res.data.errCode == 401) {
this.showDisread = true
this.showCollect = false
this.startAnswerAction = false
}
})
}
},
openDescText(e) { //展开简介
e.stopPropagation();
this.desctextOverflow = !this.desctextOverflow
this.coverLeftHeight = this.desctextOverflow ? this.coverLeftHeight + 40 : this.coverLeftHeight - 40
},
clickHideBody() {
this.showDisread = false
},
eventClick() {
uni.navigateTo({
url: '/pages/myself/login/login',
animationType: 'slide-in-right',
animationDuration: 200
})
},
//收藏动画
running(status) {
// this.shareObj.shareMenu.hide();
// this.shareObj.alphaBg.hide();
this.isCollectText = status == 1 ? true : false
this.showColectBody = true
setTimeout(() => {
animation.transition(this.$refs.imagett, {
styles: {
transform: 'translateY(-110)',
},
duration: 500, //ms
timingFunction: 'ease-out',
delay: 0 //ms
}, res => {})
setTimeout(() => {
animation.transition(this.$refs.imagett, {
styles: {
transform: 'translateY(110)',
},
duration: 800, //ms
timingFunction: 'ease-in',
delay: 0 //ms
}, res => {})
// this.showColectBody = false
}, 1000)
}, 200)
},
// 了解更多
moveCollectStop() {},
actionQuestions(e) { //答题
e.stopPropagation();
if (this.questionBtn == 1) { //答题
this.startAnswerAction = false
this.answerBody = true
} else if (this.questionBtn == '') { //未审核
this.questionFlag = 'success'
uni.navigateTo({
url: '/pages/myself/means/means?title=申请认证',
animationType: 'slide-in-right',
animationDuration: 200
})
} else {
this.showCollect = false
}
},
fatherAnswer() {
this.showCollect = false
},
hideCollect(e) {
e.stopPropagation();
this.showCollect = false
this.videoPlay(this.index) //暂停视频
},
shareInfo(video_index, item) {
//禁止左滑
// #ifdef APP-PLUS
let pages = getCurrentPages();
let page = pages[pages.length - 1];
let currentWebview = page.$getAppWebview()
currentWebview.setStyle({
popGesture: 'none'
})
// #endif
let shareInfo = {
href: "https://uniapp.dcloud.io",
title: "分享",
desc: "分享",
imgUrl: "/static/logo.png"
};
let shareList = [{
icon: "/static/images/wechat_f.png",
text: "微信好友"
},
{
icon: "/static/images/wechat_m.png",
text: "朋友圈"
},
// {
// icon: "/static/images/qq_f.png",
// text: "QQ好友"
// },
// {
// icon: "/static/images/qq_space.png",
// text: "QQ空间"
// },
{
icon: "/static/images/wei_b.png",
text: "微博"
},
// {
// icon: "/static/images/reportColl.png",
// text: this.videoList[video_index].collectionStatus != 1 ? "收藏" : "取消收藏",
// },
{
icon: "/static/images/share-copyurl.png",
text: "复制链接"
},
{
icon: "/static/images/reportIcon.png",
text: "举报"
},
{
icon: "/static/images/share-mores.png",
text: "更多"
},
];
// 判断是否安装某个应用
if (plus.runtime.isApplicationExist({
pname: 'com.tencent.mm',
action: 'weixin://'
})) {
console.log("微信已安装");
} else {
console.log("微信未安装");
shareList = shareList.filter((share_item, share_index) => {
return share_item.text != '微信好友' && share_item.text != '朋友圈'
})
}
if (plus.runtime.isApplicationExist({
pname: 'com.sina.weibo',
action: 'sinaweibo://'
})) {
console.log("微博已安装");
} else {
console.log("微博未安装");
shareList = shareList.filter((share_item, share_index) => {
return share_item.text != '微博' && share_item.text != '微博'
})
}
this.shareObj = share(shareInfo, shareList, (index) => {
this.shareObj.shareMenu.hide();
this.shareObj.alphaBg.hide();
if (uni.getStorageSync('userId') == '') { //先登录才可分享
this.showDisread = true
return
}
let shareObj = {
href: item.playAddr || "",
title: item.title || "",
summary: item.produce || "",
success: (res) => {
uni.showToast({
title: '分享成功',
icon: 'success'
})
},
fail: (err) => {
console.log("fail:" + JSON.stringify(err));
}
}
let action_item = shareList.filter((shareItem, shareIndex) => {
return index == shareIndex ? shareItem.text : ''
})
if (action_item[0].text == '微信好友') {
// delete shareObj.href
// delete shareObj.summary
shareObj.provider = "weixin";
shareObj.scene = "WXSceneSession";
shareObj.type = 0;
// shareObj.imageUrl = item.imageAddr || "";
shareObj.imageUrl =
'https://outin-89ea8980612711ebaa8b00163e1c94a4.oss-cn-shanghai.aliyuncs.com/image/default/1F9F3067C82D472789728D18FEC2D287-6-2.jpeg';
shareObj.href = 'http://www.chosentech.vip:1011?userId=' + uni.getStorageSync("userId") +
'&uuid=' + item.uuid
uni.share(shareObj);
} else if (action_item[0].text == '朋友圈') {
shareObj.provider = "weixin";
shareObj.scene = "WXSenceTimeline";
shareObj.type = 0;
// shareObj.imageUrl = shareInfo.imgUrl || "";
shareObj.imageUrl =
'https://outin-89ea8980612711ebaa8b00163e1c94a4.oss-cn-shanghai.aliyuncs.com/image/default/1F9F3067C82D472789728D18FEC2D287-6-2.jpeg';
shareObj.href = 'https://itunes.apple.com/cn/app/id1573922190'
uni.share(shareObj);
} else if (action_item[0].text == '微博') {
shareObj.provider = "sinaweibo";
shareObj.type = 0;
shareObj.imageUrl = item.imageAddr || "";
shareObj.href = 'http://www.chosentech.vip:1010'
uni.share(shareObj);
} else if (action_item[0].text == '举报') {
uni.navigateTo({
url: '/pages/index/report/report?uuid=' + this.uuid + '&type=' + 'video',
animationType: 'slide-in-right',
animationDuration: 200
})
} else if (action_item[0].text == '复制链接') {
uni.setClipboardData({
data: '点击此处下载app观看https://itunes.apple.com/cn/app/id1573922190',
complete() {
uni.showToast({
title: "已复制到剪贴板"
})
}
})
} else if (action_item[0].text == '更多') {
plus.share.sendWithSystem({
type: 'text',
content: item.title + '点击此处下载app观看',
href: 'https://itunes.apple.com/cn/app/id1573922190'
}, function() {
console.log('分享成功');
}, function(e) {
console.log('分享失败:' + JSON.stringify(e));
});
}
});
this.$nextTick(() => {
this.shareObj.alphaBg.show();
this.shareObj.shareMenu.show();
})
},
fatherMethod(addItem) {
if (addItem == 'addItem') {
this.videoList[this.commentIndex].commentCount++
} else if (addItem == 'hidden') {
this.showDisread = true
}
},
playEnd() { //播放结束弹出相关推荐
this.isReplay = false
},
toReplay(e) { //重播
e.stopPropagation();
this.replayActionVideo()
this.showRelevRecomVideo = false
this.$refs[`video_${this.moveFlagVideo}`][0].toReplayVideo()
}
}
}
<style lang="scss" scoped>
.page {
flex: 1;
overflow: hidden;
position: relative;
background-color: #000;
}
.swiper {
position: relative;
background-color: #000;
}
.left-div {
position: absolute;
top: 0;
justify-content: center;
align-items: center;
}
.right-div {
position: absolute;
top: 0;
justify-content: center;
align-items: center;
}
.title-text {
font-size: 16px;
color: #000000;
}
.video-box {
position: relative;
// background-color: #000;
}
.cover-view-center {
position: fixed;
justify-content: center;
align-items: center;
z-index: 999;
}
// 视频排行榜
.ranking-title {
margin-left: 37rpx;
font-size: 12px;
color: #C0C0C0;
}
.ranking-content {
width: 750rpx;
.ranking-list {
.list-items {
padding: 0 37rpx;
margin-bottom: 37rpx;
.items-left {
position: relative;
flex-direction: row;
justify-content: center;
align-items: center;
height: 178rpx;
.ranking-image-items {
width: 288rpx;
height: 178rpx;
border-radius: 22rpx;
}
.video-time {
position: absolute;
top: 138rpx;
right: 10rpx;
z-index: 99;
width: 80rpx;
// height: 36rpx;
padding: 2rpx 2rpx;
text-align: center;
// line-height: 36rpx;
font-size: 20rpx;
border-radius: 18rpx;
color: #FFFFFF;
background-color: rgba(103, 94, 94, 0.6);
}
}
.items-right {
flex: 1;
flex-direction: column;
justify-content: space-between;
height: 180rpx;
padding-left: 28rpx;
.items-right-title {
width: 389rpx;
text-overflow: ellipsis;
lines: 2;
overflow: hidden;
font-size: 28rpx;
color: #FFFFFF;
}
.items-from {
font-size: 24rpx;
color: #C0C0C0;
}
.items-num {
flex-direction: row;
justify-content: space-between;
align-items: center;
.items-num-text {
font-size: 24rpx;
color: #C0C0C0;
}
}
}
}
}
}
.cover-view-top {
position: fixed;
width: 750rpx;
height: 150px;
overflow: hidden;
}
.change-screen {
position: fixed;
margin-left: 19rpx;
text-align: center;
padding: 19rpx;
border-radius: 50%;
z-index: 99999;
}
.cover-view-left {
//底部头部信息位置
position: absolute;
bottom: 200upx;
z-index: 9999;
font-size: 16px;
color: #FFFFFF;
}
.cover-left-title {
width: 750rpx;
position: absolute;
bottom: 88upx;
z-index: 9999;
background: linear-gradient(to top, rgba(0, 0, 0, 0.5) 100%, rgba(0, 0, 0, 0) 0%);
}
.produce-body {
margin-left: 19rpx;
// margin-bottom: 27rpx;
// flex-direction: row;
.cover-produce-img {
// margin-right: 12rpx;
width: 37rpx;
height: 37rpx;
}
.produce-text {
font-size: 25rpx;
color: #FFFFFF;
// margin-bottom: 20upx;
}
.produce-activy,
.produce-products {
flex-direction: row;
align-items: center;
padding-left: 6rpx;
padding-right: 12rpx;
padding-top: 6rpx;
padding-bottom: 6rpx;
border-radius: 6rpx;
background-color: rgba(255, 255, 255, .1);
}
}
.cover-left-body {
align-items: center;
flex-direction: row;
height: 50upx;
// margin-bottom: 19rpx;
}
.left-avatar-img {
width: 67upx;
height: 67upx;
opacity: 0.9;
border-radius: 50%;
}
.left-avatar-text {
margin-left: 10rpx;
margin-right: 23rpx;
font-size: 30rpx;
color: #FFFFFF;
}
.left-title-produces {
lines: 1;
overflow: hidden;
position: relative;
color: #FFFFFF;
font-size: 23rpx;
}
.header-back-btn {
position: fixed;
left: 19rpx;
width: 38rpx;
height: 40rpx;
}
.header-share-btn {
position: absolute;
width: 50rpx;
height: 54rpx;
// right: 10upx;
}
.left-text {
font-size: 27rpx;
color: #FFFFFF;
margin-bottom: 15upx;
}
.desc-text {
// width: 650rpx;
flex: 1;
// text-overflow: ellipsis;
overflow: hidden;
position: relative;
line-height: 20px;
max-height: 40px;
font-size: 23rpx;
color: #FFFFFF;
}
.open-text-btn {
flex-direction: row;
position: absolute;
bottom: 0;
right: 0;
padding-left: 12rpx;
padding-right: 12rpx;
padding-top: 8rpx;
padding-bottom: 8rpx;
font-size: 23rpx;
border-radius: 8rpx;
background-color: rgba(255, 255, 255, .15);
color: #FFFFFF;
}
.viedo-label {
margin-top: 20rpx;
flex-direction: row;
justify-content: flex-start;
flex-wrap: wrap;
.viedo-label-view {
margin-bottom: 10rpx;
margin-right: 20rpx;
padding: 6rpx 16rpx;
border-radius: 20rpx;
background-color: rgba(255, 255, 255, .15);
.viedo-label-text {
text-align: center;
font-size: 22rpx;
color: #FFFFFF;
}
}
}
.avater {
border-radius: 50upx;
border-color: #fff;
border-style: solid;
border-width: 2px;
}
.cover-view-right {
position: absolute;
bottom: 190rpx;
right: 20upx;
z-index: 9999;
display: flex;
flex-direction: column;
align-items: center;
}
.right-text-avater {
position: absolute;
font-size: 14px;
top: 80upx;
left: 30upx;
text-align: center;
}
.avater-icon {
height: 40upx;
width: 40upx;
color: #fff;
background-color: #DD524D;
border-radius: 50%;
position: absolute;
left: 30upx;
top: -20upx;
}
.right-text {
text-align: center;
font-size: 14px;
color: #FFFFFF;
// margin-bottom: 50upx;
height: 20px;
}
.right-text-mt {
// margin-top: 12rpx;
margin-bottom: 54rpx;
font-size: 27rpx;
text-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2);
}
.img {
height: 56rpx;
width: 56rpx;
}
.cover-view-footer {
flex-direction: row;
justify-content: flex-end;
align-items: center;
position: absolute;
width: 750upx;
// bottom: 40upx;
z-index: 9999;
.cover-footer-time {
font-size: 23rpx;
color: #626262;
}
}
// 了解更多
.collect-mask {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
transition: all 0.3s ease;
}
.collect-content {
position: fixed;
right: 0;
bottom: 0;
left: 0;
width: 750rpx;
border-top-left-radius: 37rpx;
border-top-right-radius: 37rpx;
background-color: #232324;
.collect-header-title {
flex: 1;
flex-direction: row;
justify-content: center;
align-items: center;
.collect-header {
margin: 37rpx 19rpx;
text-align: center;
font-size: 30rpx;
color: #626262;
}
.collect-img-left,
.collect-img-right {
width: 28rpx;
height: 4rpx;
}
}
.collect-close-img {
margin-right: 37rpx;
width: 30rpx;
height: 30rpx;
}
.collect-body {
padding: 37rpx 74rpx;
.collect-desc {
color: #FFFFFF;
font-size: 37rpx;
}
}
.conllect-commit-btn {
position: fixed;
left: 0;
right: 0;
bottom: 70rpx;
padding: 0 74rpx;
.commit-btns {
height: 92rpx;
line-height: 93rpx;
}
}
}
</style>