私のプロジェクトでは、カスタムキャレットでネイティブ選択をエミュレートしています。どの方向にユーザーがテキストを選択したかを検出する方法はありますか?つまり、そのユーザーは「hello world」というテキストを選択したと言います。 2つの可能性があります。文字「d」にマウスをクリックして始まり、文字「h」で終わるか、文字「h」で始まり文字「d」で終わることができます。これら2つの状況を区別する簡単な方法はありますか?ありがとうございました。javascriptでユーザ選択の方向を検出
答えて
古い質問が、私は簡単に解決策を追加しようと思いました:
var sel = getSelection(),
position = sel.anchorNode.compareDocumentPosition(sel.focusNode),
backward = false;
// position == 0 if nodes are the same
if (!position && sel.anchorOffset > sel.focusOffset ||
position === Node.DOCUMENT_POSITION_PRECEDING)
backward = true;
Node.compareDocumentPosition(MDN)
私が知っている限り、Javascriptに固有のプロパティやイベントはありませんが、方向を教えてくれます。 This siteマウスの方向を追跡する方法については、必要に応じて調整することができます。
基本的に、マウスの位置(loc.pageX
またはY、またはevent.clientX
またはYのいずれか)を取得できる限り、位置と時間に基づいて方向を追跡する独自の関数を記述することができます。
あなたのケースでは、ユーザーが「選択済み」のテキストを持っている場合、つまりmousedown
イベントでのみキャプチャしたいと思うかもしれません。
マウスダウンのXのoffetを追跡し、その後のmouseupは、Xオフセット、及び結果は方向を示す:(jQueryの使用)
var textSelectionDirection = (function(){
var direction = '', mouseDownOffset = null;
function getDirection(e){
if(e.type == 'mousedown')
mouseDownOffset = e.clientX;
else if(e.type == 'mouseup'){
direction = e.clientX < mouseDownOffset ? 'left' : 'right';
console.log(direction);
}
}
return getDirection
})();
$(document).on('mousedown mouseup', textSelectionDirection);
を
これは現在マウス選択でのみ使用でき、キーボードでは使用できません – vsync
これは動作するはず:
function isBackwards(sel) {
var rg = document.createRange();
rg.setStart(sel.anchorNode, sel.anchorOffset);
rg.setEnd(sel.focusNode, sel.focusOffset);
return !rg.toString();
}
注:改行と空白の両方を選択できる場合は、上記の機能を変更する必要がありますそのような場合には、何であってもtrue
を返します。
単一のテキストノードでは動作しません。開始ノードと終了ノードが同じでない場合にのみ動作します。 – Jordan
私はのカップルのための私の作品解決策を見つけるためにしようとしていました日々。ここでは、これは、単一の範囲選択で動作します、私が思い付いたものです:
var selection = window.getSelection();
var range = selection.getRangeAt(0);
var isSelectionDown = selection.focusNode === range.endContainer;
var isSelectionUp = selection.focusNode === range.startContainer;
選択の焦点ノードは、ユーザーがマウスを離したところ、常にですが、範囲の終了とコンテナは方向に応じて変化し始めます。
選択が複数のノードにわたる場合にのみ機能します。問題がなければ、 'var isReverse = selection 'に減らすことができます。anchorNode!== selection.getRangeAt(0).startContainer; ' – Pocketsand
- 1. JavaScriptでデバイスの向きを検出する方法は?
- 2. Javascriptを - スクロール方向がaddEventListenerを「スクロール」で検出
- 3. プロンプトの選択でインテントを検出
- 4. ユーザがUIDatePickerで選択インジケータをタップすると検出しますか?
- 5. JavaScript:選択要素のAlt/Optionキーを検出
- 6. JTextAreaでのテキスト選択の検出
- 7. JavaScriptを使用したIE10メトロの方向変更を検出
- 8. UILongPressGestureRecognizer方向を検出
- 9. Javascript選択したアイテムを検出します
- 10. HTMLでJavaScript変数を割り当てるドロップダウンメニュー(ユーザ選択)
- 11. matlabのボロノイ図の選択方向
- 12. WPF DataGridの選択方向の取得
- 13. Djangoでは、データベースからユーザの選択を取り出す方法は?
- 14. 選択オプションのJavaScript検索ボックス
- 15. JavaScriptの検索日付と選択タグ
- 16. jqueryモバイルテーブル - 選択の変更を検出
- 17. MATLAB:片方向エッジ検出
- 18. データベースからユーザを選択
- 19. VueJSで選択したインデックスを検出する方法は?
- 20. divの現在の方向を検出
- 21. テンソルフロー検出APIトレーニングのハイパーパラメータの選択
- 22. Javascriptで画像の向きを検出する
- 23. JavaScriptで画面の向きを検出する
- 24. ユーザがphpで別の色のパターンを選択する方法
- 25. ノードJS - ユーザ言語の検出方法
- 26. GWT CellTable/DataGrid - 列の選択を検出する方法は?
- 27. 表示するユーザ選択
- 28. バックボーンルーティングは、順方向か逆方向かを検出します
- 29. 選択JavaScriptの
- 30. 顔検出のカスケードファイルの選択方法は?
私はこの選択オブジェクトが十分にスマートではないと思います。あなたはマウスクリックの場所を記録し、それをあなた自身で把握しなければならないでしょう。 –
@Diodeusそれを受け入れられるように答えをしてください。そして、(at)OPデフォルトを使用し、マウスの位置計算をあまりにも追加することで、これらのアクションのカスタムセッターとゲッターを追加してみてください。 – Relic
可能です。 https://stackoverflow.com/a/12652116/96100 –