Hey lihao First, let me point out a few small things:
At the beggining you typed 'test' once instead of 'text'. I'm sure it's just a typo of the post. You should remove the 'form' from the selector, it will work faster. Then.. you are scrolling the textarea itself ? that's nice, never thought of that. Don't use {top:x} to scroll vertically, use the setting {axis:'y'} (which is the default so you don't need to specify). And as the first argument, just put the position (the number). Looks like this confused some people, I added a note below in the demo, a few days ago: http://www.freewebs.com/flesler/jQuery.ScrollTo/ I think it's quite hard to achieve what you are trying to do, the difference in size between lowercase and uppercase letter is big. I can't figure out a good way to solve it accurately. I suppose the best approach is to make it approximate. You got any link with this working ? Cheers Ariel Flesler On 6 feb, 22:49, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote: > On Feb 5, 8:06 am, Ariel Flesler <[EMAIL PROTECTED]> wrote: > > > > > > > Hi Lihao, I assume 550 is width and height so it's a squared textarea. > > IMO 550 fits on any screen ( fits on 800x600 ). > > You could simply scroll to the textarea and leave a gap below. You > > could add a margin to the textarea and set the option 'margin' to > > true, will it stop when it reaches the margin. The hard way would be: > > > var $textarea = $('textarea');//this you need to customize > > var gap = ($(window).height() - $textarea.height()) / 2;//this is the > > margin on top > > $.scrollTo( $textarea, 1000, { offset: -gap }); > > > That is if you only scroll vertically, else you need to calculate both > > gaps and use: > > $.scrollTo( $textarea, 1000, { offset:{ top:-gap1, left:-gap2 }} ); > > > If you really want to scroll based on the caret position, you need to > > count the lines with a regex, looking for \n or /^/m. > > I don't think you need to involve font-size. Textareas have a property > > named 'rows'. So to keep it easy, if you specified 55 rows, and the > > height is 550, then each row is 10px. So you count the rows and voila! > > ( I think :) ). > > So well.. give this a try, let me know if this doesn't do what you > > need. > > > Cheers > > Ariel Flesler > > On Feb 5, 8:06 am, Ariel Flesler <[EMAIL PROTECTED]> wrote: > > > > > > > Hi Lihao, I assume 550 is width and height so it's a squared textarea. > > IMO 550 fits on any screen ( fits on 800x600 ). > > You could simply scroll to the textarea and leave a gap below. You > > could add a margin to the textarea and set the option 'margin' to > > true, will it stop when it reaches the margin. The hard way would be: > > > var $textarea = $('textarea');//this you need to customize > > var gap = ($(window).height() - $textarea.height()) / 2;//this is the > > margin on top > > $.scrollTo( $textarea, 1000, { offset: -gap }); > > > That is if you only scroll vertically, else you need to calculate both > > gaps and use: > > $.scrollTo( $textarea, 1000, { offset:{ top:-gap1, left:-gap2 }} ); > > > If you really want to scroll based on the caret position, you need to > > count the lines with a regex, looking for \n or /^/m. > > I don't think you need to involve font-size. Textareas have a property > > named 'rows'. So to keep it easy, if you specified 55 rows, and the > > height is 550, then each row is 10px. So you count the rows and voila! > > ( I think :) ). > > So well.. give this a try, let me know if this doesn't do what you > > need. > > > Cheers > > Hi, Ariel: > > really thank you for your help, I guess I've done a first-version > solution with your plug-in, looks work well : -) The code is roughly > as follows: > BTW. I want to scroll the contents within the textares element:-) > > var $text = $('form#myform textarea:eq(0)'); > var txt = $test.val(); > var scroll = { > x : $text.width()/2.0, /* center x-coordinate */ > y : $text.height()/2.0, /* center y-coordinate */ > r : $text.height()/11, /* height per-row, 11 total */ > v : $text.height() /* vertical height */ > > }; > > var do_scroll = function() { > /* IEs dont need to scroll.*/ > if ($.browser.msie) return; > /* get the sub-string before the current caret position */ > var btxt = txt.substr(0, findhist.pos[current]); > /* compute gap by counting number of lines, roughly 50 chars per- > line */ > var gap = (btxt.match(/.{1,50}|\n(?=\n)/g).length) * scroll.r; > if (gap > scroll.v) > $text.scrollTo({ top: gap - scroll.y }); > else > $text.scrollTo({ top: 0 }); > > } > > Some weird things: > > 1) Since it's hard to specify number of characters per-line becouse of > "word-wrap", so I roughly set a number '50' as chars per-line so that > I can count the number of rows, is there any more practical ways?? > > 2) I've specified rows="10" as an attribute of the textarea, i.e. > > <textarea name="content" id="content" rows="10" cols="60" > style="width:550px"></textarea> > > but I found it's actually 11 rows shown in my textarea? Is there any > tricks?? :- ) > > 3) cols="60" seems not work as I thought, I can only type 43 '1's but > 96 'i's in one line.. So seems this value is not very useful: - ( > > Thanks again, > lihao(XC)- Ocultar texto de la cita - > > - Mostrar texto de la cita -- Ocultar texto de la cita - > > - Mostrar texto de la cita -