<iframe src="https://jsxgraph.org/share/iframe/animation-with-requestanimationframe" style="border: 1px solid black; overflow: hidden; width: 550px; aspect-ratio: 55 / 65;" name="JSXGraph example: Animation with requestAnimationFrame" allowfullscreen ></iframe>
<button onclick="play()">play</button> <button onclick="resetAnimation()">reset</button> <div id="board-0-wrapper" class="jxgbox-wrapper " style="width: 100%; "> <div id="board-0" class="jxgbox" style="aspect-ratio: 1 / 1; width: 100%;" data-ar="1 / 1"></div> </div> <script type = "text/javascript"> /* This example is licensed under a Creative Commons Attribution 4.0 International License. https://creativecommons.org/licenses/by/4.0/ Please note you have to mention The Center of Mobile Learning with Digital Technology in the credits. */ const BOARDID = 'board-0'; const board = JXG.JSXGraph.initBoard(BOARDID, { boundingbox: [-1.5, 1.5, 1.5, -1.5], keepaspectratio: true, axis: true }); var isPlaying = false; var starttime = 0; var timeElapsed = 0; var requestId = 0; var p = board.create('point', [() => Math.cos(timeElapsed), () => Math.sin(timeElapsed)] ); function playing() { timeElapsed = (Date.now() - starttime) / 1000; board.update(); requestId = window.requestAnimationFrame(playing); }; function play() { if (!isPlaying) { starttime = Date.now(); isPlaying = true; playing(); } }; function resetAnimation() { if (requestId) { window.cancelAnimationFrame(requestId); } timeElapsed = 0; isPlaying = false; board.update(); }; </script>
/* This example is licensed under a Creative Commons Attribution 4.0 International License. https://creativecommons.org/licenses/by/4.0/ Please note you have to mention The Center of Mobile Learning with Digital Technology in the credits. */ const BOARDID = 'your_div_id'; // Insert your id here! const board = JXG.JSXGraph.initBoard(BOARDID, { boundingbox: [-1.5, 1.5, 1.5, -1.5], keepaspectratio: true, axis: true }); var isPlaying = false; var starttime = 0; var timeElapsed = 0; var requestId = 0; var p = board.create('point', [() => Math.cos(timeElapsed), () => Math.sin(timeElapsed)] ); function playing() { timeElapsed = (Date.now() - starttime) / 1000; board.update(); requestId = window.requestAnimationFrame(playing); }; function play() { if (!isPlaying) { starttime = Date.now(); isPlaying = true; playing(); } }; function resetAnimation() { if (requestId) { window.cancelAnimationFrame(requestId); } timeElapsed = 0; isPlaying = false; board.update(); };
<button onclick="play()">play</button> <button onclick="resetAnimation()">reset</button>
// Define the id of your board in BOARDID const board = JXG.JSXGraph.initBoard(BOARDID, { boundingbox: [-1.5, 1.5, 1.5, -1.5], keepaspectratio: true, axis: true }); var isPlaying = false; var starttime = 0; var timeElapsed = 0; var requestId = 0; var p = board.create('point', [() => Math.cos(timeElapsed), () => Math.sin(timeElapsed)] ); function playing() { timeElapsed = (Date.now() - starttime) / 1000; board.update(); requestId = window.requestAnimationFrame(playing); }; function play() { if (!isPlaying) { starttime = Date.now(); isPlaying = true; playing(); } }; function resetAnimation() { if (requestId) { window.cancelAnimationFrame(requestId); } timeElapsed = 0; isPlaying = false; board.update(); };
This example is licensed under a Creative Commons Attribution 4.0 International License. Please note you have to mention The Center of Mobile Learning with Digital Technology in the credits.