Skip to content

Commit 00af622

Browse files
liweijie0812uyarn
authored andcommitted
fix(watermark): fix fontColor for dark mode (#3697)
1 parent 9302c69 commit 00af622

File tree

2 files changed

+44
-22
lines changed

2 files changed

+44
-22
lines changed

src/watermark/watermark.tsx

Lines changed: 43 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
import {
2-
defineComponent, computed, ref, onMounted,
2+
defineComponent, computed, ref, onMounted, watch,
33
} from 'vue';
44
import generateBase64Url from '../_common/js/watermark/generateBase64Url';
55
import randomMovingStyle from '../_common/js/watermark/randomMovingStyle';
66
import injectStyle from '../_common/js/utils/injectStyle';
77
import { usePrefixClass } from '../hooks/useConfig';
88
import { useContent } from '../hooks/tnode';
99
import { useMutationObserver } from './hooks';
10+
import { useVariables } from '../hooks';
1011
import props from './props';
12+
import setStyle from '../_common/js/utils/setStyle';
1113

1214
export default defineComponent({
1315
name: 'TWatermark',
@@ -31,7 +33,10 @@ export default defineComponent({
3133
const offsetLeft = computed(() => props.offset?.[0] || gapX.value / 2);
3234

3335
const offsetTop = computed(() => props.offset?.[1] || gapY.value / 2);
34-
const bgImageOptions = {
36+
const { fontColor } = useVariables({
37+
fontColor: '--td-text-color-watermark',
38+
});
39+
const bgImageOptions = computed(() => ({
3540
width: props.width,
3641
height: props.height,
3742
rotate: rotate.value,
@@ -42,15 +47,46 @@ export default defineComponent({
4247
watermarkContent: props.watermarkContent,
4348
offsetLeft: offsetLeft.value,
4449
offsetTop: offsetTop.value,
50+
fontColor: fontColor.value,
51+
}));
52+
const removeWaterMark = () => {
53+
if (!watermarkContentRef.value) return;
54+
watermarkContentRef.value.remove();
55+
watermarkContentRef.value = null;
4556
};
4657

47-
onMounted(() => {
48-
generateBase64Url(bgImageOptions, (base64Url) => {
58+
const injectWaterMark = () => {
59+
generateBase64Url(bgImageOptions.value, (base64Url) => {
60+
removeWaterMark();
61+
4962
backgroundImage.value = base64Url;
63+
watermarkContentRef.value = document.createElement('div');
64+
setStyle(watermarkContentRef.value, {
65+
zIndex: props.zIndex,
66+
position: 'absolute',
67+
left: 0,
68+
right: 0,
69+
top: 0,
70+
bottom: 0,
71+
width: '100%',
72+
height: '100%',
73+
backgroundSize: `${gapX.value + props.width}px`,
74+
pointerEvents: 'none',
75+
backgroundRepeat: backgroundRepeat.value,
76+
backgroundImage: `url('${backgroundImage.value}')`,
77+
animation: props.movable ? `watermark infinite ${(props.moveInterval * 4) / 60}s` : 'none',
78+
});
79+
watermarkRef.value?.append(watermarkContentRef.value);
5080
});
51-
parent.value = watermarkRef.value?.parentElement;
52-
const keyframesStyle = randomMovingStyle();
53-
injectStyle(keyframesStyle);
81+
82+
if (props.movable) {
83+
const keyframesStyle = randomMovingStyle();
84+
injectStyle(keyframesStyle);
85+
}
86+
};
87+
watch(() => [props, fontColor.value], injectWaterMark, { deep: true, flush: 'post' });
88+
onMounted(() => {
89+
injectWaterMark();
5490

5591
useMutationObserver(
5692
parent.value,
@@ -87,22 +123,8 @@ export default defineComponent({
87123
backgroundImage,
88124
watermarkRef,
89125
watermarkContentRef,
90-
bgImageOptions,
91126
};
92127
},
93-
watch: {
94-
watermarkContent(content) {
95-
generateBase64Url(
96-
{
97-
...this.bgImageOptions,
98-
watermarkContent: content,
99-
},
100-
(base64Url) => {
101-
this.backgroundImage = base64Url;
102-
},
103-
);
104-
},
105-
},
106128
render() {
107129
const COMPONENT_NAME = usePrefixClass('watermark');
108130
const renderContent = useContent();

0 commit comments

Comments
 (0)