You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

184 lines
4.6 KiB

<template>
<div>
<div>
<el-image style="animation: header-effect 2s"
class="background-image"
v-once
lazy
:src="$constant.random_image+new Date()+Math.floor(Math.random()*10)"
fit="cover">
<div slot="error" class="image-slot background-image-error"></div>
</el-image>
<!-- 输入框 -->
<div class="message-in" style="text-align: center">
<h2 class="message-title">树洞</h2>
<div>
<input class="message-input"
type="text"
style="outline: none;width: 70%"
placeholder="留下点什么啦~"
v-model="messageContent"
@click="show = true"
maxlength="60"/>
<button v-show="show"
style="margin-left: 12px;cursor: pointer;width: 20%"
@click="submitMessage"
class="message-input">发射
</button>
</div>
</div>
<!-- 弹幕 -->
<div class="barrage-container">
<vue-baberrage :barrageList="barrageList" :loop="true"></vue-baberrage>
</div>
</div>
<div class="comment-wrap">
<div class="comment-content">
<comment :source="$constant.source" :type="'message'" :userId="$constant.userId"></comment>
</div>
<myFooter></myFooter>
</div>
</div>
</template>
<script>
const comment = () => import( "./comment/comment");
const myFooter = () => import( "./common/myFooter");
export default {
components: {
comment,
myFooter
},
data() {
return {
show: false,
messageContent: "",
// background: {"background": "url(" + this.$store.state.webInfo.backgroundImage + ") center center / cover no-repeat"},
barrageList: []
};
},
created() {
this.getTreeHole();
},
methods: {
getTreeHole() {
this.$http.get(this.$constant.baseURL + "/webInfo/listTreeHole")
.then((res) => {
if (!this.$common.isEmpty(res.data)) {
res.data.forEach(m => {
this.barrageList.push({
id: m.id,
avatar: m.avatar,
msg: m.message,
time: Math.floor(Math.random() * 10 + 5)
});
});
}
})
.catch((error) => {
this.$message({
message: error.message,
type: "error"
});
});
},
submitMessage() {
if (this.messageContent.trim() === "") {
this.$message({
message: "你还没写呢~",
type: "warning",
});
return;
}
let treeHole = {
message: this.messageContent.trim()
};
if (!this.$common.isEmpty(this.$store.state.currentUser) && !this.$common.isEmpty(this.$store.state.currentUser.avatar)) {
treeHole.avatar = this.$store.state.currentUser.avatar;
}
this.$http.post(this.$constant.baseURL + "/webInfo/saveTreeHole", treeHole)
.then((res) => {
if (!this.$common.isEmpty(res.data)) {
this.barrageList.push({
id: res.data.id,
avatar: res.data.avatar,
msg: res.data.message,
time: Math.floor(Math.random() * 10 + 5)
});
}
})
.catch((error) => {
this.$message({
message: error.message,
type: "error"
});
});
this.messageContent = "";
this.show = false;
}
}
}
</script>
<style scoped>
.message-in {
position: absolute;
left: 50%;
top: 40%;
transform: translate(-50%, -50%);
color: var(--white);
animation: hideToShow 2.5s;
width: 360px;
z-index: 10;
}
.message-title {
user-select: none;
text-align: center;
}
.message-input {
border-radius: 1.2rem;
border: var(--white) 1px solid;
color: var(--white);
background: var(--transparent);
padding: 10px 10px;
}
.message-input::-webkit-input-placeholder {
color: var(--white);
}
.barrage-container {
position: absolute;
top: 50px;
left: 0;
right: 0;
bottom: 0;
height: calc(100% - 50px);
width: 100%;
user-select: none;
overflow: hidden;
}
.comment-wrap {
background: var(--background);
position: absolute;
top: 100vh;
width: 100%;
}
.comment-content {
max-width: 800px;
margin: 0 auto;
padding: 40px 20px;
}
</style>