forked from LeonidasEsteban/site3
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jquery.BgImageTransition.js
66 lines (57 loc) · 2.84 KB
/
jquery.BgImageTransition.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
jQuery.extend({
BgImageTransitions: []
});
jQuery.fn.extend({
BgImageTransition: function(src, options) {
if( !src ){ return jQuery; }
//copy css from the element to the helper element function
function copyCSS( from, to ){
jQuery(['border-bottom-color', 'border-bottom-style', 'border-bottom-width', 'border-left-lolor',
'border-left-style', 'border-left-width', 'border-right-color', 'border-right-style',
'border-right-width', 'border-spacing', 'border-top-color', 'border-top-style',
'border-top-width', 'bottom', 'height', 'left', 'margin-bottom', 'margin-left',
'margin-right', 'margin-top', 'marker-offset', 'max-height', 'max-width', 'min-height',
'min-width', 'opacity', 'outline-color', 'outline-offset', 'outline-width',
'padding-bottom', 'padding-left', 'padding-right', 'padding-top', 'position', 'right',
'top', 'width', 'z-index']).each( function(i,v){
jQuery(to).css( v, jQuery(from).css( v ) );
});
}
//make sure there is a zIndex set - we will the helperElement to be *above* the original one
if( !this.css('zIndex') ){
this.css('zIndex',1);
}
//default plugin settings
var settings = jQuery.extend({
effect: {opacity: 'toggle'},
duration: 'slow',
easing: 'linear',
callback: function(){},
helperElementId: this.attr('id')+'2',
zindex: parseInt(this.css('zIndex'),10)+1
}, options);
//check the bgImageTransition array and see whether there is already a helperElement for the original one. Generate one, if not
var helperElement = null;
if( !jQuery.BgImageTransitions[this.attr('id')] ){
helperElement = this.clone();
copyCSS( this, helperElement );
helperElement.css('zIndex', settings.zindex);
helperElement.css('display', 'none');
helperElement.attr('id', settings.helperElementId );
helperElement.insertAfter(this);
jQuery.BgImageTransitions[this.attr('id')] = helperElement;
}
else{
helperElement = jQuery.BgImageTransitions[this.attr('id')];
}
//load the image file into cache first, so that we get a nice and fast load. Make the transition when the image has been loaded in cache
var tempImage = new Image();
jQuery(tempImage).load( function(){
var newImage = ( helperElement.css('display') == 'block' ) ? jQuery(this) : jQuery(helperElement);
newImage.css('backgroundImage', 'url('+tempImage.src+')');
helperElement.animate( settings.effect, settings.duration, settings.easing, settings.callback );
});
tempImage.src = src;
return jQuery;
}
});