Difference between revisions of "Image slider"

From Organic Design wiki
(Created page with "<div class="image-slider"> 512px 512px 512px 512px </div> [[File:But...")
 
Line 1: Line 1:
 +
{|
 +
|-
 +
|valign=top|
 
<div class="image-slider">
 
<div class="image-slider">
 
[[File:Butterfly3.jpg|512px]]
 
[[File:Butterfly3.jpg|512px]]
Line 70: Line 73:
 
});
 
});
 
};
 
};
 
 
 
// ]]>
 
// ]]>
 
</script>
 
</script>
Line 78: Line 79:
  
 
</html>
 
</html>
 +
|
 +
<js>
 +
window.sliderdata = [];
 +
$(document).ready( function() {
 +
 +
$('div.image-slider').each( function() {
 +
var div = $(this);
 +
 +
// Create entry in common data for this slider
 +
window.currentslider = window.sliderdata.length;
 +
div.attr('id', window.currentslider);
 +
var slider = { image: 0, dir: 0, images:[], div: div };
 +
window.sliderdata.push(slider);
 +
 +
// Store the image urls found in this slider in this sliders data
 +
$('img', div).css('display','none').each( function() {
 +
window.sliderdata[currentslider].images.push( $(this).attr('src') );
 +
window.sliderdata[currentslider].w = $(this).attr('width');
 +
window.sliderdata[currentslider].h = $(this).attr('height');
 +
});
 +
 +
// Restructure the content of this sliders div into a table
 +
div.html( '<table><tr><th><table><tr><td>&nbsp;</td></tr></table></th></tr></table>' );
 +
 +
// Set the cell size to the image size
 +
$('table',div).css({ background: 'transparent', width: slider.w, height: slider.h, 'border-collapse': 'collapse' });
 +
$('td,th',div).css({ padding: 0 });
 +
 +
// Initialise the table's images to first image with zero offset
 +
window.image_slider( window.currentslider, 0 );
 +
 +
 +
});
 +
});
 +
 +
window.image_slider = function( slider, dir ) {
 +
var data = window.sliderdata[slider];
 +
if( data.dir ) return;
 +
data.image += dir;
 +
data.dir = dir;
 +
data.div.animate({ t: data.w }, {
 +
duration: 1000,
 +
step: function(now, fx) {
 +
var div = $(fx.elem);
 +
var data = window.sliderdata[div.attr('id')];
 +
var l = data.images.length;
 +
var image = data.image;
 +
image += l * 1000000;
 +
var next = ( image - dir ) % l;
 +
image %= l;
 +
var offset = -data.dir * fx.pos * data.w;
 +
 +
$('th', div).css('background', 'transparent url("'
 +
+ data.images[image]
 +
+ '") no-repeat '
 +
+ (offset + data.w * dir)
 +
+ 'px center'
 +
);
 +
 +
$('td', div).css('background', 'transparent url("'
 +
+ data.images[next]+'") no-repeat '
 +
+ offset
 +
+ 'px center'
 +
);
 +
},
 +
complete: function(now, fx) {
 +
var data = window.sliderdata[$(this).attr('id')];
 +
data.dir = 0;
 +
}
 +
});
 +
};
 +
</js>

Revision as of 18:50, 20 March 2012

Butterfly3.jpg YellowButterfly.jpg MonarchOnPinkTree3.jpg Butterfly1.jpg

Butterfly3.jpg YellowButterfly.jpg MonarchOnPinkTree3.jpg Butterfly1.jpg


prev | next

<js> window.sliderdata = []; $(document).ready( function() {

$('div.image-slider').each( function() { var div = $(this);

// Create entry in common data for this slider window.currentslider = window.sliderdata.length; div.attr('id', window.currentslider); var slider = { image: 0, dir: 0, images:[], div: div }; window.sliderdata.push(slider);

// Store the image urls found in this slider in this sliders data $('img', div).css('display','none').each( function() { window.sliderdata[currentslider].images.push( $(this).attr('src') ); window.sliderdata[currentslider].w = $(this).attr('width'); window.sliderdata[currentslider].h = $(this).attr('height'); });

// Restructure the content of this sliders div into a table

div.html( '
 
' );

// Set the cell size to the image size $('table',div).css({ background: 'transparent', width: slider.w, height: slider.h, 'border-collapse': 'collapse' }); $('td,th',div).css({ padding: 0 });

// Initialise the table's images to first image with zero offset window.image_slider( window.currentslider, 0 );


}); });

window.image_slider = function( slider, dir ) { var data = window.sliderdata[slider]; if( data.dir ) return; data.image += dir; data.dir = dir; data.div.animate({ t: data.w }, { duration: 1000, step: function(now, fx) { var div = $(fx.elem); var data = window.sliderdata[div.attr('id')]; var l = data.images.length; var image = data.image; image += l * 1000000; var next = ( image - dir ) % l; image %= l; var offset = -data.dir * fx.pos * data.w;

$('th', div).css('background', 'transparent url("' + data.images[image] + '") no-repeat ' + (offset + data.w * dir) + 'px center' );

$('td', div).css('background', 'transparent url("' + data.images[next]+'") no-repeat ' + offset + 'px center' ); }, complete: function(now, fx) { var data = window.sliderdata[$(this).attr('id')]; data.dir = 0; } }); }; </js>