comparison public_html/static/js/implab/sticky.js @ 12:d9551c7e7101

improved dox library
author sergey
date Fri, 16 May 2014 16:47:50 +0400
parents 2d1a0a75fc49
children
comparison
equal deleted inserted replaced
11:573272ec604b 12:d9551c7e7101
1 define([ 'dojo/on', 'dojo/dom-geometry', 'dojo/dom-style' ], function(on, g, 1 define([ 'dojo/on', 'dojo/dom-geometry', 'dojo/dom-style' ], function(on, g,
2 css) { 2 css) {
3 3
4 /**
5 * @param [Dom|string]
6 * stiker element to become a sticker
7 */
4 return function(sticker, options) { 8 return function(sticker, options) {
5 var dh, pos; 9 var dh, pos;
6 10
7 var pos = g.position(sticker,true); 11 var pos = g.position(sticker, true);
12 var clientWidth = g.position(document.body).w;
13 var stickRight = options ? options.stick == 'right' : false;
8 14
9 var origLeft = css.get(sticker,'left'); 15 var origPos = css.get(sticker, stickRight ? 'right' : 'left');
10 var left = pos.x + 'px';
11 16
12 if (options && options.along) { 17 var fixPos = (stickRight ? clientWidth - pos.w - pos.x : pos.x) + 'px';
13 var along = g.position(options.along,true); 18
14 dh = along.y + along.h - pos.h - pos.y; 19 var dhcalc = function() {
15 } else { 20 if (options && options.along) {
16 dh = window.scrollMaxY - pos.h - pos.y; 21 var along = g.position(options.along, true);
17 } 22 dh = along.y + along.h - pos.h - pos.y;
23 if (options.alongContent)
24 // respect bottom padding and border
25 dh -= g.getPadExtents(options.along).t
26 + g.getBorderExtents(options.along).t;
27 } else {
28 dh = window.scrollMaxY - pos.h - pos.y;
29 }
30 };
18 31
19 var fixed = false; 32 var fixed = false;
20 33
21 var stfn = function() { 34 var stfn = function() {
22 if(!options || !options.along) 35 if (!options || !options.along)
23 dh = window.scrollMaxY - pos.h - pos.y; 36 dh = window.scrollMaxY - pos.h - pos.y;
24 37
25 if (window.scrollY >= pos.y && window.scrollY <= pos.y + dh) { 38 if (window.scrollY >= pos.y && window.scrollY <= pos.y + dh) {
26 if (!fixed) { 39 if (!fixed) {
27 css.set(sticker, { top : 0, left: left, position : 'fixed' }); 40 if (stickRight)
41 css.set(sticker, {
42 top : 0,
43 right : fixPos,
44 position : 'fixed'
45 });
46 else
47 css.set(sticker, {
48 top : 0,
49 left : fixPos,
50 position : 'fixed'
51 });
28 fixed = true; 52 fixed = true;
29 } 53 }
30 } else { 54 } else {
31 if (fixed) { 55 if (fixed) {
32 fixed = false; 56 fixed = false;
33 57
34 css.set(sticker, { position : 'relative', left: origLeft }); 58 if (stickRight)
59 css.set(sticker, {
60 position : 'relative',
61 right : origPos
62 });
63 else
64 css.set(sticker, {
65 position : 'relative',
66 left : origPos
67 });
35 68
36 if (window.scrollY < pos.y) { 69 if (window.scrollY < pos.y) {
37 css.set(sticker, { top : 'auto' }); 70 css.set(sticker, {
71 top : 'auto'
72 });
38 } else { 73 } else {
39 css.set(sticker, { top : dh + 'px' }); 74 css.set(sticker, {
75 top : dh + 'px'
76 });
40 } 77 }
41 } 78 }
42 } 79 }
43 }; 80 };
44 81
82 dhcalc();
45 stfn(); 83 stfn();
46 84
47 on(window, 'scroll', stfn ); 85 on(window, 'scroll', stfn);
86 on(window, 'resize', dhcalc);
48 }; 87 };
49 }); 88 });