Mercurial > pub > site.implab
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 5:0b703449f192 | 6:2d1a0a75fc49 |
|---|---|
| 1 define([ 'dojo/on', 'dojo/dom-geometry', 'dojo/dom-style' ], function(on, g, | |
| 2 css) { | |
| 3 | |
| 4 return function(sticker, options) { | |
| 5 var dh, pos; | |
| 6 | |
| 7 var pos = g.position(sticker,true); | |
| 8 | |
| 9 var origLeft = css.get(sticker,'left'); | |
| 10 var left = pos.x + 'px'; | |
| 11 | |
| 12 if (options && options.along) { | |
| 13 var along = g.position(options.along,true); | |
| 14 dh = along.y + along.h - pos.h - pos.y; | |
| 15 } else { | |
| 16 dh = window.scrollMaxY - pos.h - pos.y; | |
| 17 } | |
| 18 | |
| 19 var fixed = false; | |
| 20 | |
| 21 var stfn = function() { | |
| 22 if(!options || !options.along) | |
| 23 dh = window.scrollMaxY - pos.h - pos.y; | |
| 24 | |
| 25 if (window.scrollY >= pos.y && window.scrollY <= pos.y + dh) { | |
| 26 if (!fixed) { | |
| 27 css.set(sticker, { top : 0, left: left, position : 'fixed' }); | |
| 28 fixed = true; | |
| 29 } | |
| 30 } else { | |
| 31 if (fixed) { | |
| 32 fixed = false; | |
| 33 | |
| 34 css.set(sticker, { position : 'relative', left: origLeft }); | |
| 35 | |
| 36 if (window.scrollY < pos.y) { | |
| 37 css.set(sticker, { top : 'auto' }); | |
| 38 } else { | |
| 39 css.set(sticker, { top : dh + 'px' }); | |
| 40 } | |
| 41 } | |
| 42 } | |
| 43 }; | |
| 44 | |
| 45 stfn(); | |
| 46 | |
| 47 on(window, 'scroll', stfn ); | |
| 48 }; | |
| 49 }); |
