Próbuję utworzyć ogólną klasę dialogową javascript opartą na JQuery, aby utworzyć wyskakujące okna wyśrodkowane na ekranie. Osiągnięcie tego we wszystkich popularnych przeglądarkach było proste.Problem z rzutnią meta i Androidem
W przypadku platform mobilnych pojawia się kwestia widoczności; różnica widocznej widocznej strony (która jest twoim aktualnym "oknem oglądania" witryny, tak jak ją widzisz, powiększona lub nie) i rzutnią układu (wymiary strony podstawowej lub innymi słowy rzutnia CSS).
dla iPhone, byłem w stanie wykorzystać właściwość DOM window.innerWidth i window.innerHeight dostosować centrowania dla skalowania i pageXOffset/pageYOffset dostosować do panoramowania, ze:
// Get dialog width/height
var dx = $("#dialog").width();
var dy = $("#dialog").height();
// Get window (layout viewport) width/height
var winW = $(window).width();
var winH = $(window).height();
if (window.innerWidth!=winW) {
// Zoomed in or users browser window width is smaller than layout width
var x = window.pageXOffset+(window.innerWidth-dx)/2;
} else {
// Not zoomed in
var x = window.pageXOffset+(winW-dx)/2;
}
if (window.innerHeight!=winH) {
// Zoomed in or users browser window height is smaller than layout height
var y = window.pageYOffset+(window.innerHeight-dy)/2;
} else {
// Not zoomed in
var y = window.pageYOffset+(winH-dy)/2;
}
I wtedy ustaw moje okno dialogowe, ustawiając odpowiednio lewy/górny na x i y. Działa to dobrze w większości przeglądarek, a nawet Iphone, jednak nie działa na platformach Android.
Po wykonaniu nadmiernych badań za pomocą Google wydaje się, że Android ma pewne problemy z właściwościami window.innerWidth i window.innerHeight (patrz np. http://www.quirksmode.org/mobile/viewports2.html, wyszukaj "Pomiar widocznej widoczności").
Opcją jest użycie useragenta w celu zidentyfikowania przeglądarek systemu Android i zawsze umieszczenie okna dialogowego w window.pageXOffset/window.pageYOffset, które zawsze ustawi je w górnym/lewym rogu w widocznej rzutni. Jednak jest to zła opcja z wielu powodów, nie tylko dlatego, że wygląda źle podczas pomniejszania.
Czy ktoś wie metody obliczania widocznej widocznej na Androida? A może ktoś znalazł obejście tego problemu?
Okno jest odpowiedzią na zdarzenia użytkownika podobnego zdarzenia myszy? – Prusse
Tak, to ogólny pomysł. –
Możesz spróbować przetworzyć event.pageX/Y i event.clientX/Y wraz z wykrywaniem niektórych obiektów. – Prusse