204 lines
4.0 KiB
Vue
204 lines
4.0 KiB
Vue
![]() |
<template>
|
|||
|
<view>
|
|||
|
<message-list @hidedKeyboard="hidedKeyboard">
|
|||
|
<template #chat-bar="{keyboardHeight}">
|
|||
|
<chat-bar ref="chatBar" :keyboardHeight="keyboardHeight" @openGift="openGift"></chat-bar>
|
|||
|
</template>
|
|||
|
</message-list>
|
|||
|
|
|||
|
<gift-bar ref="gift" @sendGift="sendGift"></gift-bar>
|
|||
|
|
|||
|
<view class="svga-box" :class="giftFlag ? 'svga-show': 'svga-hide'">
|
|||
|
<c-svga ref="cSvgaRef" :canvasId='canvasId' :src="src" :loops='1' :auto-play="true" @frame='onFrame' @finished='onFinished' @percentage='onPercentage' @loaded='onLoaded'></c-svga>
|
|||
|
<view class="close-btn" @click="closeSvga"></view>
|
|||
|
</view>
|
|||
|
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
|
|||
|
<script>
|
|||
|
import MessageList from '@/pages/im/components/messageList.vue';
|
|||
|
import ChatBar from "@/components/chat-bar/chat-bar.vue"
|
|||
|
import GiftBar from "@/components/gift-bar/gift-bar.vue"
|
|||
|
export default {
|
|||
|
components: {
|
|||
|
MessageList,
|
|||
|
ChatBar,
|
|||
|
GiftBar,
|
|||
|
},
|
|||
|
data() {
|
|||
|
return {
|
|||
|
giftFlag: false,
|
|||
|
src: 'https://cos.duopei.feiniaowangluo.com/1866/reward/gift/171241866882267KgIoSuLt.svga',
|
|||
|
canvasId: 'myCanvas',
|
|||
|
modal: true,
|
|||
|
current: 0, // tabs组件的current值,表示当前活动的tab选项
|
|||
|
swiperCurrent: 0,
|
|||
|
typeidx: 0,
|
|||
|
currentTab: 1,
|
|||
|
showMoreSheet: false,
|
|||
|
modalButton: [{
|
|||
|
text: "置顶该聊天",
|
|||
|
type: "green",
|
|||
|
plain: false
|
|||
|
},
|
|||
|
{
|
|||
|
text: "删除该聊天",
|
|||
|
type: "green",
|
|||
|
plain: false
|
|||
|
},
|
|||
|
{
|
|||
|
text: "设置免打扰",
|
|||
|
type: "green",
|
|||
|
plain: false
|
|||
|
}],
|
|||
|
itemList: [{
|
|||
|
text: "删除",
|
|||
|
color: "#2B2B2B"
|
|||
|
}, {
|
|||
|
text: "举报",
|
|||
|
color: "#2B2B2B"
|
|||
|
}, {
|
|||
|
text: "分享",
|
|||
|
color: "#2B2B2B"
|
|||
|
}],
|
|||
|
}
|
|||
|
},
|
|||
|
created() {
|
|||
|
|
|||
|
},
|
|||
|
computed: {
|
|||
|
swiperHeight: {
|
|||
|
get() {
|
|||
|
let that = this;
|
|||
|
return ' calc( 100vh - 100rpx )';
|
|||
|
},
|
|||
|
set(v) {}
|
|||
|
},
|
|||
|
},
|
|||
|
methods: {
|
|||
|
hidedKeyboard() {
|
|||
|
this.$refs.chatBar.hideDrawer();
|
|||
|
},
|
|||
|
toChat() {
|
|||
|
this.$u.route({
|
|||
|
url: 'pages/chat/index',
|
|||
|
});
|
|||
|
},
|
|||
|
//调用此方法显示组件
|
|||
|
showModal() {
|
|||
|
this.modal = true;
|
|||
|
},
|
|||
|
//隐藏组件
|
|||
|
hideModal() {
|
|||
|
this.modal = false;
|
|||
|
},
|
|||
|
handleClick(e){
|
|||
|
let index = e.index;
|
|||
|
if (index === 0) {
|
|||
|
|
|||
|
} else {
|
|||
|
|
|||
|
}
|
|||
|
this.hideModal();
|
|||
|
},
|
|||
|
openGift() {
|
|||
|
this.$refs.gift.open();
|
|||
|
},
|
|||
|
sendGift(e) {
|
|||
|
this.src = e.src;
|
|||
|
this.$refs.cSvgaRef.call('startAnimation');
|
|||
|
this.giftFlag = true;
|
|||
|
},
|
|||
|
onFinished() {
|
|||
|
this.giftFlag = false;
|
|||
|
console.log('动画停止播放时回调');
|
|||
|
},
|
|||
|
onFrame(frame) {//动画播放至某帧后回调
|
|||
|
// console.log(frame);
|
|||
|
},
|
|||
|
onPercentage(percentage) { //动画播放至某进度后回调
|
|||
|
// console.log(percentage);
|
|||
|
},
|
|||
|
onLoaded() {
|
|||
|
this.$refs.cSvgaRef.call('setContentMode', 'AspectFill');
|
|||
|
console.log('加载完成');
|
|||
|
},
|
|||
|
closeSvga() {
|
|||
|
this.$refs.cSvgaRef.call('stopAnimation');
|
|||
|
this.giftFlag = false;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
</script>
|
|||
|
|
|||
|
<style lang="scss" scoped>
|
|||
|
.container {
|
|||
|
background-color: #fafafa;
|
|||
|
height: calc(100vh);
|
|||
|
padding-bottom: env(safe-area-inset-bottom);
|
|||
|
}
|
|||
|
|
|||
|
.nav-box {
|
|||
|
display: flex;
|
|||
|
justify-content: center;
|
|||
|
align-items: center;
|
|||
|
}
|
|||
|
|
|||
|
.tab-box {
|
|||
|
display: flex;
|
|||
|
justify-content: center;
|
|||
|
align-items: center;
|
|||
|
}
|
|||
|
|
|||
|
.tab-box .title-label {
|
|||
|
height: 44px;
|
|||
|
padding: 0 20rpx;
|
|||
|
display: flex;
|
|||
|
align-items: center;
|
|||
|
justify-content: center;
|
|||
|
position: relative;
|
|||
|
color: #333333;
|
|||
|
font-size: 28rpx;
|
|||
|
}
|
|||
|
|
|||
|
.tab-box .title-label text {
|
|||
|
font-weight: bold;
|
|||
|
transition: all 0.3s;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
.svga-box {
|
|||
|
position: fixed;
|
|||
|
top: 0;
|
|||
|
left: 0;
|
|||
|
z-index: 999999999;
|
|||
|
width: 100%;
|
|||
|
height: 100%;
|
|||
|
background-color: rgba(0, 0, 0, .7);
|
|||
|
|
|||
|
.close-btn {
|
|||
|
color: #fff;
|
|||
|
font-size: 14px;
|
|||
|
position: absolute;
|
|||
|
z-index: 999999999;
|
|||
|
//background: rgba(0, 0, 0, .5);
|
|||
|
padding: 5px 10px;
|
|||
|
|
|||
|
left: 0;
|
|||
|
right: 0;
|
|||
|
top: 0;
|
|||
|
bottom: 0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.svga-hide {
|
|||
|
transform: translate(-100%, 0);
|
|||
|
}
|
|||
|
|
|||
|
.svga-show {
|
|||
|
transform: translate(0, 0);
|
|||
|
}
|
|||
|
</style>
|