Używam suwaka YUI, który obsługuje zdarzenia przenoszenia myszy. Chcę, aby reagował na zdarzenia touchmove (iPhone i Android). Jak mogę utworzyć zdarzenie przenoszenia myszy po wystąpieniu zdarzenia touchmove? Mam nadzieję, że po dodaniu jakiegoś skryptu na szczycie zdarzenia touchmove zostaną zmapowane na ruchy myszy i nie będę musiał nic zmieniać za pomocą suwaka.Mapowanie zdarzeń dotykowych JavaScript na zdarzenia myszy
Odpowiedz
Jestem pewien, że to, co chcesz:
function touchHandler(event)
{
var touches = event.changedTouches,
first = touches[0],
type = "";
switch(event.type)
{
case "touchstart": type = "mousedown"; break;
case "touchmove": type = "mousemove"; break;
case "touchend": type = "mouseup"; break;
default: return;
}
// initMouseEvent(type, canBubble, cancelable, view, clickCount,
// screenX, screenY, clientX, clientY, ctrlKey,
// altKey, shiftKey, metaKey, button, relatedTarget);
var simulatedEvent = document.createEvent("MouseEvent");
simulatedEvent.initMouseEvent(type, true, true, window, 1,
first.screenX, first.screenY,
first.clientX, first.clientY, false,
false, false, false, 0/*left*/, null);
first.target.dispatchEvent(simulatedEvent);
event.preventDefault();
}
function init()
{
document.addEventListener("touchstart", touchHandler, true);
document.addEventListener("touchmove", touchHandler, true);
document.addEventListener("touchend", touchHandler, true);
document.addEventListener("touchcancel", touchHandler, true);
}
mam zrobione w dotyku zdarzenia, a następnie ręcznie opalane własne zdarzenia myszy, aby dopasować. Chociaż kod nie jest szczególnie uniwersalny, jak jest, powinno być trywialnie dostosować się do większości istniejących bibliotek drag and drop i prawdopodobnie do większości istniejących kodów zdarzeń myszy. Mam nadzieję, że ten pomysł przyda się ludziom rozwijającym aplikacje internetowe na iPhone'a.
Aktualizacja:
umieszczanie to zauważyłem, że nazywając preventDefault
na temat wszystkich zdarzeń dotykowych uniemożliwi linki działają poprawnie. Głównym powodem, aby zadzwonić pod numer preventDefault
, jest zatrzymanie przewijania telefonu i możesz to zrobić, dzwoniąc tylko na oddzwanianie touchmove
. Jedyną wadą robienia tego w ten sposób jest to, że iPhone czasami wyświetla wyskakujące okienko po przeciągu. Jeśli odkryję sposób, aby temu zapobiec, zaktualizuję ten wpis.
Druga aktualizacja:
Znalazłem właściwości CSS, aby wyłączyć objaśnienie: -webkit-touch-callout
.
Nie wszystkie zdarzenia touchmove tłumaczą się na zdarzenia mousemove! na przykład jeśli chcesz po prostu przewinąć w dół na ekranie, zdarzenie touchmove również zostanie uruchomione, ale tłumaczy się na wydarzenie przewijania ...! – nerdess
Znalazłem to bardzo pomocne, próbując ustalić, dlaczego ekran dotykowy dla kiosku nie rysuje się na ekranie, na którym znajduje się mysz. Wygląda na to, że Chrome i Firefox mają różne zachowania pod tym względem. W Firefoksie widzę, że nadal masz ruchy myszy na ekranach dotykowych, ale nie w przypadku Chrome. –
Metoda initMouseEvent jest już nieaktualna (https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/initMouseEvent) –
Wraz z odpowiedzią @ Mickey Shine, Touch Punch udostępnia mapowanie zdarzeń dotykowych dla zdarzeń kliknięcia. Jest zbudowany tak, aby umieścić tę obsługę w interfejsie jQuery, ale the code ma charakter informacyjny.
W końcu znalazłem sposób, żeby to działało przy użyciu rozwiązania Mickeya, ale zamiast jego funkcji init. Użyj tutaj funkcji init.
function init() {
document.getElementById('filter_div').addEventListener("touchstart", touchHandler, true);
document.getElementById('filter_div').addEventListener("touchmove", touchHandler, true);
document.getElementById('filter_div').addEventListener("touchend", touchHandler, true);
document.getElementById('filter_div').addEventListener("touchcancel", touchHandler, true);
}
Jeśli widzisz „filter_div
” jest obszar wykresu gdzie mamy filtr zakres wykresu i tylko w tym zakresie chcemy przerobić nasze przyciski dotykowe!
Dziękuję Mickey. To było świetne rozwiązanie.
jeśli go ignorujesz, dodaj przyczynę! – Sana
Dla przyszłych użytkowników, którzy tu następujący kod może być użyty comeback:
var eventMap = {};
(function(){
var eventReplacement = {
"mousedown": ["touchstart mousedown", "mousedown"],
"mouseup": ["touchend mouseup", "mouseup"],
"click": ["touchstart click", "click"],
"mousemove": ["touchmove mousemove", "mousemove"]
};
for (i in eventReplacement) {
if (typeof window["on" + eventReplacement[i][0]] == "object") {
eventMap[i] = eventReplacement[i][0];
}
else {
eventMap[i] = eventReplacement[i][1];
};
};
})();
a następnie w imprezach używać jak następuje:
$(".yourDiv").on(eventMap.mouseup, function(event) {
//your code
}
Do wykonywania @ pracy kodu Mickeya na krawędzi i Internet Explorer, dodaj następujące wiersze do pliku .css elementu, w którym chcesz przeprowadzić symulację:
.areaWhereSimulationHappens {
overflow: hidden;
touch-action: none;
-ms-touch-action: none;
}
Te linie uniemożliwiają domyślne dotknięcie krawędzi i IE. Ale jeśli dodasz go do niewłaściwego elementu, to również wyłącza przewijanie (co dzieje się domyślnie na krawędzi i IE na urządzeniach dotykowych).
- 1. Mapowanie zdarzeń myszy przez program Mouse Safari w celu dotykania zdarzeń na mapach obrazu
- 2. Ignoruj wskaźnik myszy jQuery (mouseenter, mouseleave) na urządzeniach dotykowych
- 3. Otrzymywanie zdarzeń dotykowych poza granicami
- 4. jednoczesnych zdarzeń dotykowych przeładunku na wielu widoków w Androidzie
- 5. CAEmitterLayer emituje losowych zdarzeń niepożądanych cząstek na dotykowych
- 6. JavaScript: Współrzędne zdarzeń IE8
- 7. Przekazywanie zdarzeń myszy za pośrednictwem warstw/działek
- 8. Czy jQuery zachowuje właściwości zdarzeń dotykowych?
- 9. Zdarzenia wielokrotnego zdarzenia javascript wielokrotnego zdarzenia raz
- 10. Zdarzenia myszy krwawiące przez NSView
- 11. Obsługa zdarzeń dotykowych na iPadzie dla draggables/droppables (undefined changedTouches)
- 12. W jaki sposób można programowo wywoływać obsługę zdarzeń myszy na myszy w JavaScript
- 13. Subskrybowanie zdarzeń myszy wszystkich formantów w formularzu
- 14. Dlaczego właściwość target zdarzenia kółka myszy różni się od zdarzeń innych zdarzeń (kliknięcie, mousedown, dotykowy)?
- 15. Wysyłanie zdarzeń myszy i klawiatury
- 16. Sposób uruchamiania zdarzenia myszy podczas przeciągania
- 17. tranzytowej zdarzenia myszy do formantu nadrzędnego
- 18. WPF: Jak dołączać zdarzenia myszy do viewmodelu?
- 19. Android Toasts uzyskać zdarzeń dotykowych na niektórych telefonach, a nie na innych
- 20. Czy obiekt jest "przezroczysty" dla zdarzeń myszy?
- 21. Zdarzenia myszy Java są ignorowane podczas przenoszenia myszy?
- 22. Wykrywanie Zdarzenia myszy na wielu nakładających się elementów SVG
- 23. Właściwości zdarzeń myszy są niezdefiniowane na IE 11
- 24. Rysowanie okręgu na płótnie przy użyciu zdarzeń myszy
- 25. Czy przeglądarki na komputery obsługują zdarzenia dotykowe?
- 26. Naciśnięcie myszy Java - bez zdarzeń
- 27. D3 Zdarzenia myszy - Click & DragEnd
- 28. Konwersja współrzędnych dotykowych UIImageView na współrzędne UIIm
- 29. Jak korzystać z timingu javascript do kontrolowania zatrzymania myszy i zdarzeń przenoszenia myszy
- 30. propagować zdarzenia myszy do ukrytych elementów
Czy możesz opublikować kod, który masz do tej pory? –
Używam tych dwóch suwaków z biblioteki YUI: http://developer.yahoo.com/yui/examples/slider/slider-ticks_clean.html http://developer.yahoo.com/yui/examples/ slider/slider_dual_with_highlight.html – Questioner