78 lines
1.9 KiB
JavaScript
78 lines
1.9 KiB
JavaScript
(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); |