W przypadku takiego kodu HTML:
<p>Some Text</p>
Następnie trochę CSS takich jak ten:
p {
color:black;
}
p:hover {
color:red;
}
Jak mogę pozwolić, aby długie dotknięcie urządzenia z obsługą dotykową replikowało kursor? Mogę zmienić znaczniki / użyć JS itp., Ale nie mogę wymyślić prostego sposobu na zrobienie tego.
Odpowiedzi:
OK, już to wymyśliłem! Polega na nieznacznej zmianie CSS i dodaniu JS.
Korzystanie z jQuery, aby to ułatwić:
Po angielsku: kiedy zaczynasz lub kończysz dotyk, włącz
hover_effect
lub wyłącz zajęcia .Następnie w kodzie HTML dodaj kursor klasy do wszystkiego, z czym chcesz, aby to działało. W swoim CSS zamień dowolne wystąpienie:
z
Aby zwiększyć użyteczność, dodaj to również do swojego CSS:
Aby zatrzymać przeglądarkę z pytaniem o skopiowanie / zapisanie / wybranie obrazu lub cokolwiek.
Łatwo!
źródło
toggle
wszystko zepsuje, jeśli użytkownik dotknie jednego elementu i przeciągnie się na inny (np. Jeśli dotknął niewłaściwego elementu i próbuje anulować dotyk)touchend
ipreventDefault()
na mojej stronie internetowej i działa dobrze, ale teraz menu nie są automatycznie zamykane przez dotknięcie poza celem.touchstart
na korpusie może być inny słuchacz (lub podobny), ale zastanawiałem się, czy jest lepszy sposób. Dzięki!Wszystko, co musisz zrobić, to nawiązać kontakt z rodzicem. Coś takiego zadziała:
Nie musisz nic robić w funkcji, zostaw ją pustą. To wystarczy, aby unosić się przy dotyku, więc dotyk zachowuje się bardziej jak: najechanie, a mniej jak: aktywny. Magia iOS.
źródło
Spróbuj tego:
A w swoim CSS:
Z tym kodem nie potrzebujesz dodatkowej klasy .hover!
źródło
Aby odpowiedzieć na główne pytanie: „Jak symulować najechanie kursorem za pomocą dotyku w przeglądarkach obsługujących dotyk?”
Po prostu zezwól na „kliknięcie” elementu (dotykając ekranu), a następnie wywołaj
hover
zdarzenie za pomocą JavaScript.To powinno działać, o ile
hover
na Twoim urządzeniu jest wydarzenie (nawet jeśli normalnie nie jest używane).Aktualizacja: właśnie przetestowałem tę technikę na moim iPhonie i wydaje się, że działa dobrze. Wypróbuj tutaj: http://jsfiddle.net/mathias/YS7ft/show/light/
Jeśli zamiast tego chcesz użyć „długiego dotknięcia” do wywołania najechania kursorem, możesz użyć powyższego fragmentu kodu jako punktu wyjścia i bawić się licznikami czasu i innymi rzeczami;)
źródło
Dalsze ulepszone rozwiązanie
Najpierw poszedłem z podejściem Richa Bradshawa , ale potem zaczęły pojawiać się problemy. Wykonując e.preventDefault () w zdarzeniu „touchstart” , strona nie jest już przewijana i ani długie naciśnięcie nie jest w stanie uruchomić menu opcji, ani podwójne kliknięcie powiększenia nie jest w stanie zakończyć wykonywania.
Rozwiązaniem może być ustalenie, które zdarzenie jest wywoływane i po prostu e.preventDefault () w późniejszym, „touchend” . Ponieważ „ruch dotykowy” przewijania występuje przed „dotknięciem” , pozostaje on domyślnie, a „kliknięcie” jest również zapobiegane, ponieważ występuje po słowie w łańcuchu zdarzeń stosowanym na telefonie komórkowym, na przykład:
Ale potem, gdy pojawi się menu opcji, nie uruchamia już „touchchend” odpowiedzialnego za wyłączenie klasy, a następnym razem zachowanie najechania kursorem będzie odwrotne , całkowicie pomieszane.
Rozwiązaniem byłoby więc ponownie warunkowe ustalenie, w którym zdarzeniu się znajdujemy, lub po prostu zrobienie oddzielnych, i użycie addClass () i removeClass () odpowiednio na 'touchstart' i 'touchend' , upewniając się, że zawsze zaczyna się i kończy odpowiednio dodawanie i usuwanie zamiast warunkowego decydowania o tym. Na koniec powiążemy również usuwające wywołanie zwrotne z typem zdarzenia „focusout” , pozostając odpowiedzialnym za wyczyszczenie wszystkich klas linków, które mogą pozostać włączone i nigdy więcej nie wracać, na przykład:
Uwaga: niektóre błędy nadal występują w dwóch poprzednich rozwiązaniach, a także myślę (nie testowano), powiększanie dwukrotnym kliknięciem nadal nie działa.
Schludne i miejmy nadzieję wolne od błędów (nie :)) rozwiązanie JavaScript
Teraz , przez sekundę, czystsze, uporządkowane i responsywne podejście, po prostu używając javascript (bez mieszania klasy .hover i pseudo: hover) i skąd możesz bezpośrednio wywołać swoje zachowanie Ajax w uniwersalnym (mobilnym i stacjonarnym) zdarzeniu „kliknięcie” , Znalazłem dość dobrze udzielone pytanie, z którego w końcu zrozumiałem, jak mogę mieszać zdarzenia dotyku i myszy bez kilku wywołań zwrotnych zdarzeń nieuchronnie zmieniających się nawzajem w łańcuchu zdarzeń. Oto jak:
źródło
Efekt myszy
hover
nie może być zaimplementowany w urządzeniu dotykowym. Kiedy pojawiła się taka sama sytuacjasafari
ios
,:active
w css zastosowałem efekt.to znaczy.
W moim przypadku to działa. Może tak jest również w przypadku, którego można używać bez użycia javascript. Po prostu spróbuj.
źródło
Dodaj ten kod, a następnie ustaw klasę „tapHover” na elementy, na których chciałbyś pracować w ten sposób. Gdy pierwszy raz dotkniesz elementu, uzyska on pseudoklasę „: hover” i klasę „tapped”. Zdarzenie kliknięcia zostanie zablokowane. Drugie dotknięcie tego samego elementu - zostanie uruchomione zdarzenie kliknięcia.
źródło
Bez konkretnego urządzenia (a raczej przeglądarki) JS Jestem prawie pewien, że nie masz szczęścia.
Edycja: myślę, że chcesz tego uniknąć, dopóki nie przeczytałem ponownie Twojego pytania. W przypadku Mobile Safari możesz zarejestrować się, aby otrzymywać wszystkie zdarzenia dotykowe podobne do tego, co możesz zrobić z natywnymi UIView-s. Nie mogę teraz znaleźć dokumentacji, ale spróbuję.
źródło
Jednym ze sposobów byłoby wykonanie efektu najechania po rozpoczęciu dotyku, a następnie usunięcie efektu najechania, gdy dotyk się porusza lub kończy.
Oto, co Apple ma do powiedzenia na temat obsługi dotykowej w ogóle, skoro wspominasz o iPhonie.
źródło
Moim osobistym gustem jest również przypisywanie
:hover
stylów do:focus
stanu, na przykład:Następnie z następującym kodem HTML:
Oraz następujący JavaScript:
źródło
Rozwiązany 2019 - Najedź na dotyk
Wydaje się, że najlepiej jest unikać używania dymka razem z iOS lub dotykiem. Poniższy kod stosuje twój CSS tak długo, jak długo utrzymywany jest dotyk i bez innych menu wysuwanych iOS. Zrób to;
Jquery add: $ ("p"). On ("touchstart", function (e) {$ (this) .focus (); e.preventDefault ();});
CSS: zamień p: hover na p: focus i dodaj p: active
Opcje;
zastąp selektor jquery p dowolną klasą itp
aby efekt pozostał, trzymaj p: hover również i dodaj body {kursor: ponter;} więc dotknięcie w dowolnym miejscu go kończy
wypróbuj zdarzenia click & mouseover, a także touchstart w tym samym kodzie (ale nie testowane)
usuń e.preventDefault (); aby umożliwić użytkownikom korzystanie z wysuwanych okienek iOS, np. kopiowania
Uwagi
testowane tylko dla elementów tekstowych, system iOS może inaczej traktować dane wejściowe itp
testowano tylko na iPhonie XR ios 12.1.12 i iPadzie 3 ios 9.3.5 przy użyciu przeglądarki Safari lub Chrome.
źródło
Połączenie natywnego Javascript i jQuery:
źródło
Najłatwiejsze rozwiązanie, jakie znalazłem: miałem kilka tagów <span> z regułami css: hover. Przełączyłem się na <a href = "javascript: void (0)"> i voilà. Style najeżdżania w iOS zaczęły działać.
źródło
Używaj również CSS, dodawaj fokus i aktywny (dla IE7 i poniżej) do ukrytego linku. Przykład menu ul wewnątrz elementu DIV z menu klas:
Jest późno i niesprawdzone, powinno działać ;-)
źródło