posts - 18,  comments - 0,  trackbacks - 0

          //=======================================
          //功能: 滾動文本框精確位置定位
          //輸入參數:
          //?self ??滾動文本框對象
          //?_startLine ?開始行數
          //?_endLine ?結束行數
          //?_startPoint 開始行數的開始位置
          //?_endPoint ?結束行數的結束位置
          //調用方法:
          //?①同一行,從開始位置到結束位置:
          //?? selToLinePoint(self, 2, 2, 0/1, 0)
          //?②不同一行,從某一開始位置到結束位置:
          //?? selToLinePoint(self, 2, 4, 3, 0)
          //?③不同一行,從某一開始位置到某一結束位置:
          //?? selToLinePoint(self, 2, 4, 3, 9)
          //=======================================
          function selToLinePoint(self, _startLine, _endLine, _startPoint, _endPoint, _len){
          ?var src = self;
          ?var oTR = self.createTextRange();
          ?var text = self.innerText;
          ?var textLength = text.length;
          ?
          ?conts = [0];
          ?startx = src.createTextRange().getClientRects()[0].left;
          ?starty = src.createTextRange().getClientRects()[0].top;
          ?stepy = 3; ??//光標向下移動的步長,不能大于textarea中的字高
          ?currentScr = 0; ?//當前滾動條位置
          ?stepScr = 30; ?//滾動條向下滾動的步長,不能大于textarea的高度
          ?
          ?while(1){
          ??src.scrollTop = currentScr
          ??currenty = starty
          ??while(1){ //光標從textarea內容的開頭開始向下移動,遍歷各行,在conts[]中記下各換行位置
          ???oTR.moveToPoint(startx, currenty)
          ???oTR.moveEnd("character", textLength)
          ???var _oTR_Line_Length = oTR.text.length;
          ???cont = textLength - _oTR_Line_Length;
          ???if (cont >= textLength){
          ????break
          ???}
          ???if (cont>conts[conts.length - 1]){
          ????conts[conts.length] = cont
          ???}
          ???currenty += stepy
          ??}
          ??if (currentScr >= src.scrollHeight){
          ???break
          ??}
          ??currentScr += stepScr;
          ?}
          ?
          ?if (_endLine == "")
          ??_endLine = _startLine;
          ?_startLine = parseInt(_startLine);
          ?_endLine = parseInt(_endLine);
          ?
          ?if (isFinite(_startLine) && isFinite(_endLine) && _startLine > 0 && _endLine > 0){
          ??//檢查參數有效性
          ??if (_startLine > conts.length || _endLine > conts.length){
          ???alert("總共只有" + conts.length + "行,請檢查后重試。");
          ???return;
          ??}
          ??
          ??//如果結束行在開始行之前,強行調整參數
          ??if (_endLine < _startLine){
          ???_endLine = _startLine;
          ???end.value = _endLine;
          ??}
          ??
          ??src.scrollTop = 0;
          ??oTR.moveToPoint(startx, starty); ?//光標回到textarea內容的開頭
          ??st = conts[_startLine - 1];
          ??
          ??if (st > _startPoint){
          ???st = st + _startPoint;
          ??}else{
          ???var _rightTextLen = 0;
          ???for (var m = 0; m < conts.length; m++){
          ????if (conts[m] < _startPoint){
          ?????_rightTextLen = _startPoint - conts[m];
          ?????st = _startPoint - _rightTextLen;
          ?????if (_endLine == _startLine){
          ??????_endLine++;
          ?????}
          ????}else{
          ?????break;
          ????}
          ???}

          ???if (st + _rightTextLen < textLength){
          ????st = st + _rightTextLen;
          ???}
          ?????
          ??}
          ??
          ??texpreStart = text.substr(0, st);
          ??texpreStart = text.substr(0, st).replace(/\r/g, ""); //自textarea內容的開頭至選擇起點前的字串,由于moveStart方法將\r\n視為一個字符,需要修正計數
          ??
          ??st = texpreStart.length;
          ??oTR.moveStart("character", st);
          ??en = textLength;
          ??if (_endLine < conts.length){
          ???en = conts[_endLine];
          ???if (_endPoint > 0){
          ????var laLineLen = conts[_endLine] - conts[_endLine -1];
          ????en = en - laLineLen + _endPoint;
          ???}
          ??}
          ??texpreEnd = text.substr(0, en).replace(/\r/g,"") //自textarea內容的開頭至選擇結束點前的字串,由于moveEnd方法將\r\n視為一個字符,需要修正計數
          ??en = texpreEnd.length
          ??var _endX = en - st;
          ??oTR.moveEnd("character", _endX);
          ??oTR.select();
          ?}
          ?
          }

          posted on 2007-03-16 15:47 LORD BLOG 閱讀(577) 評論(0)  編輯  收藏 所屬分類: 項目筆記
          主站蜘蛛池模板: 绩溪县| 高淳县| 罗江县| 永丰县| 城固县| 肃宁县| 南宫市| 孝义市| 马尔康县| 德惠市| 仪陇县| 崇州市| 同仁县| 齐齐哈尔市| 任丘市| 佳木斯市| 洛阳市| 上蔡县| 驻马店市| 稻城县| 鄄城县| 施甸县| 娄底市| 平度市| 达拉特旗| 长葛市| 锡林浩特市| 大悟县| 定襄县| 贡觉县| 无锡市| 榆林市| 杭锦旗| 新化县| 灵台县| 商水县| 措美县| 西盟| 都兰县| 宁安市| 福建省|