我有在一个应用程序我工作的一个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