Image Queue

by Daniel DeGroff

HTML

<script src="https://savant.inversoft.org/org/inversoft/prime/prime.js/0.34.13/prime-min-0.34.13.js"></script>
<div id="container">
  <div id="queue"> </div>
  <div id="view-finder"></div>
</div>

CSS

#container {
  position: relative;
  padding: 25px 0 25px 0;
  border: 1px solid gray;
  height: 100%;
  width: 50%;
  margin: 0 auto;
  overflow-x: hidden;
}

#queue {
  overflow-x: hidden;
  white-space: nowrap;
}

#queue div {
  display: inline-block;
  margin-right: 5px;
  marign-left: 5px;
  width: 30px;
  height: 30px;
  border: 1px solid black;
  position: relative;
  text-align: center;
  line-height: 30px;
}

#queue div:nth-child(even) {
  background: lightgray;
}

#view-finder {
  border-bottom: 2px solid blue;
  border-top: 2px solid blue;
  
  height: 36px;
  width: 40px;
  position: absolute;
  top: 21px;
}

JavaScript

var container = Prime.Document.queryByID('container');
var queue = Prime.Document.queryByID('queue');
var viewFinder = Prime.Document.queryByID('view-finder');
var body = new Prime.Document.Element(document.body);
var thumbnails = [];

body.addEventListener('keydown', function(event) {

  if (event.keyCode === 37) {
    // left
    var margin = Prime.Utils.parseCSSMeasure(queue.getComputedStyle()['margin-left']);
    queue.setStyle('margin-left', (margin + width) + 'px');
  
  } else if (event.keyCode === 39) {
    // right
    var margin = Prime.Utils.parseCSSMeasure(queue.getComputedStyle()['margin-left']);
    queue.setStyle('margin-left', (margin - width) + 'px');
  }
}, this);

for (var i=0; i < 30; i++) {
  queue.appendHTML('<div>' + i + '</div>');
  thumbnails.push(queue.queryLast('div'));
}

var width = queue.queryFirst('div').getOuterWidth();
var marginLeft = (container.getWidth() / 2) - (viewFinder.getWidth() / 2);
// margin should be a multiple of the width
viewFinder.setStyle('margin-left', ((Math.floor(marginLeft / width) * width) - 5) + 'px');