<div id="viewDiv">
</div>
html,
body,
#viewDiv {
  padding: 0;
  margin: 0;
  height: 100%;
  width: 100%;
}
require(["esri/Map", "esri/views/MapView", "esri/Graphic"], function (
  EsriMap,
  MapView,
  Graphic
) {
  const map = new EsriMap({
    basemap: "streets-vector"
  });
  const view = new MapView({
    center: [-90, 34],
    scale: 50000000,
    container: "viewDiv",
    map: map
  });

  // First create a point geometry (this is the location of the Titanic)
  const point = {
    type: "point", // autocasts as new Point()
    longitude: -90,
    latitude: 41.73
  };

  // Create a symbol for drawing the point
  const markerSymbol = {
    type: "simple-marker", // autocasts as new SimpleMarkerSymbol()
    color: [226, 119, 40],
    outline: {
      // autocasts as new SimpleLineSymbol()
      color: [255, 255, 255],
      width: 2
    }
  };

  const selectSymbol = {
    type: "simple-marker", // autocasts as new SimpleMarkerSymbol()
    color: [226, 119, 40],
    outline: {
      // autocasts as new SimpleLineSymbol()
      style: "short-dot",
      color: [0, 255, 255],
      width: 1
    }
  };

  // Create a graphic and add the geometry and symbol to it
  const pointGraphic = new Graphic({
    geometry: point,
    symbol: markerSymbol
  });

  const stop = (evt) => evt.stopPropagation();

  const updateGraphic = (event, symbol = selectSymbol) => {
    pointGraphic.geometry = view.toMap(event);
    pointGraphic.symbol = symbol;
  };

  const cleanUp = (event) => {
    console.log("done moving graphic");
    updateGraphic(event, markerSymbol);
    handlers.forEach((a) => a.remove());
    handlers.length = 0;
  };

  // Add the graphic to the view's graphics layer
  view.graphics.add(pointGraphic);

  const handlers = [];

  view.on("hold", ({ mapPoint }) => {
    view.hitTest(view.toScreen(mapPoint)).then((hitResult) => {
      if (!hitResult.results[0].graphic) return;
      console.log("hold event, now drag mouse to move graphic");
      pointGraphic.symbol = selectSymbol;
      const pausePan = view.on("drag", stop);
      const move = view.on("pointer-move", updateGraphic);
      const up = view.on("pointer-up", cleanUp);
      handlers.push(pausePan);
      handlers.push(move);
      handlers.push(up);
    });
  });
});

External CSS

  1. https://js.arcgis.com/next/esri/css/main.css

External JavaScript

  1. https://js.arcgis.com/next