<!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; }