Sto utilizzando il dispositivo di scorrimento YUI che funziona con gli eventi di spostamento del mouse. Voglio farlo rispondere agli eventi touchmove (iPhone e Android). Come posso produrre un evento di spostamento del mouse quando si verifica un evento touchmove? Spero che aggiungendo qualche script in cima al fatto che gli eventi touchmove vengano mappati agli eventi di spostamento del mouse e che non cambierò nulla con il cursore.Gli eventi touch di mappatura JavaScript per gli eventi del mouse
risposta
Sono sicuro che questo è ciò che si vuole:
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);
}
ho catturato gli eventi di tocco e poi licenziato manualmente i miei eventi del mouse da abbinare. Sebbene il codice non sia particolarmente generico così com'è, dovrebbe essere banale adattarsi alla maggior parte delle librerie drag and drop esistenti e probabilmente alla maggior parte del codice di eventi del mouse esistente. Speriamo che questa idea possa essere utile alle persone che sviluppano applicazioni web per l'iPhone.
Aggiornamento:
In questo distacco, ho notato che chiamando preventDefault
su tutti gli eventi touch impedisce i collegamenti di funzionare correttamente. La ragione principale per chiamare lo preventDefault
è di impedire lo scorrimento del telefono, e lo si può fare chiamando solo sul callback touchmove
. L'unico svantaggio di farlo in questo modo è che l'iPhone a volte mostra il suo passaggio del mouse sopra l'origine di trascinamento. Se scopro un modo per impedirlo, aggiornerò questo post.
secondo aggiornamento:
ho trovato la proprietà CSS per spegnere la didascalia: -webkit-touch-callout
.
non tutti gli eventi touchmove traducono in eventi mousemove! per esempio. se vuoi semplicemente scorrere verso il basso sullo schermo, viene attivato anche l'evento touchmove ma si traduce in un evento scroll ...! – nerdess
L'ho trovato molto utile, mentre cercavo di capire perché un monitor touch screen per un chiosco non disegnasse sullo schermo dove si trova un mouse. Chrome e Firefox sembrano avere un comportamento diverso a questo riguardo. In Firefox vedo che si continuano a ricevere eventi di spostamento del mouse dai touch screen, ma non così con Chrome. –
Il metodo initMouseEvent è ora deprecato (https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/initMouseEvent) –
Lungo le linee della risposta di @Mickey Shine, Touch Punch fornisce la mappatura degli eventi di tocco per fare clic sugli eventi. È costruito per mettere questo supporto nell'interfaccia utente jQuery, ma the code è informativo.
ho finalmente trovato un modo per ottenere questo lavoro utilizzando la soluzione di Topolino, ma invece della sua funzione init. Usa la funzione init qui.
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);
}
Se si vede 'filter_div
' è l'area del grafico dove abbiamo il filtro gamma grafico e solo in quella zona vogliamo riscrivere i nostri controlli touch!
Grazie Mickey. E 'stata una grande soluzione.
in caso di downvoting, si prega di aggiungere un motivo! – Sana
Per gli utenti futuri, che rimonta qui il seguente codice potrebbe essere utilizzato:
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];
};
};
})();
E poi negli eventi usano come segue:
$(".yourDiv").on(eventMap.mouseup, function(event) {
//your code
}
Per rendere @ work codice di Topolino su Edge e internet explorer, aggiungi le seguenti righe in .css dell'elemento in cui vuoi che si verifichi la simulazione:
.areaWhereSimulationHappens {
overflow: hidden;
touch-action: none;
-ms-touch-action: none;
}
Queste linee impediscono il tocco predefinito per edge e IE. Ma se lo aggiungi all'elemento sbagliato, disattiva anche lo scorrimento (che avviene di default sul bordo e IE sui dispositivi touch).
- 1. iPad Safari per mappare gli eventi del mouse per toccare gli eventi nelle mappe di immagini
- 2. Ignorare gli eventi del mouse in coda
- 3. eventi touch vs eventi clic del mouse utilizzando actionscript 3
- 4. WPF: Esiste la possibilità di "instradare" gli eventi del mouse ordinario per toccare gli eventi in Windows 7
- 5. Come intercettare tutti gli eventi touch?
- 6. Gli eventi touch funzionano con SVG?
- 7. Rendere un oggetto "trasparente" per gli eventi del mouse?
- 8. Cattura tutti gli eventi (javascript)
- 9. propagare gli eventi del mouse agli elementi oscurati
- 10. singolo gestore eventi per tutti gli eventi JavaScript/jQuery
- 11. disabilita gli eventi touch di RecyclerView (per evitare tocchi utente)?
- 12. QGraphicsItem non riceve gli eventi di passaggio del mouse
- 13. NSViewController lento a registrare gli eventi del mouse?
- 14. Qualcuno può suggerire un posto dove iniziare con gli eventi touch javascript per il web?
- 15. Javascript: carica gli eventi per gli elementi incorporati
- 16. MouseArea ha rubato gli eventi del mouse dell'elemento QML
- 17. Come reindirizzare gli eventi del mouse su un altro controllo?
- 18. Come trovo gli eventi javascript misteriosamente associati
- 19. I browser desktop supportano gli eventi tattili?
- 20. Gain PanningMode del comportamento di ScrollViewer con gli eventi del mouse
- 21. DoDragDrop disattiva gli eventi MouseMove
- 22. Perché utilizzare gli eventi?
- 23. Come tracciare gli eventi Javascript (Stack Trace)?
- 24. Simula C# come gli eventi in javascript
- 25. Rimuovere gli eventi con jQuery o javascript
- 26. È possibile SIMULARE un clic del mouse usando un mouse su e giù per gli eventi?
- 27. Manovre sfiorare gli eventi in Sencha Touch 2
- 28. Passare gli eventi al genitore
- 29. Elenco di tutti gli eventi Tkinter
- 30. HTML5 EventSource listener per tutti gli eventi?
Puoi pubblicare il codice che hai finora? –
Sto usando questi due cursori dalla libreria 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