2015-12-30 75 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