2 Commits

  1. 121
      src/views/homePage.vue

121
src/views/homePage.vue

@ -375,9 +375,9 @@ const chartInteractionTimer = ref(null); // 图表交互检测定时器
//
const getCurrentScrollContainer = () => {
if (activeTab.value === 'AIchat') {
if (activeTab.value === "AIchat") {
return tabContentAIchat.value;
} else if (activeTab.value === 'AiEmotion') {
} else if (activeTab.value === "AiEmotion") {
return tabContentAiEmotion.value;
}
return null;
@ -408,7 +408,12 @@ const throttledSmoothScrollToBottom = _.throttle(smoothScrollToBottom, 300, {
// AiEmotion
const debouncedAiEmotionScrollToBottom = _.debounce(() => {
if (activeTab.value === 'AiEmotion' && isAiEmotionAutoScrollEnabled.value && !isAiEmotionUserScrolling.value && !isChartInteracting.value) {
if (
activeTab.value === "AiEmotion" &&
isAiEmotionAutoScrollEnabled.value &&
!isAiEmotionUserScrolling.value &&
!isChartInteracting.value
) {
const container = tabContentAiEmotion.value;
if (container) {
container.scrollTop = container.scrollHeight - container.offsetHeight;
@ -420,21 +425,25 @@ const debouncedAiEmotionScrollToBottom = _.debounce(() => {
const startAiEmotionHeightObserver = () => {
//
stopAiEmotionHeightObserver();
isAiEmotionAutoScrollEnabled.value = true;
// ResizeObserver
aiEmotionHeightObserver.value = new ResizeObserver((entries) => {
if (isAiEmotionAutoScrollEnabled.value && activeTab.value === 'AiEmotion' && !isChartInteracting.value) {
if (
isAiEmotionAutoScrollEnabled.value &&
activeTab.value === "AiEmotion" &&
!isChartInteracting.value
) {
debouncedAiEmotionScrollToBottom();
}
});
// document.body
if (document.body) {
aiEmotionHeightObserver.value.observe(document.body);
}
// MutationObserverDOM
const mutationObserver = new MutationObserver((mutations) => {
let shouldScroll = false;
@ -455,12 +464,17 @@ const startAiEmotionHeightObserver = () => {
}
}
});
if (shouldScroll && isAiEmotionAutoScrollEnabled.value && activeTab.value === 'AiEmotion' && !isChartInteracting.value) {
if (
shouldScroll &&
isAiEmotionAutoScrollEnabled.value &&
activeTab.value === "AiEmotion" &&
!isChartInteracting.value
) {
debouncedAiEmotionScrollToBottom();
}
});
// AiEmotionDOM
const aiEmotionContainer = tabContentAiEmotion.value;
if (aiEmotionContainer) {
@ -471,17 +485,19 @@ const startAiEmotionHeightObserver = () => {
characterData: true,
});
}
// mutationObserver便
aiEmotionHeightObserver.value.mutationObserver = mutationObserver;
// AiEmotion
if (aiEmotionContainer) {
aiEmotionContainer.addEventListener('scroll', handleAiEmotionUserScroll, { passive: true });
aiEmotionContainer.addEventListener("scroll", handleAiEmotionUserScroll, {
passive: true,
});
// 便
aiEmotionHeightObserver.value.scrollListener = handleAiEmotionUserScroll;
}
console.log("AiEmotion页面高度监听器已启动");
};
@ -489,12 +505,12 @@ const startAiEmotionHeightObserver = () => {
const handleAiEmotionUserScroll = () => {
//
isAiEmotionUserScrolling.value = true;
//
if (aiEmotionScrollTimer.value) {
clearTimeout(aiEmotionScrollTimer.value);
}
// 2
// aiEmotionScrollTimer.value = setTimeout(() => {
// isAiEmotionUserScrolling.value = false;
@ -506,7 +522,7 @@ const handleAiEmotionUserScroll = () => {
const handleChartInteractionStart = () => {
console.log("图表交互开始,临时禁用自动滚动");
isChartInteracting.value = true;
//
if (chartInteractionTimer.value) {
clearTimeout(chartInteractionTimer.value);
@ -518,7 +534,7 @@ const handleChartInteractionEnd = () => {
if (chartInteractionTimer.value) {
clearTimeout(chartInteractionTimer.value);
}
// 1
chartInteractionTimer.value = setTimeout(() => {
isChartInteracting.value = false;
@ -532,7 +548,7 @@ window.handleChartInteractionEnd = handleChartInteractionEnd;
// AiEmotion
const handleAiEmotionScrollToBottom = () => {
if (activeTab.value === 'AiEmotion') {
if (activeTab.value === "AiEmotion") {
const container = tabContentAiEmotion.value;
if (container) {
// 使nextTickDOM
@ -548,32 +564,38 @@ const handleAiEmotionScrollToBottom = () => {
const stopAiEmotionHeightObserver = () => {
isAiEmotionAutoScrollEnabled.value = false;
isAiEmotionUserScrolling.value = false;
//
if (aiEmotionScrollTimer.value) {
clearTimeout(aiEmotionScrollTimer.value);
aiEmotionScrollTimer.value = null;
}
if (aiEmotionHeightObserver.value) {
// ResizeObserver
aiEmotionHeightObserver.value.disconnect();
// MutationObserver
if (aiEmotionHeightObserver.value.mutationObserver) {
aiEmotionHeightObserver.value.mutationObserver.disconnect();
aiEmotionHeightObserver.value.mutationObserver = null;
}
//
if (aiEmotionHeightObserver.value.scrollListener && tabContentAiEmotion.value) {
tabContentAiEmotion.value.removeEventListener('scroll', aiEmotionHeightObserver.value.scrollListener);
if (
aiEmotionHeightObserver.value.scrollListener &&
tabContentAiEmotion.value
) {
tabContentAiEmotion.value.removeEventListener(
"scroll",
aiEmotionHeightObserver.value.scrollListener
);
aiEmotionHeightObserver.value.scrollListener = null;
}
aiEmotionHeightObserver.value = null;
}
console.log("AiEmotion页面高度监听器已停止");
};
@ -685,7 +707,7 @@ setTimeout(() => {
const heightListener = () => {
const tabContainer = getCurrentScrollContainer();
if (!tabContainer) return;
let befortop = 0;
const scrollHandler = () => {
@ -837,7 +859,8 @@ const touchmoveHandler = (e) => {
}
//
const currentContainer = getCurrentScrollContainer();
const isScrollableArea = currentContainer && currentContainer.contains(e.target);
const isScrollableArea =
currentContainer && currentContainer.contains(e.target);
//
if (!isScrollableArea) {
@ -905,12 +928,14 @@ const backToHome = () => {
if (env == "development" || env == "test") {
window.parent.location.href =
"http://121.89.234.155:8807/hljw/homepage?menu=999999991";
} else if (env == "product") {
window.parent.location.href =
"https://web.homilychart.com/product/hljw/homepage?menu=999999991";
} else if (env == "production") {
window.parent.location.href =
"https://web.homilychart.com/hljw/homepage?menu=999999991";
} else {
window.parent.postMessage(
{
type: "NAVIGATE_TO_HOMEPAGE",
menu: "999999991",
},
"*"
);
}
// window.parent.location.href = window.parent.document.referrer
}
@ -983,7 +1008,6 @@ const goChange = () => {
setTimeout(() => {
changeSuccessDialogVisible.value = false;
}, 3000);
};
// 8.18Token end
@ -1031,17 +1055,17 @@ onUnmounted(() => {
}
// AiEmotion
stopAiEmotionHeightObserver();
//
if (chartInteractionTimer.value) {
clearTimeout(chartInteractionTimer.value);
}
if (window.handleChartInteractionStart) {
delete window.handleChartInteractionStart;
}
if (window.handleChartInteractionEnd) {
delete window.handleChartInteractionEnd;
}
if (chartInteractionTimer.value) {
clearTimeout(chartInteractionTimer.value);
}
if (window.handleChartInteractionStart) {
delete window.handleChartInteractionStart;
}
if (window.handleChartInteractionEnd) {
delete window.handleChartInteractionEnd;
}
});
</script>
@ -1142,7 +1166,6 @@ onUnmounted(() => {
<div class="pc-count-number">{{ UserCount }}</div>
</div>
<div class="pc-clickGetCount">点击获取Token</div>
</div>
<div class="pc-backToHomeBtn" @click="backToHome()">
<img
@ -1174,7 +1197,7 @@ onUnmounted(() => {
@enableInput="enableInput"
/>
</div>
<!-- AiEmotion页面的独立滚动容器 -->
<div
v-show="activeTab === 'AiEmotion'"

Loading…
Cancel
Save