JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>
<br/><!-- Just so that JSFiddle's Result label doesn't overlap the Chart -->
<div id="chartContainer" style="height: 360px; width: 100%;"></div>
CSS
#image{
pointer-events: none;
}
JavaScript
var dps = [];
var updateInterval = 500;
var chart = new CanvasJS.Chart("chartContainer", {
title: {
text: "4.03x",
dockInsidePlotArea: true,
verticalAlign: "center",
fontSize: 100,
},
theme: "dark2",
axisX: {
gridThickness: 0,
tickLength: 0,
labelFontSize: 20,
labelFormatter: function(e) {
return "."
}
},
axisY: {
gridThickness: 0,
tickLength: 0,
margin: 10,
lineThickness: 1,
labelFontSize: 20,
labelFormatter: function(e) {
return "."
}
},
data: [
{
color: "red",
markerSize: 0,
fillOpacity: 0.3,
lineThickness: 4,
type: "area",
markerImageUrl: "https://i.imgur.com/4vH0hYL.png",
dataPoints: dps
}
]
});
imageMarker = $("<img>").attr("src", chart.options.data[0].markerImageUrl)
.css("display", "none")
.css("height", 20)
.css("width", 20)
.appendTo($("#chartContainer>.canvasjs-chart-container"));
chart.render();
var xVal = 0;
var yVal = 0;
var updateChart = function () {
yVal = xVal**2;
dps.push({x: xVal,y: yVal});
xVal++;
chart.render();
chart.axisY[0].set("maximum", yVal + 1);
positionMarkerImage(imageMarker, chart.options.data[0].dataPoints.length - 1);
};
function positionMarkerImage(imageMarker, index){
var pixelX = chart.axisX[0].convertValueToPixel(chart.options.data[0].dataPoints[index].x);
var pixelY = chart.axisY[0].convertValueToPixel(chart.options.data[0].dataPoints[index].y);
imageMarker.css({"position": "absolute",
"display": "block",
"top": pixelY - imageMarker.height()/2,
"left": pixelX - imageMarker.width()/2
});
}
var updateId = setInterval(function () { updateChart();}, updateInterval);
$(window).resize(function() {
positionMarkerImage(imageMarker, chart.options.data[0].dataPoints.length - 1);
});