Rozszerzanie obszaru pisania z domyślnego na ustawlony przez użytkownika

0

Witam,

zauważyłem, że istnieje możliwość poszerzenia sobie obszaru pisania postu poprzez rozciągnięcie go uchwytem znajdującym się w prawym dolnym roku. Wszystko ładnie i pięknie tylko kiedy już poszerzę sobie obszar edycji i spróbuję coś wpisać to wraca on do domyślnego rozmiaru.

Kiedy ma się kawałek kodu do wklejenia czy trochę tekstu to napisania jest to irytujące.

Pozdrawiam
Grzesiek

0

To jest walka JS z przeglądarką.
Rozszerzanie textarea to cecha przeglądarki. JavaScript z kolei u nas powiększa pole wraz z pisaniem nie wiedząc o tym, że użytkownik sobie je powiększył ręcznie.

Myślę, że dałoby się dodać do JS warunek by zamiast na pałę zmieniał height, testował czy height jest mniejsze niż minimalny przy danej ilości tekstu poziom. Wtedy nie byłoby zmniejszania pola, tylko powiększanie.

0

Racja, JS powinien zorientowac sie kiedy "przestac" rozszerzeac <textarea>. Czyli np. wowczas, gdy uzytkownik zrobil to recznie, wylaczyc funkcje poszerzania <textarea>.

0

Spojrzałem na tę funkcję i wygląda na to, że wystarczy wywalić z początku:
minHeight = $this.height(),
i pobierać to na końcu:
$(this).css('height', Math.max(Math.min(shadow.height() + 17, maxHeight), minHeight));

0

Hmm, no chyba nie @Marooned... nie wiem czy sie dobrze rozumiemy. Autorowi chodzi o to:

  1. Napisz sobie w edytorze 1 linijke (slowo test)
  2. Nastepnie rozciagnij powierzchnie edytora na - dajmy na to - 800px w pionie.
  3. Dodaj kolejna linijke: wysokosc edytora powinna znalezc sie na ustalonym poziomie - 800px (mimo, ze napisalem 2 linijki tekstu)

IMHO trzeba czegos takiego:

			$this.mousedown(function()
			{
				currentWidth = $this.width();
				currentHeight = $this.height();
			})
			.mouseup(function()
			{
				if ($this.width() != currentWidth || $this.height() != currentHeight)
				{
					$this.unbind('keyup', update).unbind('keydown', update).unbind('change', update);
				}

				currentWidth = currentHeight = 0;
			});
0

A po co Ci tam łapanie myszy?

Plugin autogrow robi tak:
W momencie inicjalizacji (podpięcia pod textarea) pobiera var minHeight = $this.height() i potem w $(this).change(update) oblicza wysokość korzystając z zapamiętanego minHeight. Sęk w tym, by nie używać wartości pobranej w momencie podpinania, ale wartości bieżącej.

Serio, zamień
$(this).css('height', Math.max(Math.min(shadow.height() + 17, maxHeight), minHeight));
na
$(this).css('height', Math.max(Math.min(shadow.height() + 17, maxHeight), $this.height()));
i zobacz efekt. Nie testowałem (nadal nie skonfigurowałem Coyote na localu :( może podeślesz mi swoją lokalną bazę?), ale powinno śmigać.

0

No, chcialem po prostu wylaczyc dzialanie pluginu na skutek ingerencji ze strony uzytkownika, w rozmiar pola textarea. Myslalem, ze da sie obsluzyc zdarzenie resize dla textarea, ale cos nie dziala :/
Sek w tym, aby pole wrocilo do swoich pierwotnych rozmiarow, w momencie, gdy wyczyscimy tresc (zobacz jak to jest na fb np). Np. w komentarzu domyslna wysokosc textarea to nieco ponad 1 linia kodu. W momencie, gdy piszemy wiecej - pole sie powieksza. Kasujemy tresc - pole sie zmniejsza. Twoje rozwiazanie nie zaklada tego zmniejszania, mam racje?

Bazy Ci nie przesle, bo ma 3GB danych.

0

Hmm, no fakt, to rozwiązanie nie zmniejsza pola. Kumam.

0

Cześć,

rozciąganie i zwężanie ekranu w poziomie działa ok.
Kiedy coś wpiszę to poziomy rozmiar się nie zmienia, ale pionowy ciągle zmienia się na domyślny - o tę przypadłość mi właśnie chodziło. :)

0

@grzesiek51114: dzieki za informacje. Ten blad zostal juz poprawiony

0

Dziękuję, super działa :)

0

Nie uważam tego za "poprawienie błędu", bo teraz po rozszerzeniu textarea nie zwiększa wysokości jeśli tekst nie mieści, a wcześniej user zmienił rozmiar. Taki hotfix, ale daleko mu do pełnego fixa. Ale rozumiem, że szkoda czasu na taki drobiazg :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1