/*
|
|
* Smoothproducts
|
|
* http://kthornbloom.com/smoothproducts.php
|
|
*
|
|
* Copyright 2013, Kevin Thornbloom
|
|
* Free to use and abuse under the MIT license.
|
|
* http://www.opensource.org/licenses/mit-license.php
|
|
*/
|
|
|
|
(function ($) {
|
|
$.fn.extend({
|
|
smoothproducts: function () {
|
|
|
|
|
|
var slideTiming = 300
|
|
|
|
// Add some markup & set some CSS
|
|
$('.sp-wrap').append('<div class="sp-large"></div><div class="sp-thumbs sp-tb-active"></div>');
|
|
$('.sp-wrap').each(function () {
|
|
$('a', this).appendTo($('.sp-thumbs', this));
|
|
$('.sp-thumbs a:first', this).addClass('sp-current').clone().removeClass('sp-current').appendTo($('.sp-large', this)).addClass('sp-current-big');
|
|
$('.sp-wrap').css({
|
|
display: 'inline-block'
|
|
});
|
|
});
|
|
|
|
// Prevent clicking while things are happening
|
|
$(document.body).on('click', '.sp-thumbs', function (event) {
|
|
event.preventDefault();
|
|
});
|
|
|
|
// Clicking a thumbnail
|
|
$(document.body).on('click', '.sp-tb-active a', function (event) {
|
|
$(this).parent().find('.sp-current').removeClass();
|
|
$(this).parent().parent().find('.sp-thumbs').removeClass('sp-tb-active');
|
|
$(this).parent().parent().find('.sp-zoom').remove();
|
|
$(this).parent().parent().find('.sp-full-screen').fadeOut(function () {
|
|
$(this).remove();
|
|
});
|
|
|
|
var currentHeight = $(this).parent().parent().find('.sp-large').height(),
|
|
currentWidth = $(this).parent().parent().find('.sp-large').width();
|
|
$(this).parent().parent().find('.sp-large').css({
|
|
overflow: 'hidden',
|
|
height: currentHeight + 'px',
|
|
width: currentWidth + 'px'
|
|
});
|
|
|
|
$(this).parent().parent().find('.sp-large a').remove();
|
|
$(this).addClass('sp-current').clone().hide().removeClass('sp-current').appendTo($(this).parent().parent().find('.sp-large')).addClass('sp-current-big').fadeIn(slideTiming, function () {
|
|
|
|
var autoHeight = $(this).parent().parent().find('.sp-large img').height();
|
|
|
|
$(this).parent().parent().find('.sp-large').animate({
|
|
height: autoHeight
|
|
}, 'fast', function () {
|
|
$('.sp-large').css({
|
|
height: 'auto',
|
|
width: 'auto',
|
|
|
|
});
|
|
});
|
|
|
|
$(this).parent().parent().find('.sp-thumbs').addClass('sp-tb-active');
|
|
});
|
|
event.preventDefault();
|
|
});
|
|
|
|
// Zoom In
|
|
$(document.body).on('mouseover', '.sp-large a', function (event) {
|
|
var largeUrl = $(this).attr('href');
|
|
$(this).parent().parent().find('.sp-large').append('<div class="sp-zoom"><img src="' + largeUrl + '"/></div>');
|
|
$(this).parent().parent().find('.sp-zoom').fadeIn();
|
|
$(this).parent().parent().find(".sp-zoom").draggable();
|
|
//$(this).parent().parent().prepend('<div class="sp-full-screen"><a href="#">↕</a></div>');
|
|
event.preventDefault();
|
|
});
|
|
|
|
|
|
// Click To Lightbox Popup Show
|
|
var lightBoxUrl = $('.sp-thumbs a:first').attr('href');
|
|
$('.sp-full-screen a').attr('href', lightBoxUrl)
|
|
$(".sp-thumbs a").click(function () {
|
|
var bg = $(this).attr('href');
|
|
$('.sp-full-screen a').attr('href', bg)
|
|
});
|
|
|
|
|
|
|
|
|
|
// Panning zoomed PC
|
|
|
|
$('.sp-large').mousemove(function (e) {
|
|
var viewWidth = $(this).width(),
|
|
viewHeight = $(this).height(),
|
|
largeWidth = $(this).find('.sp-zoom').width(),
|
|
largeHeight = $(this).find('.sp-zoom').height(),
|
|
parentOffset = $(this).parent().offset(),
|
|
relativeXPosition = (e.pageX - parentOffset.left),
|
|
relativeYPosition = (e.pageY - parentOffset.top),
|
|
moveX = Math.floor((relativeXPosition * (viewWidth - largeWidth) / viewWidth)),
|
|
moveY = Math.floor((relativeYPosition * (viewHeight - largeHeight) / viewHeight));
|
|
|
|
$(this).find('.sp-zoom').css({
|
|
left: moveX,
|
|
top: moveY
|
|
|
|
});
|
|
|
|
}).mouseout(function () {
|
|
// Pause Panning
|
|
});
|
|
|
|
// Panning zoomed Mobile - inspired by http://popdevelop.com/2010/08/touching-the-web/
|
|
|
|
$.fn.draggable = function () {
|
|
var offset = null;
|
|
var start = function (e) {
|
|
var orig = e.originalEvent;
|
|
var pos = $(this).position();
|
|
offset = {
|
|
x: orig.changedTouches[0].pageX - pos.left,
|
|
y: orig.changedTouches[0].pageY - pos.top
|
|
};
|
|
};
|
|
var moveMe = function (e) {
|
|
e.preventDefault();
|
|
var orig = e.originalEvent,
|
|
newY = orig.changedTouches[0].pageY - offset.y,
|
|
newX = orig.changedTouches[0].pageX - offset.x,
|
|
maxY = (($('.sp-zoom').height()) - ($('.sp-large').height())) * -1,
|
|
maxX = (($('.sp-zoom').width()) - ($('.sp-large').width())) * -1;
|
|
if (newY > maxY && 0 > newY) {
|
|
$(this).css({
|
|
top: newY
|
|
});
|
|
}
|
|
if (newX > maxX && 0 > newX) {
|
|
$(this).css({
|
|
left: newX
|
|
});
|
|
}
|
|
};
|
|
this.bind("touchstart", start);
|
|
this.bind("touchmove", moveMe);
|
|
};
|
|
|
|
// Zoom Out
|
|
$(document.body).on('mouseleave', '.sp-zoom', function (event) {
|
|
$(this).fadeOut(function () {
|
|
$(this).remove();
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
});
|
|
})(jQuery);
|