aboutsummaryrefslogtreecommitdiff
path: root/src/lib/Media/hoverCover.ts
diff options
context:
space:
mode:
authorFuwn <[email protected]>2023-12-28 20:04:27 -0800
committerFuwn <[email protected]>2023-12-28 20:04:27 -0800
commit48b0892454f981b5b3e964b85e30daa087c44814 (patch)
tree92662db368dd4457f3dabef6d57100c098f5b73d /src/lib/Media/hoverCover.ts
parentfeat(media): all title formats (diff)
downloaddue.moe-48b0892454f981b5b3e964b85e30daa087c44814.tar.xz
due.moe-48b0892454f981b5b3e964b85e30daa087c44814.zip
refactor(schedule): move hover cover to component
Diffstat (limited to 'src/lib/Media/hoverCover.ts')
-rw-r--r--src/lib/Media/hoverCover.ts45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/lib/Media/hoverCover.ts b/src/lib/Media/hoverCover.ts
new file mode 100644
index 00000000..5fc98f33
--- /dev/null
+++ b/src/lib/Media/hoverCover.ts
@@ -0,0 +1,45 @@
+import type { Media } from '$lib/AniList/media';
+import type { SubsPleaseEpisode } from './Anime/Airing/Subtitled/subsPlease';
+
+interface OnMouseEnterLeave {
+ item: SubsPleaseEpisode | null;
+ media: Media | null;
+}
+
+export const onMouseEnter = (item: SubsPleaseEpisode, media: Media | null) => {
+ return { item, media } as OnMouseEnterLeave;
+};
+
+export const onMouseLeave = () => {
+ return { item: null, media: null } as OnMouseEnterLeave;
+};
+
+interface OnMouseMove {
+ height: number;
+ style: string;
+}
+
+export const onMouseMove = (event: MouseEvent) => {
+ const imageWidth = 300;
+ const offset = 10;
+ let imageLeft = 0;
+ let imageTop = 0;
+ const image = document.getElementsByClassName('hover-image')[0] as HTMLImageElement;
+ const response: OnMouseMove = {
+ height: 0,
+ style: ''
+ };
+
+ image.onload = () => (response.height = image.height);
+ imageLeft =
+ event.pageX + imageWidth + offset > window.innerWidth
+ ? event.pageX - imageWidth - offset
+ : event.pageX + offset;
+ imageTop =
+ event.pageY + response.height + offset > window.innerHeight
+ ? event.pageY - response.height
+ : event.pageY + offset;
+ response.style = `top: ${imageTop}px; left: ${imageLeft}px;`;
+
+ return response;
+};