• Edit
  • Download
  • <!DOCTYPE html>
    <html>
    
    <head>
      <meta charset="utf-8">
      <title>ZingSoft Demo</title>
    
      <script nonce="undefined" src="https://cdn.zingchart.com/zingchart.min.js"></script>
      <style>
        html,
        body,
        #myChart {
          height: 100%;
          width: 100%;
        }
      </style>
    </head>
    
    <body>
      <div id='myChart'></div>
      <script>
        ZC.LICENSE = ["569d52cefae586f634c54f86dc99e6a9", "b55b025e438fa8a98e32482b5f768ff5"];
        var ogMarkerSelected = false;
        var ogMarkerId = 'draggableMarker';
    
        var myConfig = {
          type: "mixed",
          title: {
            text: "Click and Drag Marker"
          },
          scaleY: {
            markers: [{
              type: 'line',
              lineWidth: 25,
              lineColor: '#FFAB40',
              range: [55]
            }]
          },
          series: [{
            type: 'scatter',
            values: [35, 42, 67, 89, 25, 34, 67, 85]
          }]
        };
    
        zingchart.render({
          id: 'myChart',
          data: myConfig,
          height: '100%',
          width: '100%'
        });
    
        /**
         * Event listener for 'mousedown'. Get xyinfo from graph.
         * Currently, scale.markers are shapes but they live in 
         * a different svg group than other shapes so the events
         * system does not work the same for them. This is so 
         * we can layer and place them appropriately. So for this
         * we must conduct a solution to create our own shape_mousedown
         * event.
         * 
         * Once we register scale.marker_mousedown we can continue to draw it
         */
        zingchart.bind('myChart', 'mousedown', function(e) {
          // hide the image map so we can grab the scale marker
          var img = document.getElementById('myChart-img');
          img.style.display = 'none';
    
          // this will now grab the scale marker
          var target = document.elementFromPoint(e.x, e.y);
    
          // re display the image map
          img.style.display = 'initial';
    
          // check to see
          if (isScaleMarker(target.id)) {
            ogMarkerSelected = true;
            img.style.cursor = 'row-resize';
          } else {
            ogMarkerSelected = false;
          }
        });
    
        zingchart.bind('myChart', 'mousemove', function(e) {
          if (ogMarkerSelected) {
    
            // Returns array of 3 * n plots
            // index 0 is scale-x info
            // index 1 is scale-y info
            // index 2 is node/plot info
            var ogXYInfo = zingchart.exec('myChart', 'getxyinfo', {
              x: e.x,
              y: e.y
            });
    
            // Set new series values in graph
            zingchart.exec('myChart', 'modify', {
              data: {
                'scale-y': {
                  markers: [{
                    type: 'line',
                    id: ogMarkerId,
                    lineWidth: 25,
                    lineColor: '#FFAB40',
                    range: [ogXYInfo[1].scalevalue],
                    pairScale: 'x'
                  }]
                }
              }
            });
          }
        });
    
        /**
         * Event listener for 'mouseup'. Get xyinfo from graph
         */
        zingchart.bind('myChart', 'mouseup', function(e) {
          var img = document.getElementById('myChart-img');
          img.style.cursor = 'default';
          ogMarkerSelected = false;
        });
    
        /*
         * Will parse the svg path id which will look something like:
         * myChart-graph-id0-scale-y-marker-0-path
         *
         * It will return true if we are targeting a scale marker
         */
        function isScaleMarker(targetId) {
          var targetPath = targetId.split('-');
          var bIsScaleMarker = false;
    
          for (var i = 0; i < targetPath.length; i++) {
            if (targetPath[i] === 'marker')
              bIsScaleMarker = true;
          }
    
          return bIsScaleMarker;
    
        }
      </script>
    </body>
    
    </html>
    <!DOCTYPE html>
    <html>
    
    <head>
      <meta charset="utf-8">
      <title>ZingSoft Demo</title>
    
      <script src="https://cdn.zingchart.com/zingchart.min.js"></script>
    </head>
    
    <body>
      <div id='myChart'></div>
    </body>
    
    </html>
    html,
    body,
    #myChart {
      height: 100%;
      width: 100%;
    }
    var ogMarkerSelected = false;
    var ogMarkerId = 'draggableMarker';
    
    var myConfig = {
      type: "mixed",
      title: {
        text: "Click and Drag Marker"
      },
      scaleY: {
        markers: [{
          type: 'line',
          lineWidth: 25,
          lineColor: '#FFAB40',
          range: [55]
        }]
      },
      series: [{
        type: 'scatter',
        values: [35, 42, 67, 89, 25, 34, 67, 85]
      }]
    };
    
    zingchart.render({
      id: 'myChart',
      data: myConfig,
      height: '100%',
      width: '100%'
    });
    
    /**
     * Event listener for 'mousedown'. Get xyinfo from graph.
     * Currently, scale.markers are shapes but they live in 
     * a different svg group than other shapes so the events
     * system does not work the same for them. This is so 
     * we can layer and place them appropriately. So for this
     * we must conduct a solution to create our own shape_mousedown
     * event.
     * 
     * Once we register scale.marker_mousedown we can continue to draw it
     */
    zingchart.bind('myChart', 'mousedown', function(e) {
      // hide the image map so we can grab the scale marker
      var img = document.getElementById('myChart-img');
      img.style.display = 'none';
    
      // this will now grab the scale marker
      var target = document.elementFromPoint(e.x, e.y);
    
      // re display the image map
      img.style.display = 'initial';
    
      // check to see
      if (isScaleMarker(target.id)) {
        ogMarkerSelected = true;
        img.style.cursor = 'row-resize';
      } else {
        ogMarkerSelected = false;
      }
    });
    
    zingchart.bind('myChart', 'mousemove', function(e) {
      if (ogMarkerSelected) {
    
        // Returns array of 3 * n plots
        // index 0 is scale-x info
        // index 1 is scale-y info
        // index 2 is node/plot info
        var ogXYInfo = zingchart.exec('myChart', 'getxyinfo', {
          x: e.x,
          y: e.y
        });
    
        // Set new series values in graph
        zingchart.exec('myChart', 'modify', {
          data: {
            'scale-y': {
              markers: [{
                type: 'line',
                id: ogMarkerId,
                lineWidth: 25,
                lineColor: '#FFAB40',
                range: [ogXYInfo[1].scalevalue],
                pairScale: 'x'
              }]
            }
          }
        });
      }
    });
    
    /**
     * Event listener for 'mouseup'. Get xyinfo from graph
     */
    zingchart.bind('myChart', 'mouseup', function(e) {
      var img = document.getElementById('myChart-img');
      img.style.cursor = 'default';
      ogMarkerSelected = false;
    });
    
    /*
     * Will parse the svg path id which will look something like:
     * myChart-graph-id0-scale-y-marker-0-path
     *
     * It will return true if we are targeting a scale marker
     */
    function isScaleMarker(targetId) {
      var targetPath = targetId.split('-');
      var bIsScaleMarker = false;
    
      for (var i = 0; i < targetPath.length; i++) {
        if (targetPath[i] === 'marker')
          bIsScaleMarker = true;
      }
    
      return bIsScaleMarker;
    
    }