2010-11-08 61 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); 
相關問題