(function($) { $.fn.menucloud = function(settings) { settings = $.extend({}, $.fn.menucloud.defaults, settings); $('ul', this).css({ 'position':'relative', 'width':'100%', 'height':'100%', 'padding':0 }) $('li', this).css({'top':"-100px", 'left':'-100px'}).each(function(i,e){ var $li = $(e); $li.css({ // 'border':'1px solid red', 'position':'absolute' }); var $prt = $li.parent('ul.menu'); // $.log('li', $li); // $.log('$this | width = '+$li.width()+' | height = '+$li.height()); // $.log('$prt | width = '+$prt.width()+' | height = '+$prt.height()); function _testPos(t){ var isok = true; $li.siblings().each(function(j, sib){ $sib = $(sib); // var pos = $sib.position(); // $.log('pos',pos); var css_sib_top = $sib.css('top'); // $.log('css_sib_top.match("/em/") = '+css_sib_top.search('em')); var sib_top = css_sib_top.search('em') >= 0 ? parseFloat(css_sib_top)/settings.q : parseFloat(css_sib_top); // $.log('sib_top = '+sib_top); // $.log('t = '+t+' | sib_top = '+sib_top); // $.log('Math.abs(top-sib_top) = '+Math.abs(top-sib_top)); if(Math.abs(t-sib_top) < 35){ isok = false; return false; }; }); return isok; }; var isPosOK = false; var limit = 0; while(!isPosOK && limit < 10){ var top = (Math.round(Math.random()*(($prt.height()-settings.margin.t-settings.margin.b)-$li.height()))+settings.margin.t); var left = (Math.round(Math.random()*(($prt.width()-settings.margin.l-settings.margin.r)-$li.width()))+settings.margin.l); isPosOK = _testPos(top); // $.log('isPosOK = '+isPosOK); limit = limit+1; } $li.css({ 'top':(top*settings.q)+'em', 'left':(left*settings.q)+'em' }); // $.log('- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '); }); return this; } $.fn.menucloud.defaults = { q:0.063, margin : {t:0,r:0,b:0,l:0} }; })(jQuery);