2010-11-08 31 views
2

你好,我有一些问题,我的JavaScript代码..如何找到在JavaScript中的XY位置偏移

我想xy位置选定的文本在JavaScript中,我用越位的功能是这样的:

function findPosX(obj) 
    { 
    var curleft = 0; 
    if(obj.offsetParent) 
     while(1) 
     { 
      curleft += obj.offsetLeft; 
      if(!obj.offsetParent) 
      break; 
      obj = obj.offsetParent; 
     } 
    else if(obj.x) 
     curleft += obj.x; 
    return curleft; 
    } 

    function findPosY(obj) 
    { 
    var curtop = 0; 
    if(obj.offsetParent) 
     while(1) 
     { 
      curtop += obj.offsetTop; 
      if(!obj.offsetParent) 
      break; 
      obj = obj.offsetParent; 
     } 
    else if(obj.y) 
     curtop += obj.y; 
    return curtop; 
    } 

但位置X的结果,Y始终为0时,我调用这个函数来找到位置选定文本

var select = window.getSelection(); 

var posX = findPosX(select); 
var posY = findPosY(select); 

,我使用Mozilla Firefox .. p租赁帮我

回答

1

您将需要在选择的一端插入一个虚拟元素。这是一个函数,用于在所有主流浏览器(包括IE 6)中获取选择的开始或结束坐标。请注意,这需要支持排除Firefox 2元素的方法,如果您需要支持该浏览器,您可以在虚拟元素上使用类似findPosX/Y的功能,而不是getBoundingClientRect()

function getSelectionCoordinates(start) { 
    var x = 0, y = 0, range; 
    if (window.getSelection) { 
     var sel = window.getSelection(); 
     if (sel.rangeCount) { 
      range = sel.getRangeAt(sel.rangeCount - 1); 
      range.collapse(start); 
      var dummy = document.createElement("span"); 
      range.insertNode(dummy); 
      var rect = dummy.getBoundingClientRect(); 
      x = rect.left; 
      y = rect.top; 
      dummy.parentNode.removeChild(dummy); 
     } 
    } else if (document.selection && document.selection.type != "Control") { 
     range = document.selection.createRange(); 
     range.collapse(start); 
     x = range.boundingLeft; 
     y = range.boundingTop; 
    } 
    return {x: x, y: y}; 
} 

var coords = getSelectionCoordinates(true); 
alert(coords.x + ", " + coords.y); 
相关问题