Mercurial > pub > site.implab
diff public_html/static/js/implab/sticky.js @ 6:2d1a0a75fc49
added css, templates
author | sergey |
---|---|
date | Mon, 12 May 2014 18:05:30 +0400 |
parents | |
children | d9551c7e7101 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/public_html/static/js/implab/sticky.js Mon May 12 18:05:30 2014 +0400 @@ -0,0 +1,49 @@ +define([ 'dojo/on', 'dojo/dom-geometry', 'dojo/dom-style' ], function(on, g, + css) { + + return function(sticker, options) { + var dh, pos; + + var pos = g.position(sticker,true); + + var origLeft = css.get(sticker,'left'); + var left = pos.x + 'px'; + + if (options && options.along) { + var along = g.position(options.along,true); + dh = along.y + along.h - pos.h - pos.y; + } else { + dh = window.scrollMaxY - pos.h - pos.y; + } + + var fixed = false; + + var stfn = function() { + if(!options || !options.along) + dh = window.scrollMaxY - pos.h - pos.y; + + if (window.scrollY >= pos.y && window.scrollY <= pos.y + dh) { + if (!fixed) { + css.set(sticker, { top : 0, left: left, position : 'fixed' }); + fixed = true; + } + } else { + if (fixed) { + fixed = false; + + css.set(sticker, { position : 'relative', left: origLeft }); + + if (window.scrollY < pos.y) { + css.set(sticker, { top : 'auto' }); + } else { + css.set(sticker, { top : dh + 'px' }); + } + } + } + }; + + stfn(); + + on(window, 'scroll', stfn ); + }; +}); \ No newline at end of file