| 26 | var names = []; |
| 27 | |
| 28 | var reset = function() { |
| 29 | var elems = document.getElementsByClassName('syncscroll'); |
| 30 | var i, j, el, found, name; |
| 31 | for (name in names) { |
| 32 | if (names.hasOwnProperty(name)) { |
| 33 | for (i = 0; i < names[name].length; i++) { |
| 34 | names[name][i].removeEventListener( |
| 35 | 'scroll', names[name][i].syn, 0 |
| 36 | ); |
| 37 | } |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | for (i = 0; i < elems.length; i++) { |
| 42 | found = 0; |
| 43 | el = elems[i]; |
| 44 | if (!(name = el.getAttribute('name'))) { |
| 45 | continue; |
| 46 | } |
| 47 | |
| 48 | el = el.scroller||el; |
| 49 | |
| 50 | if (!names[name]) { |
| 51 | names[name] = []; |
| 52 | } |
| 53 | |
| 54 | for (j = 0; j < names[name].length; j++) { |
| 55 | if (names[name][j] == el) { |
| 56 | found = 1; |
| 57 | } |
| 58 | } |
| 59 | |
| 60 | if (!found) { |
| 61 | names[name].push(el); |
| 62 | } |
| 63 | |
| 64 | el.eX = el.eY = 0; |
| 65 | |
| 66 | (function(el, name) { |
| 67 | el.addEventListener( |
| 68 | 'scroll', |
| 69 | el.syn = function() { |
| 70 | var elems = names[name]; |
| 71 | |
| 72 | var scrollX = el[scroll+Left]; |
| 73 | var scrollY = el[scroll+Top]; |
| 74 | |
| 75 | var xRate = |
| 76 | scrollX / |
| 77 | (el[scroll+Width] - el[client+Width]); |
| 78 | var yRate = |
| 79 | scrollY / |
| 80 | (el[scroll+Height] - el[client+Height]); |
| 81 | |
| 82 | var updateX = 0; |
| 83 | var updateY = 0; |
| 84 | |
| 85 | var otherEl, i; |