From: Benoît Pin Date: Sat, 2 Aug 2014 08:36:28 +0000 (+0200) Subject: Optimisation du chargement des vignettes juxtaposées à celle affichée. X-Git-Url: https://scm.cri.ensmp.fr/git/Portfolio.git/commitdiff_plain/cd282ee58b2893790d06ce40a8b02c65481abbeb?ds=sidebyside Optimisation du chargement des vignettes juxtaposées à celle affichée. --- diff --git a/skins/getPhotoContextInfos.py b/skins/getPhotoContextInfos.py index 71b4aea..b070a83 100755 --- a/skins/getPhotoContextInfos.py +++ b/skins/getPhotoContextInfos.py @@ -37,6 +37,7 @@ for i, p in enumerate(portfolio.listNearestFolderContents(contentFilter={'portal ,'href': purl ,'thumbSize':size ,'title' : p.Title() + ,'displayed' : p == context ,'className': (selected and 'selected' or '') + ((p == context) and ' displayed' or '') , 'index': i } diff --git a/skins/photo_film_viewer.js b/skins/photo_film_viewer.js index 0a1cab9..3140763 100644 --- a/skins/photo_film_viewer.js +++ b/skins/photo_film_viewer.js @@ -5,6 +5,7 @@ Licence Creative Commons http://creativecommons.org/licenses/by-nc/2.0/ */ var FilmSlider; +var s; (function(){ @@ -16,6 +17,7 @@ var DEFAULT_IMAGE_SIZES = [500, 600, 800]; 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; @@ -289,6 +291,7 @@ FilmSlider.prototype.addEventListeners = function() { 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); @@ -727,6 +730,42 @@ FilmSlider.prototype.updateBreadcrumbs = function(url, 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; diff --git a/skins/photo_layout_macros.pt b/skins/photo_layout_macros.pt index 0dccaa0..21616da 100644 --- a/skins/photo_layout_macros.pt +++ b/skins/photo_layout_macros.pt @@ -133,14 +133,15 @@
- +