2010-11-08 33 views
2

bonjour j'ai un problème avec mon code javascript ..comment trouver la position xy en javascript avec un décalage

je veux obtenir la position xy le texte sélectionné en javascript, et j'utiliser la fonction hors-jeu comme celui-ci:

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; 
    } 

mais le résultat de la position X, Y toujours 0 quand j'appelle cette fonction pour trouver la position du texte sélectionné

var select = window.getSelection(); 

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

et j'utiliser Mozilla Firefox .. p location aide moi

Répondre

1

Vous devrez insérer un élément factice à une extrémité de la sélection. Voici une fonction pour obtenir les coordonnées du début ou de la fin de la sélection dans tous les principaux navigateurs, y compris IE 6. Notez que cela nécessite la prise en charge de la méthode des éléments getBoundingClientRect(), qui exclut Firefox 2. Si vous devez supporter ce navigateur, vous pouvez utiliser quelque chose comme vos fonctions findPosX/Y sur l'élément factice au lieu de 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);