2015-12-30 41 views
1

我在网页中有一个contenteditable div,我试图用下面的代码将光标移动到视图中。我所经历的是,返回的光标坐标似乎在跳跃......通常x值很好,但是y值在正确值和非常低值之间交替,导致页面滚动得过高然后返回通过交替的按键/通话到正确的地方。 任何洞察力表示赞赏。我的JavaScript是:javascript滚动到光标:rect.top更改

function getCaretClientPosition() 
{ 
var element = document.getElementById('mydivcontent'); 
var x = 0, y = 0; 
var doc = element.ownerDocument; 
var win = doc.defaultView; 
var sel = win.getSelection(); 

    if (sel.rangeCount) 
    { 
    var range = win.getSelection().getRangeAt(0); 
    if (range.getBoundingClientRect) 
    { 
     var rects = range.getClientRects(); 
     if (rects.length > 0) 
     { x = rects[0].left; y = rects[0].top; } 
    } 
    } 

    win.scrollTo(x, y); 
    return x.toString()+'|'+ y.toString(); 
} 

从C#侧每次输入一个字符时调用: VAR结果= webview.EvaluateJavascript( “getCaretClientPosition();”);

结果将作为交替字符被输入例如:24 | 645,36 | 77 48 | 645,60 | 77 ...偶尔高点和低点也

回答

0

导致之间的x值替代页面滚动得太快,然后返回到 正确的地方,交替按键/调用。

你在你的代码的顶端默认xy0,只设置xy在一定条件下...但你总是win.scrollTo(x, y)也许你只是想这样做scrollTo如果你”实际上我发现了一个值得的xy

+0

谢谢,但我没有得到0,0结果。事实上,我正在检查后面的代码,而不是滚动到它。正如我所说我得到的结果通常是一个较低的y值。 FWIW上下文是xamarin iOS应用中的uiwebview ...所以浏览器是Safari。 –

+0

嗯,好的。这是应该包含在问题本身中的信息(您可能需要编辑它)。我不确定你是如何“在[你的]代码中检查它的”,而不是这样做,但这也是你可能想要包含的代码。 – Jack