@@ -41,9 +45,7 @@ const actions = computed(() => hero.value.actions ?? [])
@@ -181,52 +183,19 @@ const actions = computed(() => hero.value.actions ?? [])
height: calc(100% + var(--vp-footer-height, 0px));
}
-.bg-filter::before {
+.bg-filter::after {
position: absolute;
top: 0;
- right: 0;
- bottom: 0;
left: 0;
- z-index: 1;
+ width: 100%;
+ height: 20%;
content: "";
- backdrop-filter: blur(150px);
- transform: translate3d(0, 0, 0);
+ background: linear-gradient(var(--vp-c-bg) 0, transparent 100%);
}
-.g {
- position: absolute;
- opacity: 0.5;
- transform: translate3d(0, 0, 0);
-}
-
-.g-1 {
- bottom: 100px;
- left: 50%;
- width: 714px;
- height: 390px;
- clip-path: polygon(0 10%, 30% 0, 100% 40%, 70% 100%, 20% 90%);
- background: var(--vp-c-yellow-3);
- transform: translate(-50%, 0);
-}
-
-.g-2 {
- bottom: 0;
- left: 30%;
- width: 1000px;
- height: 450px;
- clip-path: polygon(10% 0, 100% 70%, 100% 100%, 20% 90%);
- background: var(--vp-c-red-3);
- transform: translate(-50%, 0);
-}
-
-.g-3 {
- bottom: 0;
- left: 70%;
- width: 1000px;
- height: 450px;
- clip-path: polygon(80% 0, 100% 70%, 100% 100%, 20% 90%);
- background: var(--vp-c-purple-3);
- transform: translate(-50%, 0);
+.bg-filter canvas {
+ width: 100%;
+ height: 100%;
}
/* =========== background filter end ======= */
diff --git a/theme/src/client/composables/home.ts b/theme/src/client/composables/home.ts
new file mode 100644
index 00000000..24132e04
--- /dev/null
+++ b/theme/src/client/composables/home.ts
@@ -0,0 +1,56 @@
+import type { Ref } from 'vue'
+import { computed, onMounted, onUnmounted } from 'vue'
+import { useDarkMode } from './darkMode.js'
+
+export function useHomeHeroFilterBackground(
+ canvas: Ref,
+ enable: Ref,
+) {
+ const isDark = useDarkMode()
+
+ let ctx: CanvasRenderingContext2D | null = null
+ let t = 0
+ let timer: number
+
+ const F = computed(() => isDark.value ? 32 : 220)
+
+ onMounted(() => {
+ if (canvas.value && enable.value) {
+ ctx = canvas.value.getContext('2d')!
+ timer && window.cancelAnimationFrame(timer)
+ run()
+ }
+ })
+
+ onUnmounted(() => {
+ timer && window.cancelAnimationFrame(timer)
+ })
+
+ function run() {
+ for (let x = 0; x <= 35; x++) {
+ for (let y = 0; y <= 35; y++)
+ col(x, y, R(x, y, t), G(x, y, t), B(x, y, t))
+ }
+ t = t + 0.020
+ timer = window.requestAnimationFrame(run)
+ }
+
+ function col(x: number, y: number, r: number, g: number, b: number) {
+ if (!ctx)
+ return
+ ctx.fillStyle = `rgb(${r},${g},${b})`
+ ctx.fillRect(x, y, 1, 1)
+ }
+
+ function R(x: number, y: number, t: number) {
+ return (Math.floor(F.value + 36 * Math.cos((x * x - y * y) / 300 + t)))
+ }
+
+ function G(x: number, y: number, t: number) {
+ return (Math.floor(F.value + 36 * Math.sin((x * x * Math.cos(t / 4) + y * y * Math.sin(t / 3)) / 300)))
+ }
+
+ function B(x: number, y: number, t: number) {
+ return (Math.floor(F.value + 36 * Math.sin(5 * Math.sin(t / 9) + ((x - 100) * (x - 100) + (y - 100) * (y - 100)) / 1100)))
+ }
+}
diff --git a/theme/src/client/composables/index.ts b/theme/src/client/composables/index.ts
index 6af2388c..07b9e931 100644
--- a/theme/src/client/composables/index.ts
+++ b/theme/src/client/composables/index.ts
@@ -5,7 +5,7 @@ export * from './useNavLink.js'
export * from './sidebar.js'
export * from './aside.js'
export * from './page.js'
-// export * from './readingTime.js'
export * from './blog.js'
export * from './locale.js'
export * from './useRouteQuery.js'
+export * from './waterMark.js'