<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"
  });
  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) => {
        const g = pointGraphic.clone();
        g.geometry = view.toMap(event);
        g.symbol = symbol;
        view.graphics.removeAll();
        view.graphics.add(g);
      });
  
      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");
          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/4.6/esri/css/main.css

External JavaScript

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