esri_core.js

来自「esri的ArcGIS Server超级学习模板程序(for java)」· JavaScript 代码 · 共 1,599 行 · 第 1/4 页

JS
1,599
字号
  }

  function processMouseMove(e) {
    if (lineGraphic) tGr.remove(lineGraphic);
    if (isPgon && closePolyGraphic) tGr.remove(closePolyGraphic);
    if (bounds) {
      var pt = EsriUtils.getXY(e).offset(-bounds.left, -bounds.top);
      lineGraphic = tGr.drawLine(pts[index], pt, self.symbol);
      if (isPgon) closePolyGraphic = tGr.drawLine(pt, pts[0], self.symbol);
    }
    EsriUtils.stopEvent(e);
    return false;
  }

  function processClick(e) {
    pts.push(EsriUtils.getXY(e).offset(-bounds.left, -bounds.top));
    index++;
    if (index > 0) polyGraphics.push(gr.drawLine(pts[index - 1], pts[index], self.symbol));
    EsriUtils.stopEvent(e);
    if (contCallback) contCallback(pts);
    return false;
  }

  function processDblClick(e) {
    clearGraphics();
    tGr.gc.onclick = tGr.gc.onmousemove = tGr.gc.ondblclick = element.onclick = element.onmousemove = element.ondblclick = null;
    element.onmousedown = tGr.gc.onmousedown = processMouseDown;

    if (pts) {
      var newPts = new Array();
      for (var i=1;i<pts.length;i++) { if (pts[i].x != pts[i-1].x || pts[i].y != pts[i-1].y) newPts.push(pts[i-1]); }
      newPts.push(EsriUtils.getXY(e).offset(-bounds.left, -bounds.top));
      callback(newPts);
    }

    self.isActive = false;
    EsriUtils.stopEvent(e);
    return false;
  }
}

function EsriDrawPolylineAction() { return new EsriDrawPolyShapeAction(false); }
function EsriDrawPolygonAction() { return new EsriDrawPolyShapeAction(true); }

function EsriDrawCircleAction() {
  this.inheritsFrom(new EsriAction());
  this.name = "EsriDrawCircleAction";
  var element, callback, contCallback, bounds, center, gr, currPt, pointGraphic, circleGraphic;
  var currLength = 0;
  var createGraphic = true;
  var self = this;

  this.activate = function(elem, cF, ccF, ge) {
    element = elem;
    callback = cF;
    contCallback = ccF;

    if (ge) {
      createGraphic = false;
      gr = ge;
    }
    else {
      gr = EsriUtils.createGraphicsElement(element.id + "gr", element);
      EsriUtils.setElementStyle(gr.gc, "z-index:" + this.graphicsZIndex + ";");
    }
    element.style.cursor = self.cursor;
    element.onmousedown = gr.gc.onmousedown = processMouseDown;
  }

  this.deactivate = function() {
    this.isActive = false;
    if (element != null) {
      element.onmousedown = element.onmousemove = element.onmouseup = null;
      element.style.cursor = "default";
    }
    if (gr != null) {
      gr.gc.onmousedown = gr.gc.onmousemove = gr.gc.onmouseup = null;
      if (pointGraphic) gr.remove(pointGraphic);
      if (circleGraphic) gr.remove(circleGraphic);
      if (createGraphic) gr.destroy();
    }
    element = gr = pointGraphic = circleGraphic = null;
  }

  this.reactivate = function() {
    element.onmousedown = gr.gc.onmousedown = null;
    element.onmousemove = gr.gc.onmousemove = null;
    element.onmouseup = gr.gc.onmouseup = null;
    var e = element;
    var c = callback;
    var cc = contCallback;
    var ge = createGraphic ? null : gr;
    this.deactivate();
    this.activate(e, c, cc, ge);
  }

  function getLength(pt1, pt2) { return Math.sqrt(Math.pow(pt1.x - pt2.x, 2) + Math.pow(pt1.y - pt2.y, 2)); }

  function processMouseDown(e) {
    self.isActive = true;
    bounds = EsriUtils.getElementPageBounds(element);
    element.onmousedown = gr.gc.onmousedown = null;
    element.onmousemove = gr.gc.onmousemove = processMouseMove;
    element.onmouseup = gr.gc.onmouseup = processMouseUp;
    center = EsriUtils.getXY(e).offset(-bounds.left, -bounds.top);
    if (pointGraphic) gr.remove(pointGraphic);
    if (circleGraphic) gr.remove(circleGraphic);
    pointGraphic = gr.drawPoint(center, self.symbol);
    EsriUtils.stopEvent(e);
    return false;
  }

  function processMouseMove(e) {
    var radius = Math.round(getLength(center, EsriUtils.getXY(e).offset(-bounds.left, -bounds.top)));
    if (pointGraphic) gr.remove(pointGraphic);
    if (circleGraphic) gr.remove(circleGraphic);
    pointGraphic = gr.drawPoint(center,self.symbol);
    circleGraphic = gr.drawCircle(center, radius, self.symbol);
    EsriUtils.stopEvent(e);
    if (contCallback) contCallback(center, radius);
    return false;
  }

  function processMouseUp(e) {
    if (pointGraphic) gr.remove(pointGraphic);
    if (circleGraphic) gr.remove(circleGraphic);
    element.onmousemove = gr.gc.onmousemove = element.onmouseup = gr.gc.onmouseup = null;
    element.onmousedown = gr.gc.onmousedown = processMouseDown;
    EsriUtils.stopEvent(e);
    callback(center, getLength(center, EsriUtils.getXY(e).offset(-bounds.left, -bounds.top)));

    self.isActive = false;
    return false;
  }
}

function EsriMouseWheelAction() {
  this.inheritsFrom(new EsriAction());
  this.name = "EsriMouseWheelAction";
  var element, callback;
  var wheelTimer, timerValue;

  this.activate = function(elem, callbackFunc) {
    element = elem;
    callback = callbackFunc;
    if (EsriUtils.isIE) element.onmousewheel = processMouseWheel;
    else element.addEventListener("DOMMouseScroll", processMouseWheel, false);
  }

  this.deactivate = function() {
    this.isActive = false;
    if (element != null) {
      if (EsriUtils.isIE) element.onmousewheel = null;
      else element.removeEventListener("DOMMouseScroll", processMouseWheel, false);
    }
  }

  function processMouseWheel(e) {
    self.isActive = true;
    var wheelValue = (EsriUtils.isIE) ? window.event.wheelDelta : -e.detail;
    EsriUtils.stopEvent(e);
    var value = wheelValue / EsriUtils.mouseWheelUnit;
    if (timerValue) {
      if (Math.abs(value) > Math.abs(timerValue)) timerValue = value;
      else return;
    }
    else timerValue = value;

    if (wheelTimer) clearTimeout(wheelTimer);
    wheelTimer = setTimeout(function() { callback(value); timerValue = 0; self.isActive = false; }, 500);
    self.isActive = false;
    return false;
  }
}

function EsriResizeElementAction(docInput, minWd, minHt, maxWd, maxHt) {
  this.inheritsFrom(new EsriAction());
  this.name = "EsriResizeElementAction";
  this.cursor = "default";
  this.excludeDirs = [];
  var element, bd, pBd, startPt, callback, contCallback, direction;
  var tol = 5;
  var minw = minWd ? minWd : 0;
  var minh = minHt ? minHt : 0;
  var maxw = maxWd;
  var maxh = maxHt;
  var docInp = docInput;
  var self = this;

  this.activate = function(elem, cbFunc, ccbFunc) {
    element = elem;
    callback = cbFunc;
    contCallback = ccbFunc;
    pBd = EsriUtils.getElementPageBounds(element);
    var borders = EsriUtils.getElementBorders(element);
    pBd.left += borders.left;
    pBd.top += borders.top;
    pBd.width -= (borders.left + borders.right);
    pBd.height -= (borders.top + borders.bottom);

    bd = EsriUtils.getElementBounds(element);
    if (! bd.width || bd.height) {
      bd.width = pBd.width;
      bd.height = pBd.height;
    }
    element.style.cursor = self.cursor;
    direction = "";
    element.onmousemove = processMouseMove;
    self = this;
  }

  this.deactivate = function() {
    this.isActive = false;
    if (element != null) {
      element.style.cursor = "default";
      element.onmousemove = element.onmousedown = element.onmouseup = element = null;
    }
    if (docInp) document.onmousemove = document.onmouseup = null;
  }

  this.reactivate = function() {
    element.onmousedown = element.onmousemove = element.onmouseup = null;
    document.onmousemove = document.onmouseup = null;
    direction = "";
    var e = element;
    var c = callback;
    var cc = contCallback;
    this.deactivate();
    this.activate(e, c, cc);
  }

  this.setMinSize = function(wd, ht) {
    minw = wd;
    minh = ht;
  }

  this.setMaxSize = function(wd, ht) {
    maxw = wd;
    maxh = ht;
  }

  function processMouseMove(e) {
    var xy = EsriUtils.getXY(e);
    if (direction != "" && self.isActive) {
      var b = bd.offset(0, 0);
      var dX = xy.x - startPt.x;
      var dY = xy.y - startPt.y;

      if (direction.indexOf("n") == 0) {
        b.top += dY;
        if (dY < 0) b.height += Math.abs(dY);
        else b.height -= dY;
      }
      else if (direction.indexOf("s") == 0) b.height += dY;

      if (direction.indexOf("w") != -1) {
        b.left += dX;
        if (dX < 0) b.width += Math.abs(dX);
        else b.width -= dX;
      }
      else if (direction.indexOf("e") != -1) b.width += dX;

      if (b.width < minw) return false;
      else if (b.height < minh) return false;
      if (b.width < minw) {
        if ((direction == "n" || direction == "nw" || direction == "w" || direction == "sw") && dX > 0) return false;
        else if ((direction == "ne" || direction == "e" || direction == "se" || direction == "s") && dX < 0) return false;
      }
      else if (b.height < minh) {
        if ((direction == "n" || direction == "ne" || direction == "nw" || direction == "w") && dY > 0) return false;
        else if ((direction == "e" || direction == "se" || direction == "s" || direction == "sw") && dY < 0) return false;
      }
      else if (maxw && b.width > maxw && dX > 0) return false;
      else if (maxh && b.height > maxh && dY > 0) return false;

      EsriUtils.setElementStyle(element, b.toStyle());
      if (contCallback) contCallback(b);
    }
    else {
      var l = pBd.left;
      var t = pBd.top
      var r = l + pBd.width;
      var b = t + pBd.height;

      var dir = new Array();
      for (var i=0;i<2;i++) {
        if (xy.y >= (t - tol) && xy.y <= (t + tol) && dir[0] != "n") dir[i] = "n";
        else if (xy.x >= (r - tol) && xy.x <= (r + tol) && dir[0] != "e") dir[i] = "e";
        else if (xy.y >= (b - tol) && xy.y <= (b + tol) && dir[0] != "s") dir[i] = "s";
        else if (xy.x >= (l - tol) && xy.x <= (l + tol) && dir[0] != "w") dir[i] = "w";
        else dir[i] = null;
      }

      direction = "";
      if (dir[0] != null) direction += dir[0];
      if (dir[1] != null) direction += dir[1];

      if (direction == "es") direction = "se";
      else if (direction == "en") direction = "ne";
      else if (direction == "ws") direction = "sw";
      else if (direction == "wn") direction = "nw";

      if (self.excludeDirs.indexOf(direction) != -1) {
        direction = "";
        return false;
      }

      if (direction) {
        element.style.cursor = direction + "-resize";
        element.onmousedown = processMouseDown;
      }
      else {
        element.style.cursor = self.cursor;
        element.onmousedown = null;
      }
    }
    return false;
  }

  function processMouseDown(e) {
    self.isActive = true;
    startPt = EsriUtils.getXY(e);
    element.onmouseup = processMouseUp;
    if (docInp) {
      document.onmousemove = processMouseMove;
      document.onmouseup = processMouseUp;
    }
    return false;
  }

  function processMouseUp(e) {
    processMouseMove(e);
    pBd = EsriUtils.getElementPageBounds(element);
    var tbd = EsriUtils.getElementBounds(element);
    if (! tbd.equals(bd)) {
      bd = tbd;
      direction = "";
      element.onmousedown = element.onmouseup = null;
      if (docInp) document.onmousemove = document.onmouseup = null;
      callback(bd);
    }
    self.isActive = false;
    return false;
  }
}

function EsriKeyInputAction() {
  this.inheritsFrom(new EsriAction());
  this.name = "EsriKeyInputAction";
  var element, callback, contCallback;
  var self = this;

  this.activate = function(elem, cbF, ccbF) {
    element = elem;
    callback = cbF;
    contCallback = ccbF;
    element.onmouseover = processMouseOver;
    element.onmouseout = processMouseOut;
  }

  this.deactivate = function() { element = callback = contCallback = element.onmouseover = element.onmouseout = document.onkeydown = document.onkeypress = document.onkeyup = null; }

  function processMouseOver() {
    if (EsriUtils.isIE) {
      document.onkeydown = processKeyDownPress;
      document.onkeypress = processKeyFalse;
    }
    else {
      document.onkeydown = processKeyFalse;
      document.onkeypress = processKeyDownPress;
    }
    document.onkeyup = processKeyUp;
    return false;
  }

  function processMouseOut(e) {
    EsriUtils.stopEvent(e);
    document.onkeydown = document.onkeypress = document.onkeyup = null;
  }

  function processKeyFalse(e) {
    EsriUtils.stopEvent(e);
    return false;
  }

  function processKeyDownPress(e) {
    self.isActive = true;
    var kc = EsriUtils.getKeyCode(e);
    EsriUtils.stopEvent(e);
    return contCallback(kc);
  }

  function processKeyUp(e) {
    var kc = EsriUtils.getKeyCode(e);
    EsriUtils.stopEvent(e);
    self.isActive = false;
    return callback(kc);
  }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?