},
- animateLinks: function () {
+ animateLinks: function (linksContainer, additionalDelay) {
+ var container = $(document);
+ if (linksContainer !== undefined) {
+ container = $(linksContainer);
+ }
+ if(additionalDelay===undefined){
+ additionalDelay=0;
+ }
+
var animateBookmarks = (this.fluidbook.datas.bookmarkBlinkOnPageChange == true);
var $this = this;
- var links = $(".link a.displayArea");
+ var links = $(container).find(".link a.displayArea");
$(links).each(function () {
var delay = $(this).data('blinkdelay');
$(e).removeClass('animating').css('opacity', 1)
}
});
- }, delay);
+ }, delay+additionalDelay);
});
// Calculate positions and scaling for all zoomLink blocks
// First, calculate stacked height of all zoomLink blocks
- var stackedHeight = gapsTotal + links.reduce(function(sum, zoomLink) {
- return sum + (zoomLink.data('height') * zoomLink.data('maxzoom'));
+ var stackedHeight = gapsTotal + links.reduce(function (sum, zoomLink) {
+ return sum + (zoomLink.data('height') * zoomLink.data('maxzoom'));
}, 0);
// Calculate side-by-side width of all zoomLink blocks
- var sideBySideWidth = gapsTotal + links.reduce(function(sum, zoomLink) {
- return sum + (zoomLink.data('width') * zoomLink.data('maxzoom'));
+ var sideBySideWidth = gapsTotal + links.reduce(function (sum, zoomLink) {
+ return sum + (zoomLink.data('width') * zoomLink.data('maxzoom'));
}, 0);
// Find widest element in collection
- var widestLink = links.reduce(function(maxWidth, zoomLink) {
- var width = (zoomLink.data('width') * zoomLink.data('maxzoom'));
- return (width > maxWidth) ? width : maxWidth;
+ var widestLink = links.reduce(function (maxWidth, zoomLink) {
+ var width = (zoomLink.data('width') * zoomLink.data('maxzoom'));
+ return (width > maxWidth) ? width : maxWidth;
}, 0);
// Find tallest element in collection
- var tallestLink = links.reduce(function(maxHeight, zoomLink) {
- var height = (zoomLink.data('height') * zoomLink.data('maxzoom'));
- return (height > maxHeight) ? height : maxHeight;
+ var tallestLink = links.reduce(function (maxHeight, zoomLink) {
+ var height = (zoomLink.data('height') * zoomLink.data('maxzoom'));
+ return (height > maxHeight) ? height : maxHeight;
}, 0);
// Compare scaling required for each layout of blocks
// Sort links so they are displayed in a natural order when zooming
// When stacked: highest link on page will come first
// When side-by-side: leftmost link on page will come first
- links.sort(function(a, b) {
+ links.sort(function (a, b) {
if (layout == 'stacked') {
- return a.data('y') - b.data('y'); // Lowest Y co-ordinates first
+ return a.data('y') - b.data('y'); // Lowest Y co-ordinates first
} else {
- return a.offset().left - b.offset().left; // Lowest X co-ordinates first
+ return a.offset().left - b.offset().left; // Lowest X co-ordinates first
}
});
- links.forEach(function(zoomLink, index) {
+ links.forEach(function (zoomLink, index) {
// console.log(index, 'Found link with ID: ' + zoomLink.attr('id'));
var zoomID = zoomLink.attr('id'),
$groupWrapper = $('#zoomPopupGroupWrapper');
// Add holder for each zoom zone
- $groupWrapper.append('<div class="zoomPopupWrapper" id="zoomPopup_'+ zoomID +'"><a href="#" class="zoomPopupClose">' + getSpriteIcon('interface-close') + '</a></div>');
+ $groupWrapper.append('<div class="zoomPopupWrapper" id="zoomPopup_' + zoomID + '"><a href="#" class="zoomPopupClose">' + getSpriteIcon('interface-close') + '</a></div>');
var z = $('#zoomPopup_' + zoomID),
box = zoomLink[0].getBoundingClientRect(), // Should return full values without rounding
// If this is the first / only block, use calculated groupY position
if (index == 0) {
- zoomY = groupY - parent.offset().top + zoomMargin;
+ zoomY = groupY - parent.offset().top + zoomMargin;
- // Otherwise, calculate Y position based on first element position
+ // Otherwise, calculate Y position based on first element position
} else {
- zoomY = Math.round(groupY + links[0].data('height') * links[0].data('maxzoom') * groupScale + zoomZonesGap + zoomMargin - parent.offset().top);
+ zoomY = Math.round(groupY + links[0].data('height') * links[0].data('maxzoom') * groupScale + zoomZonesGap + zoomMargin - parent.offset().top);
}
} else {
// Side-by-side layout
if (index == 0) {
zoomX = groupX - parent.offset().left + zoomMargin;
- // Otherwise, calculate X position based on first element position
+ // Otherwise, calculate X position based on first element position
} else {
zoomX = Math.round(groupX + (links[0].data('width') * links[0].data('maxzoom') * groupScale) + zoomZonesGap + zoomMargin - parent.offset().left);
}
// Trigger zoom up animation just after showing zoom element
setTimeout(function () {
- z.css({
- boxShadow: '0 0 100px rgba(0,0,0,0.3)',
- transform: 'translateX(' + zoomX + 'px) translateY(' + zoomY + 'px) scale(1)'
- });
+ z.css({
+ boxShadow: '0 0 100px rgba(0,0,0,0.3)',
+ transform: 'translateX(' + zoomX + 'px) translateY(' + zoomY + 'px) scale(1)'
+ });
}, 50);
// Hide close button initially so it only shows when zoom finishes.
// Display close button after zoom animation has finished
setTimeout(function () {
- $('.zoomPopupClose').css('opacity', 1);
+ $('.zoomPopupClose').css('opacity', 1);
}, 500);
});
var $wrapper = $('#zoomPopupGroupWrapper');
// Close each popup that is open
- $wrapper.find('.zoomPopupWrapper').each(function() {
- var z = $(this);
- z.find('.zoomPopupClose').css('opacity', '0');
+ $wrapper.find('.zoomPopupWrapper').each(function () {
+ var z = $(this);
+ z.find('.zoomPopupClose').css('opacity', '0');
- if (immediate) {
- $('.zoomPopupWrapper').hide();
- $this.hideOverlay(1);
- }
+ if (immediate) {
+ $('.zoomPopupWrapper').hide();
+ $this.hideOverlay(1);
+ }
- z.css({
- transform: 'translate(0,0) scale(' + z.data('starting-scale') + ')',
- boxShadow: '0 0 0 rgba(0,0,0,0.3)',
- });
+ z.css({
+ transform: 'translate(0,0) scale(' + z.data('starting-scale') + ')',
+ boxShadow: '0 0 0 rgba(0,0,0,0.3)',
+ });
});
// Hide popup after transition completes