【问题标题】:how to find xy position in javascript with offset如何在带有偏移量的javascript中找到xy位置
【发布时间】:2011-05-06 13:23:34
【问题描述】:

你好,我的 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.. 请帮帮我

【问题讨论】:

    标签: javascript mozilla cursor-position


    【解决方案1】:

    您需要在选择的一端插入一个虚拟元素。这是一个在所有主要浏览器(包括 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 2013-02-10
      相关资源
      最近更新 更多