diff options
| author | Fuwn <[email protected]> | 2023-12-28 20:04:27 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2023-12-28 20:04:27 -0800 |
| commit | 48b0892454f981b5b3e964b85e30daa087c44814 (patch) | |
| tree | 92662db368dd4457f3dabef6d57100c098f5b73d /src/lib/Media/hoverCover.ts | |
| parent | feat(media): all title formats (diff) | |
| download | due.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.ts | 45 |
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; +}; |