マウス移動イベントで動作するYUIスライダを使用しています。 touchmoveイベント(iPhoneとAndroid)に対応させたいtouchmoveイベントが発生した場合、どのようにマウス移動イベントを生成できますか? touchmoveのイベントがマウスの移動イベントにマップされ、スライダーで何も変更する必要がないことを、上部にいくつかのスクリプトを追加するだけでいいと思っています。マウスイベントへのタッチイベントのマッピングJavaScript
答えて
私は、これはあなたが望むものであると確信しています:
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);
}
私はタッチイベントをキャプチャし、手動で一致するように、自分のマウスイベントを解雇しました。コードはそれほど一般的な目的ではありませんが、ほとんどの既存のドラッグアンドドロップライブラリ、おそらくほとんどの既存のマウスイベントコードに適応するのは簡単です。うまくいけば、このアイデアは、iPhone用のWebアプリケーションを開発している人々にとって便利なことでしょう。
アップデート:この投稿には
、私はすべてのタッチイベントにpreventDefault
を呼び出すと、正しく動作してからリンクを防ぐことができますことに気づきました。 preventDefault
に電話をかける主な理由は、電話機がスクロールしないようにすることで、コールはtouchmove
コールバックでのみ呼び出すことができます。このようにすることの唯一の欠点は、iPhoneがドラッグ元にホバーポップアップを表示することがあることです。それを防ぐ手段が見つかったら、私はこの記事を更新します。
2回目の更新:-webkit-touch-callout
:
私はコールアウトをオフにするCSSプロパティを見つけました。
すべてのtouchmoveイベントがmousemoveイベントに変換されるわけではありません。例えば単に画面をスクロールダウンしたい場合は、touchmoveイベントも同様にトリガされますが、スクロールイベントに変換されます...! – nerdess
キオスク用のタッチスクリーンモニターが、マウスが置かれている画面上に描画しない理由を理解しようとする一方で、 ChromeとFirefoxはこの点で違いがあるようです。 Firefoxでは、まだタッチスクリーンからマウス移動イベントが得られるが、Chromeではそうではないことがわかります。 –
initMouseEventメソッドは現在廃止予定です(https://developer.mozilla.org/en/US/docs/Web/API/MouseEvent/initMouseEvent) –
@Mickey Shineの答えに沿って、Touch Punchは、クリックイベントへのタッチイベントのマッピングを提供します。このサポートはjQuery UIに組み込まれていますが、the codeは有益です。
私は最終的に、ミッキーのソリューションを使用して、彼のinit関数の代わりにこれを動作させる方法を見出しました。ここで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);
}
ご覧の場合は「filter_div
は、」我々は、チャートの範囲フィルタを持っており、その領域だけに私たちはタッチコントロールを書き換えたいのですチャート領域であります!
ありがとうミッキー。それは素晴らしい解決策でした。次のコードは、使用されるかもしれない、ここでカムバック将来のユーザーについては、
あなたがdownvotingしている場合は、理由を追加してください! – Sana
:
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];
};
};
})();
そしてイベントでは、次のように使用します。
$(".yourDiv").on(eventMap.mouseup, function(event) {
//your code
}
エッジにミッキーのコードの作業@作りのためにとインターネットエクスプローラで、シミュレーションを実行する要素の.cssに次の行を追加します。
.areaWhereSimulationHappens {
overflow: hidden;
touch-action: none;
-ms-touch-action: none;
}
これらの行は、エッジとIEのデフォルトタッチを防止します。しかし、それを間違った要素に追加すると、スクロールも無効になります(タッチデバイスのエッジとIEではデフォルトで発生します)。
- 1. htmlページのタッチイベントとマウスイベント
- 2. JavaScriptのタッチイベント
- 3. javascriptのタッチイベント
- 4. タッチイベントをマウスイベントに変換するのは毎回のみです
- 5. タッチイベントとマウスイベントの間のダブルトリガーを防ぐ方法
- 6. Safari、Firefox、Chromeでマウスイベントの代わりにタッチイベントを使用する
- 7. JavascriptオブジェクトへのJSONオブジェクトのマッピング
- 8. 従来のJavascriptマッピングへのjQuery
- 9. vimでのマウスイベントのパッティッブによるマッピングが無効
- 10. ビューからコントローラへのタッチイベントの送信
- 11. JavaScriptでのマウスイベントの組み合わせ
- 12. Javascriptマウスイベントを増やす
- 13. javascriptでタッチイベントをシミュレートする
- 14. Androidで遅いJavascriptタッチイベント
- 15. JavascriptとArduinoの人工的なマウスイベント?
- 16. javascriptのキー値ペアへの変数のマッピング
- 17. Tizenウェアラブルデバイスの画面上部でJavascriptタッチイベント
- 18. Javascript配列のプロパティへのマッピング(item => item [prop])?
- 19. List <>へのmapstructへのマッピング
- 20. $ http.postへのカールステートメントのマッピング
- 21. tablenameへのYii2プロパティのマッピング
- 22. Kafkaのコンシューマ/コンシューマグループへのマッピング
- 23. MongoDBジオポイントへのElasticsearchのマッピング
- 24. Odata:ドメインモデルへのビューモデルのマッピング
- 25. データベースへのJavaオブジェクトのマッピング
- 26. ユーザーへのセッションのマッピング
- 27. リレーショナルモデルへのERモデルのマッピング
- 28. アセンブリへのC++のマッピング
- 29. hostgator:URLへのワイルドカードサブドメインのマッピング
- 30. アウレリアのカミソリビューへのマッピング
これまでのコードは投稿できますか? –
私はYUIライブラリのこれら2つのスライダを使用しています: http://developer.yahoo.com/yui/examples/slider/slider-ticks_clean.html http://developer.yahoo.com/yui/examples/ slider/slider_dual_with_highlight.html – Questioner