Advertisement
Guest User

sizeoftime

a guest
Jul 15th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 3.30 KB | None | 0 0
  1. <html>
  2. <div id="canvas">
  3.     <div class="image" seconds="60">
  4.         <img src="images/clock.jpg">
  5.         <div class="description">
  6.             The minute hand on a clock goes around every minute.
  7.         </div>
  8.     </div>
  9.     <div class="image" seconds="1">
  10.         <img src="images/eye.jpg">
  11.         <div class="description">
  12.             Blinking takes about a second.    
  13.         </div>
  14.     </div>
  15. </div>
  16. <div id="display">Seconds: 1</div>
  17. <!-- Slider value is logarithmic for ease of use. -->
  18. <input type="range" min="-1" max="2" default="0" step="0.01" id="slider"></input>
  19.  
  20. <style>
  21. /* Give canvas a set height. Anything that goes beyond the edges is hidden. */
  22. #canvas {
  23.     width: 500px;
  24.     height: 500px;
  25.  
  26.     position: relative;
  27.     overflow: hidden;
  28. }
  29.  
  30. /* Slider width should match canvas width. */
  31. #slider {
  32.     width: 500px;
  33. }
  34.  
  35. /* Images on the canvas, by default, are not shown. */
  36. .image {
  37.     position: absolute;
  38.     display: none;
  39. }
  40.  
  41. .image img {
  42.     width: 100%;
  43.     height: 100%;
  44. }
  45.  
  46. /* Image descriptions are default hidden... */
  47. .image .description {
  48.     display: none;
  49. }
  50.  
  51. /* ...but are visible when the image is hovered over. */
  52. .image:hover .description {
  53.   display: block;
  54. }
  55. </style>
  56.  
  57. <script>
  58. // Get handles for the various elements in the document
  59. var slider = document.getElementById('slider');
  60. var canvas = document.getElementById('canvas');
  61. var display = document.getElementById('display');
  62. var elements = document.getElementsByClassName('image'); // This returns an array, all others are single elements.
  63.  
  64. // Get size of canvas
  65. var canvasHeight = canvas.clientHeight;
  66. var canvasWidth = canvas.clientWidth;
  67.  
  68. function updateElements() {
  69.     // Slider value is logarithmic.
  70.     var seconds = Math.pow(10, parseFloat(slider.value));
  71.  
  72.     // Set display to show current time
  73.     display.innerHTML = `Seconds: ${seconds}`
  74.  
  75.     // Loop over each element and update their positions/sizes.
  76.     for(var element of elements) {
  77.         var scale = element.getAttribute('seconds') / seconds;
  78.  
  79.         if((scale > 4) || (scale < 0.02)) {
  80.            // Image too large or too small to be seen - don't display at all.
  81.            element.style.display = 'none';
  82.        }
  83.        else {
  84.            // Show elements if they were hidden before.
  85.            element.style.display = 'block';
  86.            // Size image, assuming square canvas and square images.
  87.            // The image shouldn't take up the whole screen, hence the /2 at the end.
  88.            var size = canvasWidth * scale / 2;
  89.            element.style.width = size;
  90.            element.style.height = size;
  91.  
  92.            // Place image horizontally. For simplicity, starts at left and moving right.
  93.            // An image at 1x scale will be in the exact center.
  94.            var distanceFromLeft = (canvasWidth * scale - size) / 2;
  95.            element.style.left = distanceFromLeft;
  96.  
  97.            // Place image vertically. For simplicity, this just centers it.
  98.            var distanceFromTop = (canvasHeight - size) / 2;
  99.            element.style.top = distanceFromTop;
  100.        }
  101.    }
  102. }
  103.  
  104. // Call the function once to show initial elements.
  105. updateElements(slider.value);
  106.  
  107. // Register update function to happen whenever the slider is moved.
  108. slider.oninput = updateElements;
  109. </script>
  110. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement