I am developing a website in which i am using jquery-collagePlus plugin to make image collages . I want to make shuffling images dynamically when click on shuffle button. any one have solution for this (or any other method to do this) then kindly let me know ?
Here is My Demo Collage Test
here is my code:
$(window).load(function () {
$('.Collage').collagePlus({
'targetHeight' : 300,
'fadeSpeed' : "slow",
'effect' : 'default',
'direction' : 'vertical',
'allowPartialLastRow' : false
});
$('.Collage').removeWhitespace().collagePlus();
});
//Html
<input name="shuffl" value="shuffle" type="button">
<section style="width:700px; " class="Collage effect-parent">
<img src="../support/images/ed-lea-dribbble-2.png">
<img src="../support/images/ed-lea-dribbble-3.png">
<img src="../support/images/ed-lea-dribbble-4.png">
<img src="../support/images/ed-lea-dribbble-6.png">
<img src="../support/images/ed-lea-dribbble-1.png">
</section>
See this Demo jsFiddle
You can use this little pluggin to shuffle DOM elements :
(function($){
$.fn.shuffle = function() {
var allElems = this.get(),
getRandom = function(max) {
return Math.floor(Math.random() * max);
},
shuffled = $.map(allElems, function(){
var random = getRandom(allElems.length),
randEl = $(allElems[random]).clone(true)[0];
allElems.splice(random, 1);
return randEl;
});
this.each(function(i){
$(this).replaceWith($(shuffled[i]));
});
return $(shuffled);
};
})(jQuery);
Then put your collagePlus
code into a function :
function refreshCollagePlus() {
$('.Collage').collagePlus({
'targetHeight' : 300,
'fadeSpeed' : "slow",
'effect' : 'default',
'direction' : 'vertical',
'allowPartialLastRow' : false
});
}
And just do this on DOM ready :
$(document).ready(function () {
$('#shuffle').on('click', function(){
$('.Collage img').shuffle();
refreshCollagePlus();
});
refreshCollagePlus();
});
The idea here is to init once the collagePlus
plugin, and then shuffle
the images and "refresh" the collagePlus
plugin on the #shuffle
button click
event.
EDIT : Prevent an image to move
The cleanest and easiest way to achieve that is to give an image a specific class :
<img class="dontMove" src="http://placehold.it/800x600" />
And change this line :
$('.Collage img').shuffle();
to this :
$('.Collage img:not(.dontMove)').shuffle();
In this case, all the images having the class dontMove
will always stay where they are, meanwhile others will randomly move.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With