Zanim pomyślisz "dlaczego ten facet prosi o pomoc w tym problemie, na pewno został zaimplementowany 1000x" - podczas gdy w większości masz rację, próbowałem rozwiązać ten problem z kilkoma otwartymi źródło libs jeszcze tutaj jestem.SVG powiększanie myszy - model matematyczny
Próbuję zaimplementować oparte na SVG "powiększanie koła myszy, koncentrując się na myszy" od podstaw.
Wiem, że istnieje wiele bibliotek, które to umożliwiają, d3 i svg-pan-zoom, aby wymienić parę. Niestety, moje implementacje używające tych bibliotek nie spełniają moich oczekiwań. Miałem nadzieję, że mogę uzyskać pomoc od społeczności z bazowym modelem matematycznym dla tego typu funkcji interfejsu użytkownika.
Zasadniczo pożądane zachowanie przypomina Mapy Google, użytkownik ma wskaźnik myszy nad lokalizacją, przewija kółko myszy (do wewnątrz), a skala obrazu mapy rośnie, podczas gdy położenie, na którym się znajduje, staje się poziome i pionowe centrum rzutni.
Naturalnie, mam dostęp do szerokości/wysokości okna roboczego i x/y myszy.
W tym przykładzie, skupię się tylko na osi x, rzutnia ma szerokość 900 jednostek, na placu jest szeroka 100 jednostek, to x przesunięcie wynosi 400 jednostek, a skala wynosi 1: 1
<g transform="translate(0 0) scale(1)">
Przyjmując pozycję mysz x był na lub blisko 450 jednostek, jeśli użytkownik koła, aż skala osiągnęła 2: 1 I oczekiwać, że x offsetowe dotrzeć -450 sztuk, centrowanie punkt ostrości tak jak .
<g transform="translate(-450 0) scale(2)">
X i Y przesunięcia powinny być przeliczone na każde kolejne zwoju koło jako funkcji prądu przesunięcia waga/mysz.
Wszystkie moje próby są całkowicie pozbawione pożądanego zachowania, wszelkie porady są mile widziane.
Chociaż doceniam każdą pomoc, proszę nie odpowiadać z sugestiami do bibliotek zewnętrznych, wtyczek jQuery i tego typu rzeczy. Moim celem jest zrozumienie modelu matematycznego stojącego za tym problemem w sensie ogólnym, moje wykorzystanie SVG ma przede wszystkim charakter ilustracyjny.
Tam na końcu, po prostu piękna - dziękuję – James