我有在一個應用程序我工作的一個contentEditable
股利。我希望光標當前所在的行在窗口中垂直居中。將當前焦點行集中在窗口中?
當用戶向上或向下滾動光標應該始終保持居中,與contentEditable
格或上下移動來調整。
我該如何去做這件事?
更新
我已經得到了一些存在的方式與此
演示:http://jsfiddle.net/n1dyezmg/
$(function() {
// fire our function on keyup
$(window).bind('keyup', function(event) {
if (!event.ctrlKey && !event.shiftKey)
getCaretXY();
});
// ... and also on page load
getCaretXY();
});
function getCaretXY(){
// this has got to be a performance drag, but...
// paste a special span at the cursor pos
pasteHtmlAtCaret("<span id='XY'></span>")
// get the XY offset of that element
var XYoffset = $("#XY").offset();
// remove our special element
$("#XY").remove();
// do something with the values
$("#caretXY").html(XYoffset.top + "," + XYoffset.left);
}
function pasteHtmlAtCaret(html) {
var sel, range;
if (window.getSelection) {
// IE9 and non-IE
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
// Range.createContextualFragment() would be useful here but is
// only relatively recently standardized and is not supported in
// some browsers (IE9, for one)
var el = document.createElement("div");
el.innerHTML = html;
var frag = document.createDocumentFragment(), node, lastNode;
while ((node = el.firstChild)) {
lastNode = frag.appendChild(node);
}
range.insertNode(frag);
// Preserve the selection
if (lastNode) {
range = range.cloneRange();
range.setStartAfter(lastNode);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}
}
} else if (document.selection && document.selection.type != "Control") {
// IE < 9
document.selection.createRange().pasteHTML(html);
}
}
我在插入符號功能漿糊here
的光標的x,y值記錄在keydown上,實際上並不如此我的預期表現爲豬,但不幸的是它有一些問題。
這是不準確的。如果移動光標向下左下肢,用於獲取X的
span
,Y COORDS有時候會被推到了前行。如果我轉向突出顯示任何文本,然後按箭頭鍵的文字被刪除。這顯然是一位編輯的主要禁忌!我可以通過在頁面上隱藏相同尺寸的陰影div來解決這個問題。 getCaretXY然後可以將文本粘貼到這個div並使用它來確定高度。不準確的問題仍然存在。
我也沒有多少運氣使用該信息來調整編輯器的位置,雖然這只是與CSS足夠長的時間
沒有。就是不行。 – roryok 2014-08-27 15:54:40