我正在使用自定義插頁來模擬我的項目中的文本編輯器,但本機選擇。有什麼方法可以檢測用戶選擇文本的方向嗎?可以說,那個用戶選擇了文本「hello world」。有兩種可能性,他可以先在字母'd'上點擊鼠標並以字母'h'結尾,或者可以從字母'h'開始並以字母'd'結尾。有沒有簡單的方法來區分這兩種情況?謝謝。使用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然後鼠標鬆開的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 2012-10-20 16:22:19
這應該工作:
function isBackwards(sel) {
var rg = document.createRange();
rg.setStart(sel.anchorNode, sel.anchorOffset);
rg.setEnd(sel.focusNode, sel.focusOffset);
return !rg.toString();
}
注意:如果您允許選擇除空格和空格之外的任何內容,則需要修改上述函數,因爲在這種情況下,它會返回true
,無論如何。
不適用於單個文本節點。僅在起始和結束節點不相同時才起作用。 – Jordan 2014-07-23 10:24:35
我試圖找到這對我的工作的一對夫婦的解決方案天。以下是我想出了,這將與單個範圍選擇工作:
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 2017-09-03 20:01:20
- 1. 使用Javascript檢測圖像的方向
- 2. 檢測complete.ly用戶選擇?
- 3. 檢查,當用戶選擇使用javascript
- 4. 使用javascript檢測幻燈片方向
- 5. 使用javascript檢測方向變化
- 6. 使用javascript檢測iPad設備方向
- 7. 使用javascript檢測瀏覽器用戶
- 8. 使用JavaScript檢測用戶活動
- 9. 當用戶使用文件輸入選擇文件時檢測
- 10. 使用javascript檢測重定向 - 如何?
- 11. 使用javascript或jquery檢測dropdownlist中選擇的重複值?
- 12. 如何使用Javascript檢測IEMobile 7中的方向更改?
- 13. 如何使用Javascript檢測元素的文本方向?
- 14. 使用JavaScript檢測IE10 Metro上的方向更改
- 15. 禁用方向但檢測方向
- 16. 用Excel中的VBA Outmail應用程序檢測用戶選擇
- 17. 使用ImageMagick檢測圖片方向
- 18. 使用ScrollMagic來檢測滾動方向
- 19. 使用SwipeView檢測滑動方向
- 20. 單選按鈕和檢查用戶在測驗中的選擇
- 21. 如何檢測使用谷歌方向時的方向API
- 22. 檢測是否使用javascript選擇了textarea內容
- 23. 使用javascript檢測選擇結束位置
- 24. 如何使用JavaScript檢測設備方向?
- 25. 在Android設備上使用javascript檢測方向
- 26. JavaScript的檢測散列選擇/複製
- 27. 檢測鼠標方向 - JavaScript的
- 28. JavaScript - 用戶選擇功能
- 29. javascript用戶選擇突出
- 30. 如何檢測用戶是否從createChooser選項中選擇?
我不認爲這個選擇對象足夠聰明。你必須記錄鼠標點擊的位置,並自己解決這個問題。 – 2012-02-07 16:57:45
@Diodeus做出答案,讓他可以接受它。並且(at)OP通過使用默認值並添加鼠標位置計算,嘗試併爲這些操作添加自定義設置器和獲取器。 – Relic 2012-02-07 17:02:37
這是可能的。 https://stackoverflow.com/a/12652116/96100 – 2017-11-01 12:26:14