This commit is contained in:
qumeng039@126.com 2025-08-12 15:38:40 +08:00
parent 03393edb22
commit 1de6a166f7
3 changed files with 45 additions and 45 deletions

View File

@ -1,9 +1,13 @@
<template> <template>
<div :class="containerClass" ref="scrollContainer"> <div :class="containerClass" ref="scrollContainer">
<div class="scroll-content"> <div class="scroll-content">
<div v-for="(item, index) in displayData" :key="index" class="containner4-data" <div
:class="{ 'temporary-style': item.showTemporaryStyle }"> v-for="(item, index) in displayData"
<img :src="item.avatar" /> :key="index"
class="containner4-data"
:class="{ 'temporary-style': item.showTemporaryStyle }"
>
<img :src="item.avatar" />
<div class="data-content"> <div class="data-content">
<div class="commenter">{{ item.commenter }}</div> <div class="commenter">{{ item.commenter }}</div>
<div class="comment">{{ item.comment }}</div> <div class="comment">{{ item.comment }}</div>
@ -14,9 +18,8 @@
</template> </template>
<script setup> <script setup>
import { ref, watch, onMounted, onBeforeUnmount } from 'vue'; import { ref, watch, onMounted, onBeforeUnmount } from "vue"
// props
const props = defineProps({ const props = defineProps({
data: { data: {
type: Array, type: Array,
@ -24,74 +27,74 @@ const props = defineProps({
}, },
containerClass: { containerClass: {
type: String, type: String,
default: 'containner4-alldata' default: "containner4-alldata"
}, },
scrollSpeed: { scrollSpeed: {
type: Number, type: Number,
// 10
default: 10 default: 10
} }
}); })
// //
const scrollContainer = ref(null); const scrollContainer = ref(null)
const scrollTimer = ref(null); const scrollTimer = ref(null)
const displayData = ref([]); const displayData = ref([])
// //
const initDisplayData = () => { const initDisplayData = () => {
displayData.value = [...props.data, ...props.data]; displayData.value = [...props.data, ...props.data]
}; }
// //
const startAutoScroll = () => { const startAutoScroll = () => {
if (!scrollContainer.value) return; if (!scrollContainer.value) return
scrollTimer.value = setInterval(() => { scrollTimer.value = setInterval(() => {
scrollContainer.value.scrollTop += 1; scrollContainer.value.scrollTop += 1
if (scrollContainer.value.scrollTop >= scrollContainer.value.scrollHeight / 2) { if (scrollContainer.value.scrollTop >= scrollContainer.value.scrollHeight / 2) {
scrollContainer.value.scrollTop = 0; scrollContainer.value.scrollTop = 0
} }
}, props.scrollSpeed); }, props.scrollSpeed)
// //
const container = scrollContainer.value; const container = scrollContainer.value
container.addEventListener('mouseenter', stopScroll); container.addEventListener("mouseenter", stopScroll)
container.addEventListener('mouseleave', startAutoScroll); container.addEventListener("mouseleave", startAutoScroll)
}; }
// //
const stopScroll = () => { const stopScroll = () => {
if (scrollTimer.value) { if (scrollTimer.value) {
clearInterval(scrollTimer.value); clearInterval(scrollTimer.value)
scrollTimer.value = null; scrollTimer.value = null
} }
}; }
// //
watch(() => props.data, watch(
() => props.data,
(newVal) => { (newVal) => {
stopScroll(); stopScroll()
initDisplayData(); initDisplayData()
startAutoScroll(); startAutoScroll()
}, },
{ immediate: true } { immediate: true }
); )
// //
onMounted(() => { onMounted(() => {
initDisplayData(); initDisplayData()
startAutoScroll(); startAutoScroll()
}); })
onBeforeUnmount(() => { onBeforeUnmount(() => {
stopScroll(); stopScroll()
// //
if (scrollContainer.value) { if (scrollContainer.value) {
const container = scrollContainer.value; const container = scrollContainer.value
container.removeEventListener('mouseenter', stopScroll); container.removeEventListener("mouseenter", stopScroll)
container.removeEventListener('mouseleave', startAutoScroll); container.removeEventListener("mouseleave", startAutoScroll)
} }
}); })
</script> </script>
<style scoped> <style scoped>
@ -127,7 +130,7 @@ onBeforeUnmount(() => {
} }
.containner4-data { .containner4-data {
color: #E1F4FF; color: #e1f4ff;
font-family: "PingFang SC", sans-serif; font-family: "PingFang SC", sans-serif;
font-size: 14px; font-size: 14px;
font-style: normal; font-style: normal;
@ -137,7 +140,7 @@ onBeforeUnmount(() => {
align-items: center; align-items: center;
letter-spacing: 0.14px; letter-spacing: 0.14px;
padding: 12px 16px; padding: 12px 16px;
background-image: linear-gradient(135deg, #4ea2f566, #1C588F66); background-image: linear-gradient(135deg, #4ea2f566, #1c588f66);
border-radius: 10px; border-radius: 10px;
cursor: pointer; cursor: pointer;
margin-left: 10px; margin-left: 10px;
@ -151,7 +154,7 @@ onBeforeUnmount(() => {
.containner4-data:hover { .containner4-data:hover {
transform: translateY(-2px); transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(78, 162, 245, 0.3); box-shadow: 0 4px 12px rgba(78, 162, 245, 0.3);
background-image: linear-gradient(135deg, #4ea2f588, #1C588F88); background-image: linear-gradient(135deg, #4ea2f588, #1c588f88);
} }
.containner4-data img { .containner4-data img {
@ -171,7 +174,7 @@ onBeforeUnmount(() => {
.commenter { .commenter {
font-weight: 500; font-weight: 500;
color: #FFFFFF; color: #ffffff;
margin-bottom: 4px; margin-bottom: 4px;
} }
@ -183,4 +186,4 @@ onBeforeUnmount(() => {
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
</style> </style>

View File

@ -15,7 +15,6 @@
@pointerdown.stop="handleSectionPointerDown(time)" @pointerdown.stop="handleSectionPointerDown(time)"
></div> ></div>
</el-tooltip> </el-tooltip>
<div class="progress-bar" :style="trackStyle"></div> <div class="progress-bar" :style="trackStyle"></div>
<div class="active-sign"> <div class="active-sign">
<el-tooltip <el-tooltip
@ -26,7 +25,6 @@
> >
<div class="active-needle" :style="showHidden"></div> <div class="active-needle" :style="showHidden"></div>
</el-tooltip> </el-tooltip>
<el-tooltip <el-tooltip
:content="TansTimestamp(currentTime, 'YYYY.MM.DD HH:mm:ss')" :content="TansTimestamp(currentTime, 'YYYY.MM.DD HH:mm:ss')"
placement="bottom" placement="bottom"

View File

@ -42,7 +42,6 @@
</template> </template>
<script setup> <script setup>
import { ref } from "vue"
const props = defineProps({ const props = defineProps({
anlysisList: { anlysisList: {
type: Array, type: Array,