我在我的项目中使用自定义光标模拟文本编辑器,但使用原生选区。有没有办法检测用户选择文本的方向?举个例子,用户选择了文本“hello world”。他可以从点击字母“d”开始,结束于字母“h”,或者从字母“h”开始,结束于字母“d”。有没有简单的方法来区分这两种情况?谢谢。
我在我的项目中使用自定义光标模拟文本编辑器,但使用原生选区。有没有办法检测用户选择文本的方向?举个例子,用户选择了文本“hello world”。他可以从点击字母“d”开始,结束于字母“h”,或者从字母“h”开始,结束于字母“d”。有没有简单的方法来区分这两种情况?谢谢。
虽然这是一个老问题,但我认为我可以提供一个更简单的解决方案:
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)
loc.pageX
或Y,或event.clientX
或Y),您就可以编写自己的函数来根据位置和时间跟踪方向。mousedown
事件上。我试图寻找适合我的解决方案已经几天了。以下是我想出的解决方案,它可以用于单个范围选择:
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!==选择getRangeAt(0)。startContainer;
- Pocketsandfunction isBackwards(sel) {
var rg = document.createRange();
rg.setStart(sel.anchorNode, sel.anchorOffset);
rg.setEnd(sel.focusNode, sel.focusOffset);
return !rg.toString();
}
true
,无论如何。追踪mousedown的X轴偏移,然后再追踪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);