2012-03-15 17 views
14

Czy istnieje proste rozwiązanie JavaScript, które jest niezależne od urządzenia i biblioteki?Wykryj, czy przeglądarka mobilna obsługuje przepełnienie: przewiń

Chciałbym dodać klasę do elementu html, aby móc dostarczać przewijane pojemniki na urządzenia mobilne, o ile to możliwe.

Jest to podobne podejście, które stosuje Modernizr, wykrywające obsługę funkcji zamiast wykrywania przeglądarki. Po prostu nie chcę używać całej struktury Modernizr. Próbuję zachować światło JavaScript dla projektu mobilnego.

Dzięki!

+0

proszę zadaj sobie trochę trudu, – Triode

+0

Możliwe duplikaty: http://stackoverflow.com/questions/3343311/can-javascript-detect-when-scrollbars-are-unavailable-ie-on-mobile-browsers. Zobacz także: http://lostmonocle.com/post/870842095/geeky-stuff-using-jquery-to-check-if-scrollbars-are – Prescott

+0

Myślałem o czymś bardziej podobnym, ale mając problem ze znalezieniem: http://stackoverflow.com/questions/3911866/how-to-detect-lack-of-positionfixed-in-a-generic-way – ackernaut

Odpowiedz

5

To nie jest doskonałe, ale używam tego do wykrywania przewijania -wtyczącego-przepełnienia.

var overflowScrolling = typeof($("body")[0].style["-webkit-overflow-scrolling"]) !== "undefined"; 

Wtedy mówię, jeśli nie overflow-scrolling i mobilne następnie załadować iScroll.

Oznacza to, że urządzenia obsługujące overflow: scroll, ale nie -webkit-overflow-scrolling nadal będą ładować iScroll, ale to przynajmniej daje natywne przewijanie do iOS 5 i współczesnego Androida.

+3

Prawdopodobnie chcesz zastąpić łącznik podkreślnikiem? – donquixote

+0

Sprawdza to obsługę '-webkit-overflow-scrolling', a nie czy' overflow: scroll' działa w przeglądarce. – speedarius

+0

@speedarius, tak mówi pierwsze zdanie. – respectTheCode

2

Oto rozwiązanie, które sprawdza wszystkie możliwe opcje, w tym zakaz dostawcy prefiksem właściwości i nie ma żadnych zależności na temat bibliotek takich jak jQuery lub modernizr:

function hasOverflowScrolling() { 
    var prefixes = ['webkit', 'moz', 'o', 'ms']; 
    var div = document.createElement('div'); 
    var body = document.getElementsByTagName('body')[0]; 
    var hasIt = false; 

    body.appendChild(div); 

    for (var i = 0; i < prefixes.length; i++) { 
     var prefix = prefixes[i]; 
     div.style[prefix + 'OverflowScrolling'] = 'touch'; 
    } 

    // And the non-prefixed property 
    div.style.overflowScrolling = 'touch'; 

    // Now check the properties 
    var computedStyle = window.getComputedStyle(div); 

    // First non-prefixed 
    hasIt = !!computedStyle.overflowScrolling; 

    // Now prefixed... 
    for (var i = 0; i < prefixes.length; i++) { 
     var prefix = prefixes[i]; 
     if (!!computedStyle[prefix + 'OverflowScrolling']) { 
      hasIt = true; 
      break; 
     } 
    } 

    // Cleanup old div elements 
    div.parentNode.removeChild(div); 

    return hasIt; 
} 

alert(hasOverflowScrolling()); 
+0

Sprawdza obsługę przeglądarki dla '- * - overflow-scrolling', która kontroluje przewijanie" pędu "na urządzeniach mobilnych. Nie sprawdza, czy 'overflow: scroll' działa w przeglądarce. Na przykład w systemie Android <3.0, 'overflow: scroll' po prostu nie działa. Uważam, że o to właśnie chodzi. – speedarius

+0

Daje mi to zawsze fałszywy wszędzie – Gino

2

To jest bardzo dobre pytanie. Niestety, obecnie wydaje się, że nie ma możliwości niezawodnego sprawdzenia obsługi overflow: scroll.

grupa włókien ma PolyFill na to, które możesz wykorzystać w swoich projektach (patrz http://filamentgroup.github.io/Overthrow/), ale według siebie:

Kłopot w tym, że trudno - być może niemożliwe - do testowania przepełnienia wsparcie [...]

z konieczności, Obalenie bada aplikacja kliencka ciąg do białej listy obecnych i przyszłych wersjach mobilnych platformach, które są znane posiada natywne wsparcie przepełnienia, ale nie przed sprawdzeniem przez więcej niezawodne i agnostyk środki, mianowicie: iOS5'S (! i teraz Chrome Android jest zbyt) dotknąć przewijanie właściwości CSS, i próbę wnioskowania szeroki przeglądarki pulpit (bez dotykowego obsługę zdarzeń z ekranem większym niż 1200 pikseli szerokości)

Powiązane problemy