Czy za pomocą JavaScript można wykryć, kiedy użytkownik zmienia powiększenie strony? Chcę po prostu złapać zdarzenie „zoom” i odpowiedzieć na nie (podobnie do zdarzenia window.onresize).
Dzięki.
javascript
events
zoom
user123093
źródło
źródło
Odpowiedzi:
Nie ma sposobu, aby aktywnie wykryć, czy istnieje powiększenie. Znalazłem tutaj dobry wpis o tym, jak możesz spróbować go wdrożyć.
Możesz to również zrobić za pomocą narzędzi z powyższego postu. Problem polega na tym, że w mniejszym lub większym stopniu dokonujesz przemyślanych przypuszczeń, czy strona została powiększona. W niektórych przeglądarkach będzie to działać lepiej niż w innych.
Nie ma sposobu, aby stwierdzić, czy strona jest powiększona, jeśli wczytują ją podczas powiększania.
źródło
document.body.offsetWidth
Używam tego fragmentu JavaScript do reagowania na „zdarzenia” Zoom.
Sonduje szerokość okna. (Jak sugerowano na tej stronie (do której odsyłał Ian Elliott): http://novemberborn.net/javascript/page-zoom-ff3 [archiwum] )
Testowane w Chrome, Firefox 3.6 i Opera, a nie w IE.
Pozdrawiam Magnus
źródło
Dobre wieści
wszyscyniektórzy ludzie! Nowsze przeglądarki wyzwalają zdarzenie zmiany rozmiaru okna po zmianie powiększenia.źródło
Określmy px_ratio jak poniżej:
współczynnik px = stosunek pikseli fizycznych do pikseli css.
jeśli któryś z powiększa Strona, piksele widoku (piksele różnią się od pikseli) zmniejszają się i powinny być dopasowane do ekranu, więc współczynnik (piksel fizyczny / CSS_px) musi się zwiększyć.
ale przy zmianie rozmiaru okna rozmiar ekranu zmniejsza się, podobnie jak piksele. więc stosunek się utrzyma.
powiększanie: uruchamianie zdarzenia windows.resize -> i zmiana px_ratio
ale
resizing: wyzwalanie zdarzenia windows.resize -> nie zmienia px_ratio
Kluczową kwestią jest różnica między CSS PX a Physical Pixel.
https://gist.github.com/abilogos/66aba96bb0fb27ab3ed4a13245817d1e
źródło
To działa dla mnie:
Jest potrzebny tylko w IE8. Wszystkie inne przeglądarki w naturalny sposób generują zdarzenie zmiany rozmiaru.
źródło
Istnieje sprytna wtyczka,
yonran
która umożliwia wykrywanie. Oto jego wcześniej udzielone pytanie w StackOverflow. Działa w większości przeglądarek. Aplikacja jest tak prosta:Próbny
źródło
Always enable zoom
przycisk w opcji Dostępność. Demo nie zareaguje na zmianę.Chciałbym zasugerować ulepszenie do poprzedniego rozwiązania ze śledzeniem zmian szerokości okna. Zamiast utrzymywać własną tablicę detektorów zdarzeń, możesz użyć istniejącego systemu zdarzeń javascript i wyzwolić własne zdarzenie po zmianie szerokości i powiązać z nim procedury obsługi zdarzeń.
Ograniczenie / odrzucenie może pomóc w zmniejszeniu wskaźnika wywołań twojego handlera.
źródło
Możesz również uzyskać zdarzenia zmiany rozmiaru tekstu i współczynnik powiększenia, wstawiając element div zawierający co najmniej nierozerwalną spację (prawdopodobnie ukrytą) i regularnie sprawdzając jego wysokość. Jeśli zmienia się wysokość, zmienił się rozmiar tekstu (i wiesz ile - to również uruchamia się, nawiasem mówiąc, jeśli okno zostanie powiększone w trybie pełnej strony, a nadal uzyskasz prawidłowy współczynnik powiększenia, o tej samej wysokości / stosunek wysokości).
źródło
źródło
W iOS 10 można dodać detektor zdarzenia do
touchmove
zdarzenia i wykryć, czy strona jest powiększona o aktualne zdarzenie.źródło
Chociaż jest to pytanie sprzed 9 lat, problem nadal występuje!
Wykrywałem zmianę rozmiaru, jednocześnie wykluczając powiększenie projektu, więc zmodyfikowałem kod, aby działał tak, aby wykrywał zarówno zmianę rozmiaru, jak i powiększenie, wykluczające się wzajemnie. Działa przez większość czasu, więc jeśli większość jest wystarczająco dobra dla twojego projektu, to powinno być pomocne! Wykrywa powiększanie w 100% w tym, co do tej pory testowałem. Jedynym problemem jest to, że jeśli użytkownik wpadnie w szał (np. Spastycznie zmienia rozmiar okna) lub okno się opóźnia, może uruchomić się jako powiększenie zamiast zmiany rozmiaru okna.
Działa poprzez wykrywanie zmiany
window.outerWidth
lubwindow.outerHeight
zmiany rozmiaru okna podczas wykrywania zmianywindow.innerWidth
lubwindow.innerHeight
niezależności od zmiany rozmiaru okna jako powiększenia.Uwaga: moje rozwiązanie jest podobne do rozwiązania KajMagnus, ale to działa lepiej dla mnie.
źródło
0.05
bez podania przynajmniej dobrego wyjaśnienia. ;-) Na przykład wiem, że w Chrome, konkretnie, 10% to najmniejsza wartość, jaką przeglądarka powiększy w każdym przypadku, ale nie jest jasne, czy dotyczy to innych przeglądarek. fyi, zawsze upewnij się, że Twój kod jest przetestowany i bądź przygotowany na jego obronę lub ulepszenie.Oto czyste rozwiązanie:
źródło
Zdarzenie resize działa w nowoczesnych przeglądarkach, dołączając zdarzenie do
window
, a następnie odczytując wartościbody
elementu lub innego elementu, na przykład ( .getBoundingClientRect () ).Inna alternatywa : ResizeObserver API
W zależności od układu możesz obserwować zmianę rozmiaru określonego elementu.
Działa to dobrze w układach „responsywnych”, ponieważ rozmiar kontenera zmienia się podczas powiększania.
Uważaj, aby nie przeciążać zadań javascript związanych ze zdarzeniami dotyczącymi gestów użytkownika. Użyj requestAnimationFrame, gdy potrzebujesz przerysowań.
źródło
Według MDN „matchMedia” to właściwy sposób na zrobienie tego https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio#Monitoring_screen_resolution_or_zoom_level_changes
jest to trochę skomplikowane, ponieważ każda instancja może oglądać tylko jeden MQ naraz, więc jeśli jesteś zainteresowany jakimkolwiek zmianą poziomu powiększenia, musisz wykonać kilka dopasowań ... ale ponieważ przeglądarka jest odpowiedzialna za emitowanie zdarzeń, prawdopodobnie wciąż bardziej wydajne niż odpytywanie, i możesz zdławić lub odrzucić wywołanie zwrotne lub przypiąć je do ramki animacji lub czegoś podobnego - oto implementacja, która wydaje się dość zgryźliwa, możesz zamienić _throttle lub cokolwiek innego, jeśli już na tym polegasz.
Uruchom fragment kodu i powiększaj i pomniejszaj w przeglądarce, zanotuj zaktualizowaną wartość w znacznikach - testowałem to tylko w przeglądarce Firefox! daj mi znać, jeśli zauważysz jakieś problemy.
źródło
Odpowiadam na link sprzed 3 lat, ale wydaje mi się, że jest to bardziej akceptowalna odpowiedź,
Utwórz plik .css jako,
NA PRZYKŁAD:-
Powyższy kod sprawia, że rozmiar czcionki wynosi „10px” przy powiększeniu ekranu do około 125%. Możesz sprawdzić inny poziom powiększenia, zmieniając wartość „1000px”.
źródło
max-width
współczynnikiem powiększenia a współczynnikiem powiększenia?