164 lines
5.9 KiB
JavaScript
164 lines
5.9 KiB
JavaScript
/**
|
|
* 2017-2019 Zemez
|
|
*
|
|
* JX Product Zoomer
|
|
*
|
|
* NOTICE OF LICENSE
|
|
*
|
|
* This source file is subject to the General Public License (GPL 2.0)
|
|
* that is bundled with this package in the file LICENSE.txt.
|
|
* It is also available through the world-wide-web at this URL:
|
|
* http://opensource.org/licenses/GPL-2.0
|
|
*
|
|
* DISCLAIMER
|
|
*
|
|
* Do not edit or add to this file if you wish to upgrade the module to newer
|
|
* versions in the future.
|
|
*
|
|
* @author Zemez
|
|
* @copyright 2017-2019 Zemez
|
|
* @license http://opensource.org/licenses/GPL-2.0 General Public License (GPL 2.0)
|
|
*/
|
|
|
|
$(document).ready(function() {
|
|
if (typeof(JXPRODUCTZOOMER_LIVE_MODE) == 'undefined' || !JXPRODUCTZOOMER_LIVE_MODE) {
|
|
return false;
|
|
}
|
|
|
|
var $d = $(this);
|
|
|
|
// update zoomed image when page is loaded
|
|
applyProductElevateZoom('body', $('.product-images li img.selected:visible').attr('data-image-large-src'));
|
|
|
|
// do if image changing is on hover
|
|
if (JXPRODUCTZOOMER_IMAGE_CHANGE_EVENT && !JXPRODUCTZOOMER_IS_MOBILE) {;
|
|
$d.on('mouseenter', '.product-images li img', function() {
|
|
if (!$(this).hasClass('selected')) {
|
|
$(this).closest('.product-images').find('img').removeClass('selected');
|
|
$(this).trigger('click').addClass('selected');
|
|
}
|
|
if (!$('.modal:visible').length) {
|
|
applyProductElevateZoom('#content', $(this).attr('data-image-large-src'));
|
|
} else if ($('.modal.quickview').length) {
|
|
applyProductElevateZoom('.quickview', $(this).attr('data-image-large-src'));
|
|
}
|
|
});
|
|
} else {
|
|
// refresh zoomed image on item click
|
|
$d.on('click', '.product-images li img', function() {
|
|
if (!$('.modal:visible').length) {
|
|
applyProductElevateZoom('#content', $(this).attr('data-image-large-src'));
|
|
} else if ($('.modal.quickview').length) {
|
|
applyProductElevateZoom('.quickview', $(this).attr('data-image-large-src'));
|
|
}
|
|
});
|
|
}
|
|
|
|
if (!JXPRODUCTZOOMER_FANCY_BOX) {
|
|
$('.layer').hide();
|
|
}
|
|
|
|
// refresh zoomed image on color change
|
|
prestashop.on('updatedProduct', function (e) {
|
|
if (!$('.quickview').length) {
|
|
applyProductElevateZoom('#content', $('.product-images li img.selected:visible').attr('data-image-large-src'));
|
|
} else {
|
|
applyProductElevateZoom('.quickview', $('.product-images li img.selected:visible').attr('data-image-large-src'));
|
|
}
|
|
});
|
|
|
|
// refresh zoomed image in quickview modal
|
|
prestashop.on('clickQuickView', function (e) {
|
|
setTimeout(function() {
|
|
applyProductElevateZoom('.quickview', $('.product-images li img.selected:visible').attr('data-image-large-src'));
|
|
}, 1000);
|
|
});
|
|
});
|
|
|
|
$(window).on('resize', function() {
|
|
$('.zoomContainer').remove();
|
|
if (!$('.quickview').length) {
|
|
applyProductElevateZoom('#content', $('.product-images li img.selected:visible').attr('data-image-large-src'));
|
|
} else {
|
|
applyProductElevateZoom('.quickview', $('.product-images li img.selected:visible').attr('data-image-large-src'));
|
|
}
|
|
});
|
|
|
|
// reload the image zoomer when event happened
|
|
function applyProductElevateZoom(container, image) {
|
|
var bigimage = image;
|
|
|
|
if (JXPRODUCTZOOMER_IS_MOBILE || (typeof(contentOnly) != 'undefined') && contentOnly) {
|
|
JXPRODUCTZOOMER_ZOOM_TYPE = 'lens';
|
|
JXPRODUCTZOOMER_ZOOM_SHOW_LENS = true;
|
|
}
|
|
|
|
if (JXPRODUCTZOOMER_ZOOM_TYPE == 'inner') {
|
|
JXPRODUCTZOOMER_ZOOM_SCROLL = false;
|
|
JXPRODUCTZOOMER_ZOOM_LEVEL = 1;
|
|
}
|
|
|
|
if (JXPRODUCTZOOMER_ZOOM_TYPE == 'lens') {
|
|
JXPRODUCTZOOMER_ZOOM_BORDER_SIZE = JXPRODUCTZOOMER_ZOOM_LENS_BORDER_SIZE;
|
|
JXPRODUCTZOOMER_ZOOM_BORDER_COLOR = JXPRODUCTZOOMER_ZOOM_LENS_BORDER_COLOR;
|
|
}
|
|
|
|
$(container).find('.product-cover img').ezPlus({
|
|
attrBigImageSrc: bigimage,
|
|
zoomType: JXPRODUCTZOOMER_ZOOM_TYPE,
|
|
zoomContainerAppendTo: $(container).find('.product-cover'), //zoom container parent selector
|
|
responsive: JXPRODUCTZOOMER_ZOOM_RESPONSIVE,
|
|
cursor: JXPRODUCTZOOMER_ZOOM_CURSOR,
|
|
easing: JXPRODUCTZOOMER_ZOOM_EASING,
|
|
easingAmount: JXPRODUCTZOOMER_ZOOM_EASING_AMOUNT,
|
|
scrollZoom: JXPRODUCTZOOMER_ZOOM_SCROLL,
|
|
zoomLevel: JXPRODUCTZOOMER_ZOOM_LEVEL,
|
|
minZoomLevel: JXPRODUCTZOOMER_ZOOM_MIN_LEVEL,
|
|
maxZoomLevel: JXPRODUCTZOOMER_ZOOM_MAX_LEVEL,
|
|
scrollZoomIncrement: JXPRODUCTZOOMER_ZOOM_SCROLL_INCREMENT,
|
|
touchEnabled: false,
|
|
zIndex: 5,
|
|
// window settings
|
|
zoomWindowFadeIn: JXPRODUCTZOOMER_ZOOM_WINDOW_FADE_IN,
|
|
zoomWindowFadeOut: JXPRODUCTZOOMER_ZOOM_WINDOW_FADE_OUT,
|
|
zoomWindowWidth: JXPRODUCTZOOMER_ZOOM_WINDOW_WIDTH,
|
|
zoomWindowHeight: JXPRODUCTZOOMER_ZOOM_WINDOW_HEIGHT,
|
|
zoomWindowOffsetX: JXPRODUCTZOOMER_ZOOM_WINDOW_OFFSET_X,
|
|
zoomWindowOffsetY: JXPRODUCTZOOMER_ZOOM_WINDOW_OFFSET_Y,
|
|
zoomWindowPosition: JXPRODUCTZOOMER_ZOOM_WINDOW_POSITION,
|
|
zoomWindowBgColour: JXPRODUCTZOOMER_ZOOM_WINDOW_BG_COLOUR,
|
|
borderSize: JXPRODUCTZOOMER_ZOOM_BORDER_SIZE,
|
|
borderColour: JXPRODUCTZOOMER_ZOOM_BORDER_COLOR,
|
|
// end window settings
|
|
// lens setings
|
|
showLens: JXPRODUCTZOOMER_ZOOM_SHOW_LENS,
|
|
lensSize: JXPRODUCTZOOMER_ZOOM_LENS_SIZE,
|
|
lensFadeIn: JXPRODUCTZOOMER_ZOOM_FADE_IN,
|
|
lensFadeOut: JXPRODUCTZOOMER_ZOOM_FADE_OUT,
|
|
lensOpacity: JXPRODUCTZOOMER_ZOOM_LENS_OPACITY,
|
|
lensShape: JXPRODUCTZOOMER_ZOOM_LENS_SHAPE,
|
|
lensColour: JXPRODUCTZOOMER_ZOOM_LENS_COLOUR,
|
|
lensBorderSize: JXPRODUCTZOOMER_ZOOM_LENS_BORDER_SIZE,
|
|
lensBorderColour: JXPRODUCTZOOMER_ZOOM_LENS_BORDER_COLOR,
|
|
containLensZoom: JXPRODUCTZOOMER_ZOOM_CONTAIN_LENS_ZOOM,
|
|
//end lens settings
|
|
// tint settins
|
|
tint: JXPRODUCTZOOMER_ZOOM_TINT,
|
|
tintColour: JXPRODUCTZOOMER_ZOOM_TINT_COLOUR,
|
|
tintOpacity: JXPRODUCTZOOMER_ZOOM_TINT_OPACITY,
|
|
zoomTintFadeIn: JXPRODUCTZOOMER_ZOOM_WINDOW_TINT_FADE_IN,
|
|
zoomTintFadeOut: JXPRODUCTZOOMER_ZOOM_WINDOW_TINT_FADE_OUT,
|
|
// callBacks
|
|
onZoomedImageLoaded: function() {
|
|
if (!JXPRODUCTZOOMER_FANCY_BOX) {
|
|
$('.layer').hide();
|
|
}
|
|
},
|
|
// responsive
|
|
respond: [
|
|
{
|
|
range: '1-767',
|
|
zoomType: 'lens'
|
|
}]
|
|
});
|
|
} |