Messages from the canvas will show up here:
Canvas Message Area
Messages from the wrapper will show up here:
Wrapper Message Area
<head> <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script> <script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML"> </script> <script type="text/x-mathjax-config"> MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}}); </script> <link rel="stylesheet" href="http://mirkwood.cs.edinboro.edu/~bennett/style/hw.css"> </head> <body> <h1> Events in the Canvas Demo</h1> <div id="canvasWrapper" style="border:2px solid #ff0000"> <canvas id="eventCanvas" width="400" height="200" style="border:1px solid #000000;"></canvas> <p> Messages from the canvas will show up here: <pre id="messageArea"> Canvas Message Area </pre> <p> Messages from the wrapper will show up here: <pre id="wrapperMessageArea"> Wrapper Message Area </pre> </div> <script type="text/javascript" src="../code/event.js"> </script> Notes: <ul> <li> The div respons to <ul> <li> Click events. <li> FocusLoss events. </ul> <li> The canvas responds <ul> <li> to the events: click, keydown, focus, wheel <li> p will turn mouse tracking on and off. <li> it watches for shift, ctrl and alt keys too. </ul> </ul> </body>
"use strict" let wrapper = document.getElementById("canvasWrapper"); let canvas = document.getElementById("eventCanvas"); canvas.tabIndex = 0; let ctx = canvas.getContext('2d'); let clickCount = 0; wrapper.addEventListener("click", WrapperClick); wrapper.addEventListener("focusout", WrapperFocusOut); canvas.addEventListener("click", MyHandler); canvas.addEventListener("keydown", MyHandler); canvas.addEventListener("focus", MyHandler); canvas.addEventListener("wheel", MyHandler); let pointerActive = false; let mousex = canvas.width/2; let mousey = canvas.height/2; ctx.font = "15px Georgia"; function WrapperClick(evnt) { let msgArea = document.getElementById("wrapperMessageArea"); clickCount++; let text = "Click in DIV " + clickCount + " times"; msgArea.innerText = text; } function WrapperFocusOut(evnt) { let msgArea = document.getElementById("wrapperMessageArea"); let text = "Lost Focus"; msgArea.innerText = text; } function MyHandler(evnt) { // either bind the event handler, or get the canvas. let canvas = document.getElementById("eventCanvas"); let msgArea = document.getElementById("messageArea"); let text = ""; switch(evnt.type) { case "click": text = "Click \n"; text += "It was the "+ evnt.button+ " button"; mousex = evnt.offsetX; mousey = evnt.offsetY; ctx.fillRect(evnt.offsetX, evnt.offsetY, 2,2); break; case "focus": let divArea = document.getElementById("wrapperMessageArea"); text = "Focus \n"; divArea.innerText = "\n"; break; case "keydown": text = "A key: "+ evnt.key+ " was pressed\n"; ctx.strokeText(evnt.key, mousex, mousey); if (evnt.key == 'p') { if (!pointerActive) { canvas.addEventListener("pointermove", MyHandler); pointerActive = true; } else { canvas.removeEventListener("pointermove", MyHandler); pointerActive = false; } } if (evnt.altKey) { text += "\tThe alt key was pressed \n"; } if (evnt.ctrlKey) { text += "\tThe crtl key was pressed \n"; } if (evnt.shiftKey) { text += "\tThe shift key was pressed \n"; } break; case 'pointermove': text = "Ponter Move \n"; text += "Located at ("+Math.floor(evnt.offsetX) + ", "+Math.floor(evnt.offsetY)+")\n"; break; default: text = "Unknown Event\n"; } msgArea.innerText = text; }