/*!
* Cndk.BeforeAfter.js v 0.0.2 (https://github.com/ilkerccom/cndkbeforeafter)
* Ilker Cindik
* Licensed under the MIT license
*/
jQuery.fn.cndkbeforeafter = function(options) {
// Default settings
var settings = jQuery.extend({
mode: "hover", /* hover,drag */
showText: true,
beforeText: "Before",
beforeTextPosition: "top-left", /* top-left, top-right, bottom-left, bottom-right */
afterText: "After",
afterTextPosition: "top-right", /* top-left, top-right, bottom-left, bottom-right */
seperatorWidth: "4px",
seperatorOpacity: "0.8",
theme: "light", /* light,dark */
autoSliding: false,
autoSlidingStopOnHover: true,
hoverEffect: true,
enterAnimation: false
}, options);
// This
var element = this;
if( element.length === 0 ) return;
// Wait for image(s) loading
var img = new Image();
jQuery(img).on('load', function() {
runCndkBeforeAfter(element);
});
img.src = jQuery(this).find(">div").eq(0).find('div[data-type="before"] img').attr("src");
// Run Plugin
function runCndkBeforeAfter(element)
{
element.each(function() {
// Get contents
var count = jQuery(this).find(">div>div").length;
if(count <= 1)
{
// No images
console.log("(cndk.beforeafter.js) Error -> No before-after images found.");
}
// Add theme class
element.addClass("cndkbeforeafter-theme-"+settings.theme);
// Continue
var root = jQuery(this);
root.addClass("cndkbeforeafter cndkbeforeafter-root");
root.append("
");
// Container
root.append("");
// Hover Effect
if(settings.hoverEffect == true)
{
root.addClass("cndkbeforeafter-hover");
}
// Before-After text
if(settings.showText == true)
{
var dataBeforeTitle = jQuery(this).find(">div").eq(0).find('div[data-type="before"]').attr("data-title") == undefined ? settings.beforeText : jQuery(this).find(">div").eq(0).find('div[data-type="before"]').attr("data-title");
var dataAfterTitle = jQuery(this).find(">div").eq(0).find('div[data-type="after"]').attr("data-title") == undefined ? settings.afterText : jQuery(this).find(">div").eq(0).find('div[data-type="after"]').attr("data-title");
root.append(""+dataBeforeTitle+"
");
root.append(""+dataAfterTitle+"
");
}
for(var i=0; idiv").eq(i).find('div[data-type="before"]');
var img1 = jQuery(this).find(">div").eq(i).find('div[data-type="before"] img');
img1.addClass("cndkbeforeafter-item-before");
div1.addClass("cndkbeforeafter-item-before-c");
div1.css("overflow","hidden");
div1.css("z-index","2");
// After
var div2 = jQuery(this).find(">div").eq(i).find('div[data-type="after"]');
var img2 = jQuery(this).find(">div").eq(i).find('div[data-type="after"] img');
img2.addClass("cndkbeforeafter-item-after");
div2.addClass("cndkbeforeafter-item-after-c");
div2.css("z-index","1");
// Image-Item width/height
var itemwidth = img1.width();
var itemheight = img1.height();
// Screen width
var screenWidth = jQuery(this).parent().width();
if(screenWidth < itemwidth)
{
itemheight = itemheight/(itemwidth/screenWidth);
itemwidth = screenWidth;
img1.css("width", itemwidth + "px");
img2.css("width", itemwidth + "px");
}
// Item
jQuery(this).find(">div").eq(0).addClass("cndkbeforeafter-item");
jQuery(this).find(">div").eq(0).css("height",itemheight + "px");
// Small Before-After text
if(itemwidth < 200)
{
jQuery(this).find(".cndkbeforeafter-item-after-text").addClass("cndkbeforeafter-extra-small-text cndkbeforeafter-extra-small-text-after");
jQuery(this).find(".cndkbeforeafter-item-before-text").addClass("cndkbeforeafter-extra-small-text cndkbeforeafter-extra-small-text-before");
}
// Start position
div1.css("width","50%");
div2.css("width","50%");
jQuery(".cndkbeforeafter-seperator").css("left","50%");
// Root inline
root.css("width",itemwidth + "px");
root.css("height",itemheight + "px");
}
// Modes
if(settings.mode == "hover")
{
// Hover mode
jQuery(root).find(".cndkbeforeafter-seperator, .cndkbeforeafter-item > div").addClass("cndkbeforeafter-hover-transition");
jQuery(root).mousemove(function(e){
var parentOffset = jQuery(this).offset();
var mouseX = parseInt((e.pageX - parentOffset.left));
var mousePercent = (mouseX*100)/parseInt(root.width());
jQuery(this).find(".cndkbeforeafter-item-before-c").css("width",mousePercent+"%");
jQuery(this).find(".cndkbeforeafter-item-after-c").css("width",(100-mousePercent)+"%");
jQuery(this).find(".cndkbeforeafter-seperator").css("left",mousePercent+"%");
}).mouseleave(function(){
jQuery(this).find(".cndkbeforeafter-item-after-c").css("width","50%");
jQuery(this).find(".cndkbeforeafter-item-before-c").css("width","50%");
jQuery(this).find(".cndkbeforeafter-seperator").css("left","50%");
});
}
else if(settings.mode == "drag")
{
// Drag mode
jQuery(root).find(".cndkbeforeafter-seperator, .cndkbeforeafter-item > div").addClass("cndkbeforeafter-drag-transition");
jQuery(root).click(function(e){
var parentOffset = jQuery(this).offset();
var mouseX = parseInt((e.pageX - parentOffset.left));
var mousePercent = (mouseX*100)/parseInt(root.width());
jQuery(this).find(".cndkbeforeafter-item-before-c").css("width",mousePercent+"%");
jQuery(this).find(".cndkbeforeafter-item-after-c").css("width",(100-mousePercent)+"%");
jQuery(this).find(".cndkbeforeafter-seperator").css("left",mousePercent+"%");
});
// Draggable seperator
var isSliding = false;
var currentElement = (root);
currentElement.find(".cndkbeforeafter-seperator").on("mousedown",function(e){
isSliding = true;
currentElement.find(".cndkbeforeafter-seperator, .cndkbeforeafter-item > div").removeClass("cndkbeforeafter-drag-transition");
currentElement.mousemove(function(e){
if(isSliding) {
var parentOffset = currentElement.offset();
var mouseX = parseInt((e.pageX - parentOffset.left));
var mousePercent = (mouseX*100)/parseInt(root.width());
currentElement.find(".cndkbeforeafter-item-before-c").css("width",mousePercent+"%");
currentElement.find(".cndkbeforeafter-item-after-c").css("width",(100-mousePercent)+"%");
currentElement.find(".cndkbeforeafter-seperator").css("left",mousePercent+"%");
}
});
});
// Release
currentElement.find(".cndkbeforeafter-seperator").on("mouseup",function(e){
isSliding = false;
currentElement.find(".cndkbeforeafter-seperator, .cndkbeforeafter-item > div").addClass("cndkbeforeafter-drag-transition");
});
// Mobile touch-support
currentElement.find(".cndkbeforeafter-seperator").on("touchstart",function(e){
isSliding = true;
currentElement.find(".cndkbeforeafter-seperator, .cndkbeforeafter-item > div").removeClass("cndkbeforeafter-drag-transition");
currentElement.on("touchmove",function(e){
var parentOffset = currentElement.offset();
var mouseX = parseInt((e.originalEvent.touches[0].pageX - parentOffset.left));
var mousePercent = (mouseX*100)/parseInt(root.width());
currentElement.find(".cndkbeforeafter-item-before-c").css("width",mousePercent+"%");
currentElement.find(".cndkbeforeafter-item-after-c").css("width",(100-mousePercent)+"%");
currentElement.find(".cndkbeforeafter-seperator").css("left",mousePercent+"%");
});
});
// Add visual to seperator
currentElement.find(".cndkbeforeafter-seperator").append("
");
}
// Start Animation
if(settings.enterAnimation)
{
jQuery(this).addClass("cndkbeforeafter-animation");
}
// Auto-Sliding
if(settings.autoSliding)
{
jQuery(this).attr("auto-sliding","true");
jQuery(this).find(".cndkbeforeafter-item-before-c").addClass("cndkbeforeafter-animation-item-1");
jQuery(this).find(".cndkbeforeafter-item-after-c").addClass("cndkbeforeafter-animation-item-2");
jQuery(this).find(".cndkbeforeafter-seperator").addClass("cndkbeforeafter-animation-seperator");
if(settings.autoSlidingStopOnHover)
{
// Stop On Enter
jQuery(this).on("mouseenter", function(){
jQuery(this).find(".cndkbeforeafter-item-before-c").removeClass("cndkbeforeafter-animation-item-1");
jQuery(this).find(".cndkbeforeafter-item-after-c").removeClass("cndkbeforeafter-animation-item-2");
jQuery(this).find(".cndkbeforeafter-seperator").removeClass("cndkbeforeafter-animation-seperator");
})
// Start On Exit
jQuery(this).on("mouseleave", function(){
jQuery(this).find(".cndkbeforeafter-item-before-c").addClass("cndkbeforeafter-animation-item-1");
jQuery(this).find(".cndkbeforeafter-item-after-c").addClass("cndkbeforeafter-animation-item-2");
jQuery(this).find(".cndkbeforeafter-seperator").addClass("cndkbeforeafter-animation-seperator");
})
}
}
// On window resize
jQuery( window ).resize(function() {
});
});
}
};