diff options
author | PortableProgrammer <[email protected]> | 2025-01-11 20:11:28 +0000 |
---|---|---|
committer | PortableProgrammer <[email protected]> | 2025-01-22 15:01:56 +0000 |
commit | 7e73b06afc434fe6a62166ead138345010c22b8e (patch) | |
tree | 7e1cf4596d576c86437d27981c8da38a89ce66cb | |
parent | 6cd1bd918531de368605447c3f9a1495cd8dbe1c (diff) |
Media View: scroll to pointer when zooming.
-rw-r--r-- | src/views/media.pug | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/views/media.pug b/src/views/media.pug index e945704..3a59542 100644 --- a/src/views/media.pug +++ b/src/views/media.pug | |||
@@ -3,13 +3,18 @@ doctype html | |||
3 | html | 3 | html |
4 | +head("home") | 4 | +head("home") |
5 | script(type='text/javascript'). | 5 | script(type='text/javascript'). |
6 | function toggleZoom() { | 6 | function toggleZoom(event) { |
7 | const percentX = event.offsetX / event.target.width; | ||
8 | const percentY = event.offsetY / event.target.height; | ||
7 | Array.from(document.getElementsByClassName('media-maximized')).forEach(element => element.classList.toggle('zoom')); | 9 | Array.from(document.getElementsByClassName('media-maximized')).forEach(element => element.classList.toggle('zoom')); |
10 | const moveClientX = (event.target.width * percentX) + event.target.offsetLeft - (event.view.visualViewport.width / 2) | ||
11 | const moveClientY = (event.target.height * percentY) + event.target.offsetTop - (event.view.visualViewport.height / 2); | ||
12 | event.target.parentElement.scrollTo(moveClientX, moveClientY); | ||
8 | } | 13 | } |
9 | 14 | ||
10 | body.media-maximized | 15 | body.media-maximized |
11 | div.media-maximized.container | 16 | div.media-maximized.container |
12 | if kind == 'img' | 17 | if kind == 'img' |
13 | img(src=url onclick=`toggleZoom()`).media-maximized | 18 | img(src=url onclick=`toggleZoom(event)`).media-maximized |
14 | else | 19 | else |
15 | video(src=url controls).media-maximized | 20 | video(src=url controls).media-maximized |