*/
var FilmSlider;
+var s;
(function(){
FilmSlider = function(filmBar, slider, ctxInfos, image, toolbar, breadcrumbs) {
var thisSlider = this;
+ s = this;
this.filmBar = filmBar;
this.filmBarWidth = getObjectWidth(this.filmBar);
var film = filmBar.firstChild;
else {
// pas de barre de scroll horizontal pour les tablettes
- FilmSlider.prototype.resizeSlider = function(evt) {};
+ FilmSlider.prototype.resizeSlider = function(evt) {
+ this.filmMaxX = - (getObjectWidth(this.film) - this.filmBarWidth);
+ if (!this.initialized) {
+ this.centerSlide(this.center);
+ this.selectedSlide = this.filmBar.getElementsByTagName('img')[this.center].parentNode;
+ this.initialized = true;
+ }
+ };
}
FilmSlider.prototype._checkSizeAfterLoad = function(evt) {
return DEFAULT_IMAGE_SIZES[i];
};
-FilmSlider.prototype.centerSlide = function(slideIndex) {
- if (this.sliderRatio > 1) { return; }
- var filmBarWidth = getObjectWidth(this.filmBar);
- var x = slideIndex * this.slideSize;
- x = x - (filmBarWidth - this.slideSize) / 2.0;
- x = x * this.sliderSpeedRatio;
- var p = new Point( -x, 0 );
- this.setSliderPosition(p);
-};
+if (!browser.isMobile) {
+ FilmSlider.prototype.centerSlide = function(slideIndex) {
+ if (this.sliderRatio > 1) { return; }
+ var filmBarWidth = getObjectWidth(this.filmBar);
+ var x = slideIndex * this.slideSize;
+ x = x - (filmBarWidth - this.slideSize) / 2.0;
+ x = x * this.sliderSpeedRatio;
+ var p = new Point( -x, 0 );
+ this.setSliderPosition(p);
+ };
+}
+else {
+ FilmSlider.prototype.centerSlide = function(slideIndex) {
+ var filmBarWidth = getObjectWidth(this.filmBar);
+ var x = slideIndex * this.slideSize;
+ x = x - (filmBarWidth - this.slideSize) / 2.0;
+ this.setFilmPosition(-x);
+ };
+}
FilmSlider.prototype.setSliderPosition = function(point) {
if(point.x < 0) { point.x = 0; }
this.setFilmPosition(point);
};
-FilmSlider.prototype.setFilmPosition = function(point) {
- this.film.style.left = point.x / this.sliderSpeedRatio + 'px';
-};
+if (!browser.isMobile) {
+ FilmSlider.prototype.setFilmPosition = function(point) {
+ this.film.style.left = point.x / this.sliderSpeedRatio + 'px';
+ };
+}
+else {
+ FilmSlider.prototype.setFilmPosition = function(x) {
+ x = Math.min(0, x);
+ x = Math.max(this.filmMaxX, x);
+ this.film.style.left = String(x) + 'px';
+ };
+}
FilmSlider.prototype.getSliderPosition = function() {
var x = parseInt(this.slider.style.left, 10);
addListener(this.toolbar, 'click', function(evt){thisSlider.toolbarClickHandler(evt);});
addListener(window, 'load', function(evt){thisSlider.fitToScreen(evt);});
addListener(window, 'load', function(evt){thisSlider._checkSizeAfterLoad(evt);});
+ addListener(window, 'load', function(evt){thisSlider.startThumbnailsLoadQueue(evt);});
// dd listeners
addListener(this.slider, 'mousedown', this.ddHandlers.down);
FilmSlider.prototype.touchStartHandler = function(evt) {
this.filmStartX = parseInt(this.film.style.left, 10);
- this.touchStartX = evt.pageX;
+ this.touchStartX = evt.changedTouches[0].screenX;
+ this.touchStartTime = (new Date()).getTime();
};
FilmSlider.prototype.touchMoveHandler = function(evt) {
- var delta = this.touchStartX - evt.pageX;
- var posX = Math.min(0, this.filmStartX - delta);
- this.film.style.left = String(posX) + 'px';
+ disableDefault(evt);
+ var delta = this.touchStartX - evt.changedTouches[0].screenX;
+ var posX = this.filmStartX - delta;
+ this.setFilmPosition(posX);
+ this.lastMoveTime = (new Date()).getTime();
};
FilmSlider.prototype.touchEndHandler = function(evt) {
+ var x = evt.changedTouches[0].screenX;
+ var delta = x - this.touchStartX;
+ if (delta) {
+ disableDefault(evt);
+ var now = (new Date()).getTime();
+ if (now - this.lastMoveTime < 100) {
+ // au delà de 100 ms de maintient, on annule l'inertie
+ var speed = delta / (now - this.touchStartTime)
+ var x0 = parseInt(this.film.style.left, 10);
+ var t0 = (new Date()).getTime();
+ var d = 500; // milisecondes
+ var delta = 0;
+ var dt = 25
+ var self = this;
+
+ function animate() {
+ // inertie
+ var t = (new Date()).getTime() - t0;
+ if (t < d) {
+ setTimeout(animate, dt);
+ delta = delta + (1-t/d) * speed * dt; // décelleration linéaire
+ self.setFilmPosition(x0 + delta);
+ }
+ }
+ animate();
+ }
+ }
this.touchStartX = undefined;
};
FilmSlider.prototype.updateBreadcrumbs = function(url, title) {
if (this.hasBreadcrumbs) {
- this.lastBCElement.href = element.getAttribute('lastBcUrl');
- this.lastBCElement.innerHTML = element.getAttribute('img_id');
+ this.lastBCElement.href = url;
+ this.lastBCElement.innerHTML = title;
+ }
+};
+
+FilmSlider.prototype.startThumbnailsLoadQueue = function(evt) {
+ var thumbnails = this.film.getElementsByTagName('img');
+ this.thumbnailsLoadingOrder = [];
+ var leftSize = this.center;
+ var rightSize = thumbnails.length - this.center - 1;
+ var i;
+ for (i=1 ; i<=Math.min(leftSize, rightSize) ; i++) {
+ this.thumbnailsLoadingOrder.push(thumbnails[this.center + i]);
+ this.thumbnailsLoadingOrder.push(thumbnails[this.center - i]);
}
+ if (leftSize > rightSize) {
+ for (i = this.center - rightSize - 1 ; i >= 0 ; i--) {
+ console.log(i);
+ this.thumbnailsLoadingOrder.push(thumbnails[i]);
+ }
+ }
+ else if (leftSize < rightSize) {
+ for (i = this.center + leftSize ; i < thumbnails.length ; i++) {
+ this.thumbnailsLoadingOrder.push(thumbnails[i]);
+ }
+ }
+ var next = this.thumbnailsLoadingOrder.shift();
+ var self = this;
+ addListener(next, 'load', function(evt){self._loadNextThumb(evt);});
+ next.src = next.parentNode.href + '/getThumbnail';
};
+FilmSlider.prototype._loadNextThumb = function(evt) {
+ var next = this.thumbnailsLoadingOrder.shift();
+ if (!next) {return;}
+ var self = this;
+ addListener(next, 'load', function(evt){self._loadNextThumb(evt);});
+ next.src = next.parentNode.href + '/getThumbnail';
+};
+
+
FilmSlider.prototype.startSlideShow = function() {
this.slideShowSlide = this.pendingSlideShowSlide = this.selectedSlide;
return this.slideShowSlide.href;