Javascript 在自动调整大小的文本区域中键入内容时,始终将焦点放在元素的顶部
我有一个扩展的文本区域。当文本区域已经扩展到窗口底部时,正文会闪烁/滚动回文本区域的顶部,除非滚动窗口,否则您无法看到最后键入的字符 样本可在本文件中找到。我试着在身体上加一个卷轴Javascript 在自动调整大小的文本区域中键入内容时,始终将焦点放在元素的顶部,javascript,jquery,textarea,autoresize,cursor-position,Javascript,Jquery,Textarea,Autoresize,Cursor Position,我有一个扩展的文本区域。当文本区域已经扩展到窗口底部时,正文会闪烁/滚动回文本区域的顶部,除非滚动窗口,否则您无法看到最后键入的字符 样本可在本文件中找到。我试着在身体上加一个卷轴 window.scrollTo(0, document.getElementsByTagName('textarea')[0].getBoundingClientRect().bottom); 如何计算textarea中光标与窗口的偏移量?我想得到光标的顶部偏移量,如果光标已经超出折叠范围,只需将窗口滚动到它的位置
window.scrollTo(0, document.getElementsByTagName('textarea')[0].getBoundingClientRect().bottom);
如何计算textarea中光标与窗口的偏移量?我想得到光标的顶部偏移量,如果光标已经超出折叠范围,只需将窗口滚动到它的位置
在此方面的帮助将不胜感激:)对于所有鼠标位置问题,我都使用以下方法,而且从未遇到过问题。我不明白为什么它在这个例子中也不起作用
var cX;
var cY;
document.onmousemove = function(e){
cX = e.pageX;
cY = e.pageY;
}
你可以像我一样使用它:
window.scrollTo(0, cX);
或者简单地将e.pageX放入您的代码示例中。cX,cY是光标坐标。您的代码很棒-我刚刚添加了几毫秒的超时时间(大约100-200就足够了),现在它运行良好。我只是想知道“聚焦”事件处理程序的作用是什么。我猜您可以跳过在resize()函数中调用focus()。我在堆栈中找到了一个解决方案 我还添加了resize函数中的代码片段
function resize(e){
var text = _this.value,
lines = text.split('\n'),
cursorPosition = $this.getCursorPosition(),
scrollLeft = window.pageXOffset || (document.documentElement || document.body.parentNode || document.body).scrollLeft,
scrollTop = window.pageYOffset || (document.documentElement || document.body.parentNode || document.body).scrollTop;
for(var i = 0, length = lines.length; i < length; i++){
if(lines[i].length <= settings.charactersPerLine){
continue;
}
var j = 0,
space = settings.charactersPerLine;
while(j++ <= settings.charactersPerLine){
if(lines[i].charAt(j) === ' '){
space = j;
}
}
lines[i+1] = lines[i].substr(space) + (lines[i + 1] || '');
lines[i] = lines[i].substr(0, space);
}
_this.value = lines.join('\n');
if(cursorPosition == text.length){
setCaretToPos(_this, cursorPosition + 1);
}
else{
setCaretToPos(_this, cursorPosition);
}
_this.style.height = elementHeight;
_this.style.height = _this.scrollHeight + 'px';
_this.style.overflow = 'hidden';
window.scrollTo(scrollLeft, scrollTop);
}
函数调整大小(e){
var text=_this.value,
lines=text.split('\n'),
cursorPosition=$this.getCursorPosition(),
scrollLeft=window.pageXOffset | | |(document.documentElement | | document.body.parentNode | | document.body)。scrollLeft,
scrollTop=window.pageYOffset | | |(document.documentElement | | document.body.parentNode | | document.body);
对于(变量i=0,长度=lines.length;i 如果(第[i]行).长度我认为它在做闪烁的事情,因为我替换了文本区域的值。我注意到的另一件事是,当我点击退格按钮时,它正确聚焦。哦,我认为这是因为退格按钮不会触发按键事件,而按键事件又不会调用文本区域的调整大小功能。我如何复制该ef无法避免在输入字符时闪烁?为什么您首先要设置插入符号位置?为什么您不只是设置高度?想知道我遗漏了什么…您尝试的滚动条有什么问题?它似乎在Firefox和Chromesorry中工作,插入符号/文本区域光标不是鼠标光标,但它聚焦在当你键入Ithm的中间部分时,我看到了这个问题。猜想你必须计算文本框中的CARET的大致位置,并通过那个调整你的滚动。