获取光标坐标位置

2017-12-05  本文已影响0人  Sasoli
function getSelectionCoords(win) {
win = win || window;
var doc = win.document;
var sel = doc.selection, range, rects, rect;
var x = 0, y = 0;
if (sel) {
    if (sel.type != "Control") {
        range = sel.createRange();
        range.collapse(true);
        x = range.boundingLeft;
        y = range.boundingTop;
    }
} else if (win.getSelection) {
    sel = win.getSelection();
    if (sel.rangeCount) {
        range = sel.getRangeAt(0).cloneRange();
        if (range.getClientRects) {
            range.collapse(true);
            rects = range.getClientRects();
            if (rects.length > 0) {
                rect = rects[0];
            }
            // 光标在行首时,rect为undefined
            if(rect){
                x = rect.left;
                y = rect.top;
            }
        }
        // Fall back to inserting a temporary element
        if ((x == 0 && y == 0) || rect === undefined) {
            var span = doc.createElement("span");
            if (span.getClientRects) {
                // Ensure span has dimensions and position by
                // adding a zero-width space character
                span.appendChild( doc.createTextNode("\u200b") );
                range.insertNode(span);
                rect = span.getClientRects()[0];
                x = rect.left;
                y = rect.top;
                var spanParent = span.parentNode;
                spanParent.removeChild(span);

                // Glue any broken text nodes back together
                spanParent.normalize();
            }
        }
    }
}
return { x: x, y: y };
}
上一篇下一篇

猜你喜欢

热点阅读