如何在javascript中找到带有偏移量的xy位置

发布于 2024-10-01 14:52:40 字数 911 浏览 3 评论 0原文

你好,我的 javascript 代码有一些问题。

我想在 javascript 中获取所选文本的 xy 位置,并且我使用这样的越位函数:

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.. 请帮我

hello i have some problem with my javascript code..

i want to get xy position the selected text in javascript, and i use offside function like this :

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

but the result of position X,Y always 0 when i call this function to find position selected text

var select = window.getSelection();

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

and i use mozilla firefox..
please help me

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忆离笙 2024-10-08 14:52:40

您需要在选择的一端插入一个虚拟元素。这是一个函数,用于获取所有主要浏览器(包括 IE 6)中所选内容的开始或结束坐标。请注意,这需要支持元素的 getBoundingClientRect() 方法,这排除了 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);

You will need to insert a dummy element at one end of the selection. Here's a function to get the coordinates of the start or end of the selection in all major browsers, including IE 6. Note that this requires support for the getBoundingClientRect() method of elements, which rules out Firefox 2. If you need to support that browser, you can use something like your findPosX/Y functions on the dummy element instead of 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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文