2013-09-08 9 views
6

Piszę aplikację internetową, która ma działać zarówno na iPadzie, jak i na przeglądarce internetowej.Wykrywanie kolizji JavaScript/Jquery dla wyskakujących okienek

mam sekcję filtrów z popup pochodzących z boku (popup jest całkowicie umieszczona w stosunku do znacznika filtr <li>):

enter image description here

to wszystko wygląda ładnie i dandys na pulpicie, lecz na Ipad w trybie poziomym, dół popup jest wycięty, ponieważ wykracza poza obszar wyświetlania.

próbowałem go rozwiązać za pomocą queryUI position:

$('.capbIpadPopupAutoComplete').position({ 
    "my": "left center" ,  // Horizontal then vertical, missing values default to center 
    "at": "left top",  // Horizontal then vertical, missing values default to center 
    "of": $(this).closest('li'),  // Element to position against 
    // "offset": "20 30" ,  // Pixel values for offset, Horizontal then vertical, negative values OK 
    "collision": "fit flip" // What to do in case of 
}); 

ale to działa tylko wtedy, gdy okienko zderza się z lewej strony ekranu, a nie na dole.

Muszę również upewnić się, że trójkąt porusza się odpowiednio, ponieważ powinien zawsze wskazywać na właściwy filtr.

Czy używam niewłaściwej pozycji JqueryUI? czy istnieje lepsze rozwiązanie?

Here is a very simplified fiddle

+0

Twoje skrzypce są zbyt uproszczone - w ogóle nie używają JQUI ani żadnego javascriptu. JQUI jest tym, co powinno obsługiwać odbijanie. – user1618143

+0

Uh, czy odpowiesz? – user1618143

+0

@ user1618143 - Przepraszam, byłem na wakacjach. Spróbuję jutro i zobaczę, czy to pomoże – Tomer

Odpowiedz

2

Dobra, wygląda na to, największym problemem jest to, że "flip fit" rzeczywistości nie jest prawidłową wartością dla collision. (Myślę, że jest traktowany jako "flip".) Prawdopodobnie szukasz "flipfit" (bez spacji), a może po prostu "fit". Powinieneś również upewnić się, że wyrównałeś stronę po lewej stronie li - wyrównanie lewej strony do lewej powoduje ich nakładanie się, a następnie odwrócenie, ponieważ nie było wystarczająco dużo miejsca. Poprawiłem twój kod i sprawiłem, że działał on lepiej (ale nadal nie jest idealnie, musisz go poprawić).

$('.capbIpadPopupAutoComplete').position({ 
    "my": "right top" ,  // Horizontal then vertical, missing values default to center 
    "at": "left top",  // Horizontal then vertical, missing values default to center 
    "of": $('.capbStrategicPlan'),  // Element to position against 
    // "offset": "20 30" ,  // Pixel values for offset, Horizontal then vertical, negative values OK 
    "collision": "fit" // What to do in case of 
}); 

$(this) nie wydają się działać w of argumentu, więc zastąpił go.

Nie trzeba również ustawiać wartości wyskakującego okienka, ponieważ .position ustawia wartość left, a ustawienie obydwu rozszerzeń wyskakuje.

Co do strzałki, dlaczego nie umieścisz ich oddzielnie? Jeśli wyskakujące okienko musi się trochę poruszyć, spowoduje to nałożenie kilku strzałek, ale spowoduje to, że strzałka będzie wyglądać na mniejszą.

+0

To nie działa, nie wiem dlaczego, próbowałem różnych odmian, ale nic nie pomogło. W końcu zaimplementowałem detekcję kolizji ... – Tomer

+0

Czy wyskoczyłeś i zmieniłeś rozmiar okna? To wyjaśniałoby, dlaczego to nie działa dla ciebie; 'position' patrzy tylko na wielkość okna podczas pierwszego uruchomienia; nie ogląda się i nie dostosowuje się. – user1618143

+0

Wiem, otworzyłem go na Ipad, gdzie koliduje przy pierwszym otwarciu – Tomer

Powiązane problemy