2009-05-28 4 views
43

Mam pewne elementy na mojej stronie iPhone'a, które nie zawierają żadnego tekstu, ale wymagają od użytkownika kliknięcia i przytrzymania (DIV). Powoduje to pojawienie się podświetlenia tekstu/edycji pętli/kursora, co bardzo rozprasza uwagę.Wyłączanie lupy z podświetlaniem tekstu w trybie zatrzymywania dotykowego w Mobile Safari/Webkit

Wiem, że istnieje reguła CSS do usuwania czarnej skrzynki, która pojawia się na klikalnych elementach, gdy są dotykane. Czy jest coś takiego, aby wyłączyć lupę tekstową?

+0

Możliwy duplikat [OI Cordova długim prasy pokazuje tekst-select lupę nawet z tekstem selekcji wyłączył, jak usunąć?] (Http://stackoverflow.com/questions/32812308/ios-cordova-long-press-shows-text-select-magnifying-glass-even-with-text-selecti) – mpoisot

Odpowiedz

48

Właśnie otrzymałem odpowiedź z Centrum pomocy dla programistów. Musiałem dodać tę regułę CSS:

-webkit-user-select: none; 
+0

Nie działa w aplikacji Phonegap, zastosowałem to do każdego div w moim html . –

+0

próbował tego, ale nie pracował –

+0

Tak, to nie działa. Powinien zostać obniżony do 0. – williamle8300

5

ta jest również przydatna w ochronie treści, które nie mają być kopiowane lub zapisywane, takich jak obraz:

#yourdiv img {-webkit-touch-callout: none; } 
+11

Mam nadzieję, że masz na myśli, że * chronisz * czyniąc go * nieco bardziej nieporęcznym * do kopiowania. – alex

3

Znalazłem się podczas próby ja sam. Przede wszystkim trzeba dodać tę regułę do elementu otaczającego:

-webkit-user-select: none; 

Ale to samo w sobie nie wystarcza na iPhone. Okazuje się, że szkło powiększające nadal może się pojawić, ponieważ na przykład element macierzysty zaakceptowałby wybór lub tylko dlatego, że mu się to podoba.

Jednak odkryłem coś fajnego - jeśli twój element dodaje element obsługi do elementu touchend i click, Safari firmy Apple ostatecznie unika irytującej ścieżki kodu, która powoduje pojawienie się lupy, prawdopodobnie zdając sobie sprawę, że ten element jest przeznaczony do niektóre interakcje interfejsu użytkownika i nie zaznaczanie tekstu. W równie niesamowitym tonie, jeśli zrobisz to na elementach w górnej części ekranu, spowoduje to również anulowanie wyglądu nawigacji w trybie poziomym! Nie wiesz jednak, jak anulować wygląd nawigacji po kliknięciu elementów na dole, czy ktoś ma rozwiązanie tego?

+0

Niesamowite badania. Jest to częsty problem od dłuższego czasu. Wydaje się, że niektórzy ludzie znaleźli [rozwiązanie] (http://stackoverflow.com/questions/33106437/iphone-on-long-press-causing-some- rectangular-magnifier-to-pop-up). Ale to nie jest rozwiązanie podczas używania tylko javascript/css. –

7

używać kodów tego CSS

-webkit-touch-callout: none; 
-webkit-user-select: none; /* Disable selection/copy in UIWebView */ 
+0

Kilka wyjaśnień? –

2

to rozwiązać go dla mnie, w JS:

document.getElementsByTagName("body")[0].addEventListener("touchstart", 
function(e) { e.returnValue = false }); 

Wydaje się obejść bez względu na system operacyjny ma tam złapać w dotyku.

+1

to zdawało się wyłączać wszelkie zdarzenia "kliknięcia", które ustawiłem. – ScottieMc

+0

Aby uzyskać zdarzenie kliknięcia, alternatywą może być wywołanie/wywołanie zdarzenia kliknięcia, a nawet obsługa obsługi "touchStart". –

1

Dodaj to do CSS

body { 
-webkit-touch-callout: none;    /* prevent callout to copy image, etc when tap to hold */ 
-webkit-text-size-adjust: none;    /* prevent webkit from resizing text to fit */ 
-webkit-user-select: none;     /* prevent copy paste, to allow, change 'none' to 'text' */}