瀏覽器光標相關的一些操作

  /*獲取光標位置*/
  getCursorPos(obj) {
    var CaretPos = 0; // IE Support
    if (document.selection) {
      obj.focus(); //獲取光標位置函數
      var Sel = document.selection.createRange();
      Sel.moveStart("character", -obj.value.length);
      CaretPos = Sel.text.length;
    } // Firefox/Safari/Chrome/Opera support
    else if (obj.selectionStart || obj.selectionStart == "0") CaretPos = obj.selectionEnd;
    return CaretPos;
  }
  // 定位光標
  setCursorPos(obj, pos) {
    if (obj.setSelectionRange) {
      //Firefox/Safari/Chrome/Opera
      obj.focus(); //
      obj.setSelectionRange(pos, pos);
    } else if (obj.createTextRange) {
      // IE
      var range = obj.createTextRange();
      range.collapse(true);
      range.moveEnd("character", pos);
      range.moveStart("character", pos);
      range.select();
    }
  }
  /*
   * 移動光標位置
   * @Method poLastDiv
   */
  poLastDiv(obj) {
    obj.focus();
    if (window.getSelection) {
      //ie11 10 9 ff safari
      obj.focus(); //解決ff不獲取焦點無法定位問題
      let range = window.getSelection(); //創建range
      range.selectAllChildren(obj); //range 選擇obj下所有子內容
      range.collapseToEnd(); //光標移至最後
    } else if (document.selection) {
      //ie10 9 8 7 6 5
      let range = document.selection.createRange(); //創建選擇對象
      range.moveToElementText(obj); //range定位到obj
      range.collapse(false); //光標移至最後
      range.select();
    }
  }
  /*
   * 獲取光標所在元素
   * @Method getCursorWithElement
   */
  getCursorWithElement() {
    let element = this.getDomWithEventtarget;
    var doc = element.ownerDocument || element.document;
    var win = doc.defaultView || doc.parentWindow;
    var sel;
    if (typeof win.getSelection != "undefined") {
      //谷歌、火狐
      sel = win.getSelection();
      if (sel.rangeCount > 0) {
        //選中的區域
        var range = win.getSelection().getRangeAt(0);
        return range.endContainer.parentElement;
      }
    }
    // else if ((sel = doc.selection) && sel.type != "Control") {
    //   //IE
    //   var textRange = sel.createRange();
    //   var preCaretTextRange = doc.body.createTextRange();
    //   preCaretTextRange.moveToElementText(element);
    //   preCaretTextRange.setEndPoint("EndToEnd", textRange);
    //   caretOffset = preCaretTextRange.text.length;
    // }
    // return caretOffset;
  }
  /*
   * 根據座標獲取當前事件dom
   * @Method getDomWithCursorPos
   */
  getDomWithCursorPos(x, y) {
    return document.elementFromPoint(x, y);
  }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章