⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 esri_core.js

📁 ARCGIS程序,可以实现查、缩放等功能
💻 JS
📖 第 1 页 / 共 3 页
字号:

  function processMouseDown(e) {
    self.isActive = false;
    var pt = EsriUtils.getXY(e).offset(-bounds.left, -bounds.top);
    EsriUtils.stopEvent(e);
    self.isActive = false;
    callback(pt);
    return false;
  }
}

function EsriDrawPolyShapeAction(isPolygon) {
  this.inheritsFrom(new EsriAction());
  this.name = (isPolygon) ? "EsriDrawPolygonAction" : "EsriDrawPolylineAction";
  var isPgon = isPolygon;
  var element, callback, contCallback, bounds, pts, index, gr, tGr;
  var self = this;

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

    gr = EsriUtils.createGraphicsElement(element.id + "gr", element);
    EsriUtils.setElementStyle(gr.gc, "z-index:" + this.graphicsZIndex + ";");
    gr.lineColor = this.lineColor;
    gr.lineWidth = this.lineWidth;
    gr.lineOpacity = this.lineOpacity;

    tGr = EsriUtils.createGraphicsElement(element.id + "tGr", element);
    EsriUtils.setElementStyle(tGr.gc, "z-index:" + this.graphicsZIndex + ";");
    tGr.lineColor = this.lineColor;
    tGr.lineWidth = this.lineWidth;
    tGr.lineOpacity = this.lineOpacity;
    element.style.cursor = tGr.gc.style.cursor = this.cursor;
    element.onmousedown = tGr.gc.onmousedown = processMouseDown;
  }

  this.deactivate = function() {
    this.isActive = false;
    if (element != null) {
      element.onmousedown = null;
      element.style.cursor = "default";
    }
    if (gr != null) {
      gr.gc.onmousedown = null;
      gr.destroy();
    }
    if (tGr != null) tGr.destroy();
    element = bounds = pts = index = gr = tGr = null;
  }

  this.reactivate = function() {
    element.onmousedown = tGr.gc.onmousedown = null;
    element.onclick = tGr.gc.onclick = null;
    element.ondblclick = tGr.gc.ondblclick = null;
    element.onmousemove = tGr.gc.onmousemove = null;
    element.onmouseup = tGr.gc.onmouseup = null;
    var e = element;
    var c = callback;
    var cc = contCallback;
    this.deactivate();
    this.activate(e, c, cc);
  }

  function processMouseDown(e) {
    self.isActive = true;
    bounds = EsriUtils.getElementPageBounds(element);
    pts = new Array();
    index = 0;
    pts.push(EsriUtils.getXY(e).offset(-bounds.left, -bounds.top));
    EsriUtils.stopEvent(e);

    element.onmousedown = tGr.gc.onmousedown = null;
    element.onclick = tGr.gc.onclick = processClick;
    element.onmousemove = tGr.gc.onmousemove = processMouseMove;
    element.ondblclick = tGr.gc.ondblclick = processDblClick;
    return false;
  }

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

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

  function processDblClick(e) {
    self.isActive = false;
    tGr.clear();
    gr.clear();
    tGr.gc.onclick = tGr.gc.onmousemove = tGr.gc.ondblclick = element.onclick = element.onmousemove = element.ondblclick = null;
    element.onmousedown = tGr.gc.onmousedown = processMouseDown;

    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));
    EsriUtils.stopEvent(e);
    callback(newPts);
    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;
  var currLength = 0;
  var self = this;

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

    gr = EsriUtils.createGraphicsElement(element.id + "gr", element);
    EsriUtils.setElementStyle(gr.gc, "z-index:" + this.graphicsZIndex + ";");
    gr.lineColor = this.lineColor;
    gr.lineWidth = this.lineWidth;
    gr.lineOpacity = this.lineOpacity;
    gr.fillColor = this.fillColor;
    gr.fillOpacity = this.fillOpacity;
    element.style.cursor = gr.gc.style.cursor = this.cursor;
    element.onmousedown = gr.gc.onmousedown = processMouseDown;
  }

  this.deactivate = function() {
    this.isActive = false;
    if (element != null) {
      element.onmousedown = null;
      element.style.cursor = "default";
    }
    if (gr != null) {
      gr.gc.onmousedown = null;
      gr.destroy();
    }
    element = gr = 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;
    this.deactivate();
    this.activate(e, c, cc);
  }

  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);
    gr.clear();
    gr.drawPoint(center);
    EsriUtils.stopEvent(e);
    return false;
  }

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

  function processMouseUp(e) {
    self.isActive = false;
    gr.clear();
    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)));
    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);
    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);
    bd = EsriUtils.getElementBounds(element);
    if (! bd.width || bd.height) {
      bd.width = pBd.width;
      bd.height = pBd.height;
    }
    element.style.cursor = this.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);
  }

  function processMouseMove(e) {
    var xy = EsriUtils.getXY(e);
    EsriUtils.stopEvent(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 && dX < 0) return;
      else if (b.height < minh && dY < 0) return;
      else if (maxw && b.width > maxw && dX > 0) return;
      else if (maxh && b.height > maxh && dY > 0) return;
      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;
      }

      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) {
    self.isActive = false;
    processMouseMove(e);
    pBd = EsriUtils.getElementPageBounds(element);
    bd = EsriUtils.getElementBounds(element);
    direction = "";
    element.onmousedown = element.onmouseup = null;
    if (docInp) document.onmousemove = document.onmouseup = null;
    callback(bd);
    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() {
    processMouseOut();
    element = callback = 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) {
    self.isActive = false;
    var kc = EsriUtils.getKeyCode(e);
    EsriUtils.stopEvent(e);
    return callback(kc);
  }
}

⌨️ 快捷键说明

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