The Spinning Arrow sample application demonstrates how you can create a simple rotating image application using the rotate CSS element.
The following figure illustrates the main screen of the Spinning Arrow.
Figure: Spinning Arrow screen
The application opens with the main screen that shows a spinning arrow after touching the screen or rotating the rotary detent.
Source Files
You can create and view the sample application project, including the source files, in the IDE.
File name | Description |
---|---|
config.xml | This file contains the application information for the platform to install and launch the application, including the view mode and the icon to be used in the device menu. |
css/style.css | This file contains the CSS styling for the application UI. |
index.html | This is a starting file from which the application starts loading. It contains the layout of the application screens. |
js/app.js | This file contains the code for handling the canvas functionality of the application. |
Implementation
Application Layout
Create the main page, which consists of 2 elements: arrow image and page button.
<!-- index.html --> <div> <div id="direction"></div> <input type="button" id="direction-button"/> </div>
Click and Rotary Events
Add event handlers for the click and rotary events:
/* js/app.js */ /* Handle the click event of the direction-button element */ document.getElementById('direction-button').addEventListener('click', function() { rotateArrow("CW"); }, false); /* Handle the rotarydetent event */ document.addEventListener('rotarydetent', function(ev) { var direction = ev.detail.direction; rotateArrow(direction); });
Arrow Image Rotation
The rotateArrow() method rotates the arrow image based on the events:
/* js/app.js */ function rotateArrow(rotaryDirection) { var interval, direction = document.querySelector('#direction'); /* If there is a click event and rotateStatus is false */ if (rotateStatus === false) { /* initialTime sets a random number (100 ~ 150) */ initialTime = (Math.random() * 50) + 100; rotateStatus = true; /* Every 0.075 seconds, run the interval timer */ interval = setInterval(function() { /* If initialTime smaller than 0, clear the timer */ if ((initialTime--) < 0) { clearInterval(interval); rotateStatus = false; } /* If direction is CW, rotate to clockwise direction */ if (rotaryDirection === "CW") { deg = deg + initialTime; } /* If not, rotate to counter-clockwise direction */ else { deg = deg - initialTime; } direction.style.transform = 'rotate(' + deg + 'deg)'; }, 75); } }