Use static hourglass image instead of an animages GIF during image loading, remove usage of scrollstop, start generating previews much sooner (threshold of 400 pixels), remove fallback code when javascript is disabled, show pages previews as a vertical scroller seems to reduce lag and browser memory consumption.

This commit is contained in:
Roberto Rosario
2014-11-17 16:56:28 -04:00
parent eff81cf8af
commit d751425d7f
6 changed files with 6 additions and 80 deletions

View File

@@ -36,7 +36,7 @@ class DocumentPagesCarouselWidget(forms.widgets.Widget):
""" """
def render(self, name, value, attrs=None): def render(self, name, value, attrs=None):
output = [] output = []
output.append(u'<div class="carousel-container" style="white-space:nowrap; overflow: auto;">') output.append(u'<div id="carousel-container" style="overflow-x: scroll; height: 500px;">')
try: try:
document_pages = value.pages.all() document_pages = value.pages.all()
@@ -48,7 +48,7 @@ class DocumentPagesCarouselWidget(forms.widgets.Widget):
page_count = value.page_count page_count = value.page_count
for page in document_pages: for page in document_pages:
output.append(u'<div style="display: inline-block; margin: 5px 10px 10px 10px;">') output.append(u'<div style="margin: 5px 10px 10px 10px;">')
output.append(u'<div class="tc">%(page_string)s %(page)s</div>' % {'page_string': ugettext(u'Page'), 'page': page.page_number}) output.append(u'<div class="tc">%(page_string)s %(page)s</div>' % {'page_string': ugettext(u'Page'), 'page': page.page_number})
output.append( output.append(
document_html_widget( document_html_widget(
@@ -124,8 +124,7 @@ def document_html_widget(document, click_view=None, page=DEFAULT_PAGE_NUMBER, zo
if nolazyload: if nolazyload:
result.append(u'<img style="border: 1px solid black;" src="%s" alt="%s" />' % (preview_view, alt_text)) result.append(u'<img style="border: 1px solid black;" src="%s" alt="%s" />' % (preview_view, alt_text))
else: else:
result.append(u'<img class="thin_border %s" data-src="%s" src="%simages/ajax-loader.gif" alt="%s" />' % (image_class, preview_view, settings.STATIC_URL, alt_text)) result.append(u'<img class="thin_border %s" data-src="%s" src="%smain/icons/hourglass.png" alt="%s" />' % (image_class, preview_view, settings.STATIC_URL, alt_text))
result.append(u'<noscript><img style="border: 1px solid black;" src="%s" alt="%s" /></noscript>' % (preview_view, alt_text))
if click_view: if click_view:
result.append(u'</a>') result.append(u'</a>')

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -1,72 +0,0 @@
/* http://james.padolsey.com/javascript/special-scroll-events-for-jquery/ */
(function(){
var special = jQuery.event.special,
uid1 = "D" + (+new Date()),
uid2 = "D" + (+new Date() + 1);
special.scrollstart = {
setup: function() {
var timer,
handler = function(evt) {
var _self = this,
_args = arguments;
if (timer) {
clearTimeout(timer);
} else {
evt.type = "scrollstart";
jQuery.event.dispatch.apply(_self, _args);
}
timer = setTimeout( function(){
timer = null;
}, special.scrollstop.latency);
};
jQuery(this).bind("scroll", handler).data(uid1, handler);
},
teardown: function(){
jQuery(this).unbind( "scroll", jQuery(this).data(uid1) );
}
};
special.scrollstop = {
latency: 300,
setup: function() {
var timer,
handler = function(evt) {
var _self = this,
_args = arguments;
if (timer) {
clearTimeout(timer);
}
timer = setTimeout( function(){
timer = null;
evt.type = "scrollstop";
jQuery.event.dispatch.apply(_self, _args);
}, special.scrollstop.latency);
};
jQuery(this).bind("scroll", handler).data(uid2, handler);
},
teardown: function() {
jQuery(this).unbind( "scroll", jQuery(this).data(uid2) );
}
};
})();

View File

@@ -364,7 +364,6 @@
<script type="text/javascript" charset="utf-8" src="{% static 'packages/jquery-2.1.1.min.js' %}"></script> <script type="text/javascript" charset="utf-8" src="{% static 'packages/jquery-2.1.1.min.js' %}"></script>
<script type="text/javascript" src="{% static 'packages/jquery.scrollview.js' %}"></script> <script type="text/javascript" src="{% static 'packages/jquery.scrollview.js' %}"></script>
<script type="text/javascript" src="{% static 'packages/jquery_lazyload-master/jquery.lazyload.min.js' %}"></script> <script type="text/javascript" src="{% static 'packages/jquery_lazyload-master/jquery.lazyload.min.js' %}"></script>
<script type="text/javascript" src="{% static 'packages/jquery.scrollstop.js' %}"></script>
<script type="text/javascript" src="{% static 'packages/fancyapps-fancyBox-18d1712/source/jquery.fancybox.pack.js' %}"></script> <script type="text/javascript" src="{% static 'packages/fancyapps-fancyBox-18d1712/source/jquery.fancybox.pack.js' %}"></script>
<script type="text/javascript" src="{% static 'packages/fancyapps-fancyBox-18d1712/lib/jquery.mousewheel-3.0.6.pack.js' %}"></script> <script type="text/javascript" src="{% static 'packages/fancyapps-fancyBox-18d1712/lib/jquery.mousewheel-3.0.6.pack.js' %}"></script>
@@ -485,13 +484,13 @@
}); });
$('img.lazy-load-carousel').lazyload({ $('img.lazy-load-carousel').lazyload({
container: $(".carousel-container"), threshold : 400,
container: $("#carousel-container"),
appear: function(elements_left, settings) { appear: function(elements_left, settings) {
var $this = $(this); var $this = $(this);
$this.removeClass('lazy-load-carousel'); $this.removeClass('lazy-load-carousel');
load_document_image($this); load_document_image($this);
}, },
event: 'scrollstop'
}); });
$('img.lazy-load-interactive').lazyload({ $('img.lazy-load-interactive').lazyload({

View File

@@ -54,7 +54,7 @@ def staging_file_html_widget(staging_file, click_view=None, page=DEFAULT_PAGE_NU
if nolazyload: if nolazyload:
result.append(u'<img style="border: 1px solid black;" src="%s" alt="%s" />' % (preview_view, alt_text)) result.append(u'<img style="border: 1px solid black;" src="%s" alt="%s" />' % (preview_view, alt_text))
else: else:
result.append(u'<img class="thin_border %s" data-src="%s" src="%simages/ajax-loader.gif" alt="%s" />' % (image_class, preview_view, settings.STATIC_URL, alt_text)) result.append(u'<img class="thin_border %s" data-src="%s" src="%smain/icons/hourglass.png" alt="%s" />' % (image_class, preview_view, settings.STATIC_URL, alt_text))
result.append(u'<noscript><img style="border: 1px solid black;" src="%s" alt="%s" /></noscript>' % (preview_view, alt_text)) result.append(u'<noscript><img style="border: 1px solid black;" src="%s" alt="%s" /></noscript>' % (preview_view, alt_text))
if click_view: if click_view: