requestAnimationFrame - The window.requestAnimationFrame() method tells the browser that you wish to perform an animation and requests that the browser calls a specified function to update an animation before the next repaint. The method takes a callback as an argument.
Coordinates:<style> #container{ border: 1px solid gray; background-color: rgb(236, 225, 225); height: 100px; width: 100%; } #animated_circle{ height: 35px; width: 35px; margin:10px; background-color: rgb(103, 74, 184); border-radius: 50%; } #coordinate_values{ border: 1px solid gray; background-color: rgb(236, 225, 225); padding: 10px; width: 50px; } </style> </head> <body> <h1>Boucing Ball Using Javascript Request Animation Frame</h1> <p>requestAnimationFrame - The window.requestAnimationFrame() method tells the browser that you wish to perform an animation and requests that the browser calls a specified function to update an animation before the next repaint. The method takes a callback as an argument.</p> Coordinates:<br/> <p id="coordinate_values"></p> <div id="container" > <p id="animated_circle"></p> </div> <br> <button id="btnStop">Stop ball</button> <button id="btnStart">Start ball</button> <br><br> <a href = "bouncing_ball_1.html">Example 1</a> <a href = "bouncing_ball_2.html">Example 2</a> <script> let coordinate_values = document.getElementById('coordinate_values'); let animated_circle = document.getElementById('animated_circle'); let xpos = 0; // new vertical position let ypos = 0; // new horizontal position let multiplierX = 1 // multiplier controls speed let multiplierY = 1 // multiplier controls speed let animationRequest = null; const myContainer = document.querySelector('#container'); const screen_width = myContainer.offsetWidth - 50; var btnStop = document.getElementById("btnStop"); btnStop.addEventListener("click", ballStop); var btnStart = document.getElementById("btnStart"); btnStart.addEventListener("click", ballStart); function ballStop() { window.cancelAnimationFrame(animationRequest); } function ballStart() { animationRequest = window.requestAnimationFrame(ballMove); } function ballMove() { // if on screen - left right if (xpos < screen_width && xpos > 1) { // position within range - no change } // ball too far right: then move left (-1) else if (xpos >= screen_width) { // position < width multiplierX = -1 * Math.random(.5); } // too far left: then move right (+1) else if (xpos < 1) { // position < width multiplierX = 1 * Math.random(.5); } xpos = xpos + (10 * multiplierX); // horizonatal position // put x, y values to document.getElementById("coordinate_values").innerHTML = "x=" + parseInt(xpos); // translateX() function is used to move elements in a two-dimensional space // along the x-axis (horizontally).</p> // The translate() CSS function repositions an element in the horizontal // and/or vertical directions. animated_circle.style.transform = `translateX(${xpos}px)`; // initial call animationRequest = window.requestAnimationFrame(ballMove); } // recursive call animationRequest = window.requestAnimationFrame(ballMove); </script> </body>