97 lines
2.2 KiB
JavaScript
97 lines
2.2 KiB
JavaScript
var $j = jQuery.noConflict();
|
|
|
|
$j( document ).ready( function() {
|
|
"use strict";
|
|
// Woo image zoom
|
|
oceanwpWooImageZoom();
|
|
} );
|
|
|
|
/* ==============================================
|
|
WOOCOMMERCE IMAGE ZOOM
|
|
============================================== */
|
|
function oceanwpWooImageZoom() {
|
|
"use strict"
|
|
|
|
// wc_single_product_params is required to continue.
|
|
if ( typeof wc_single_product_params === 'undefined' ) {
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Product gallery class.
|
|
*/
|
|
var ProductGallery = function( $target, args ) {
|
|
this.$target = $target;
|
|
this.$images = $j( '.woocommerce-product-gallery__image', $target );
|
|
|
|
// No images? Abort.
|
|
if ( 0 === this.$images.length ) {
|
|
this.$target.css( 'opacity', 1 );
|
|
return;
|
|
}
|
|
|
|
// Make this object available.
|
|
$target.data( 'product_gallery', this );
|
|
|
|
// Pick functionality to initialize...
|
|
this.zoom_enabled = $j.isFunction( $j.fn.zoom ) && wc_single_product_params.zoom_enabled;
|
|
|
|
// ...also taking args into account.
|
|
if ( args ) {
|
|
this.zoom_enabled = false === args.zoom_enabled ? false : this.zoom_enabled;
|
|
}
|
|
|
|
// Bind functions to this.
|
|
this.initZoom = this.initZoom.bind( this );
|
|
|
|
if ( this.zoom_enabled ) {
|
|
this.initZoom();
|
|
$target.on( 'woocommerce_gallery_init_zoom', this.initZoom );
|
|
}
|
|
};
|
|
|
|
ProductGallery.prototype.initZoom = function() {
|
|
var zoomTarget = this.$images,
|
|
galleryWidth = this.$target.width(),
|
|
zoomEnabled = false;
|
|
|
|
$j( zoomTarget ).each( function( index, target ) {
|
|
var image = $j( target ).find( 'img' );
|
|
|
|
if ( image.data( 'large_image_width' ) > galleryWidth ) {
|
|
zoomEnabled = true;
|
|
return false;
|
|
}
|
|
} );
|
|
|
|
// But only zoom if the img is larger than its container.
|
|
if ( zoomEnabled ) {
|
|
var zoom_options = {
|
|
touch: false
|
|
};
|
|
|
|
if ( 'ontouchstart' in window ) {
|
|
zoom_options.on = 'click';
|
|
}
|
|
|
|
zoomTarget.trigger( 'zoom.destroy' );
|
|
zoomTarget.zoom( zoom_options );
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Function to call wc_product_gallery on jquery selector.
|
|
*/
|
|
$j.fn.wc_product_gallery = function( args ) {
|
|
new ProductGallery( this, args );
|
|
return this;
|
|
};
|
|
|
|
/*
|
|
* Initialize all galleries on page.
|
|
*/
|
|
$j( '.woocommerce-product-gallery' ).each( function() {
|
|
$j( this ).wc_product_gallery();
|
|
} );
|
|
|
|
} |