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)  編輯  收藏 所屬分類: 項目筆記
          主站蜘蛛池模板: 黎城县| 亳州市| 家居| 广安市| 峨山| 广汉市| 肇源县| 日喀则市| 曲阜市| 岑溪市| 开阳县| 西城区| 灌云县| 广饶县| 滕州市| 泰安市| 石狮市| 怀宁县| 西乌珠穆沁旗| 合江县| 永城市| 临安市| 镇原县| 宾阳县| 梨树县| 神木县| 天全县| 宁津县| 任丘市| 江陵县| 交口县| 措勤县| 磴口县| 宁津县| 邵阳市| 大姚县| 铁岭市| 利辛县| 台山市| 盈江县| 遂溪县|