I wanted to make a handler when hovering over a sector of a diagram, but in order not to make the canvas not render at all, here’s an approximate code:
window.onload = function() { var drawingCanvas = document.getElementById('chart1'); if(drawingCanvas && drawingCanvas.getContext) { var context = drawingCanvas.getContext('2d'); var size = drawingCanvas.height; var n = 5; //Число секторов var rad = 2/n*Math.PI; var start = 3*Math.PI/2; var r = size/2; var colorTable = ['#DC3912','#FF9900','#FFF804','#66AA00','#6BE5F3','#3366CC','#990099','#DD4477', '#DC3912','#FF9900','#FFF804','#66AA00','#6BE5F3','#3366CC','#990099','#DD4477']; for (var i = 1; i < n+1; i++) { //сектор context.fillStyle = colorTable[i-1]; context.beginPath(); context.moveTo(drawingCanvas.height/2, drawingCanvas.width/2); context.arc(drawingCanvas.height/2, drawingCanvas.width/2,size/2/100*80,start+rad*(i-1),start+rad*i,false); context.closePath(); context.fill(); } // пишем текст context.fillStyle = '#ffffff'; context.font = '20pt Tahoma'; context.textAlign = 'center'; context.textBaseline = 'middle'; context.fillText(text, r,r); //context.onmousemove = mousemove; // Функция вызываемая в момент когда курсор перемещается в облости холста setInterval(function(){ function mousemove(evt) { var mouseX = evt.pageX - context.offsetLeft; var mouseY = evt.pageY - context.offsetTop; for (var i = 1; i < n+1; i++) { var a1 = start+rad*(i-1); var a2 = start+rad*i; if((mouseX-r)*(mouseX-r)+(mouseY-r)*(mouseY-r)<r*r && mouseY>Math.tan(a1)*mouseX+r && mouseY>Math.tan(a2)*mouseX+r){ text = i; } } }},1000 / 60);
}}
And the canvas itself: <canvas id = 'chart1' width = '316' height = '316'> </ canvas>
I want to understand myself without the use of frameworks.