ich bastele gerade an einem Javascript das Text an der Cursorposition einfügt.
Wie schaffe ich es das das Textfeld im Mozilla sich automatisch an die entsprechende Position scrollt?
Ich mache das ungefähr so:
textarea.ersetzen = function(neu, anfang, ende, markieren) {
// neu: Einzufügender Text
// anfang, ende: Start und Ende der Ersetzung, anfang = ende: Einfügen
// markieren: eingefügten Textblock auswählen
// aktuelle Anzeigeposition sichern
var scrollTop = this.scrollTop;
// neuen Text einfügen
this.value = this.value.substr(0, anfang) + neu + this.value.substr(ende, this.value.length);
// Cursor setzen
this.selectionEnd = anfang + neu.length;
if (markieren) {
this.selectionStart = anfang;
}
else {
this.selectionStart = anfang + neu.length;
}
// Ansicht verschieben, wenn nötig
if (this.clientHeight >= this.scrollHeight) { // Text ist kürzer als Eingabefeld, Cursor muss also sichtbar sein
// dementsprechend nüscht tun
}
else if (this.selectionStart < this.value.length - 1) { // Cursor steht irgendwo im Text (lies: nicht ganz am Ende)
var i;
if (i = neu.match(/(\r\n|\n|\r)/g)) { // hinzugekommene Zeilen zählen
this.scrollTop = scrollTop + Math.floor(this.clientHeight / this.rows) * i.length;
/*
clientHeight / rows entspricht ungefähr der
Pixelhöhe einer Zeile (es mag eine exaktere Quelle geben, aber bei
mir funktioniert es auch bei langen Texten sehr gut). Dies
multipliziert mit der Anzahl neuer Zeilen ergibt die Pixelzahl x,
um die die Ansicht weiter runtergeschoben werden muss (scrollTop + x),
um den am Ende des neuen Blocks stehenden Cursor wieder sichtbar
zu machen.
*/
}
}
else { // Cursor steht am Ende des Textes
this.scrollTop = this.scrollHeight - this.clientHeight;
}
}
<textarea>.clientHeight beschreibt die Pixelhöhe des Elements in der Seite, .scrollHeight die des enthaltenen Textes, .scrollTop schließlich die Pixelposition, an der der Text derzeit angezeigt wird.