|
28 | 28 | scrollProperty = {
|
29 | 29 | scroll: {
|
30 | 30 | getLeft: function($elem) { return $elem.scrollLeft(); },
|
31 |
| - getTop: function($elem) { return $elem.scrollTop(); } |
| 31 | + setLeft: function($elem, val) { $elem.scrollLeft(val); }, |
| 32 | + |
| 33 | + getTop: function($elem) { return $elem.scrollTop(); }, |
| 34 | + setTop: function($elem, val) { $elem.scrollTop(val); } |
32 | 35 | },
|
33 | 36 | position: {
|
34 | 37 | getLeft: function($elem) { return parseInt($elem.css('left'), 10) * -1; },
|
|
171 | 174 | },
|
172 | 175 | _defineSetters: function() {
|
173 | 176 | var self = this,
|
174 |
| - positionPropertyAdapter = positionProperty[self.options.positionProperty]; |
| 177 | + scrollPropertyAdapter = scrollProperty[self.options.scrollProperty], |
| 178 | + positionPropertyAdapter = positionProperty[self.options.positionProperty], |
| 179 | + setScrollLeft = scrollPropertyAdapter.setLeft, |
| 180 | + setScrollTop = scrollPropertyAdapter.setTop; |
| 181 | + |
| 182 | + this._setScrollLeft = (typeof setScrollLeft === 'function' ? function(val) { |
| 183 | + setScrollLeft(self.$scrollElement, val); |
| 184 | + } : $.noop); |
| 185 | + |
| 186 | + this._setScrollTop = (typeof setScrollTop === 'function' ? function(val) { |
| 187 | + setScrollTop(self.$scrollElement, val); |
| 188 | + } : $.noop); |
175 | 189 |
|
176 | 190 | this._setPosition = positionPropertyAdapter.setPosition ||
|
177 | 191 | function($elem, left, startingLeft, top, startingTop) {
|
|
203 | 217 | });
|
204 | 218 | },
|
205 | 219 | refresh: function(options) {
|
| 220 | + var self = this, |
| 221 | + oldLeft = self._getScrollLeft(), |
| 222 | + oldTop = self._getScrollTop(); |
| 223 | + |
206 | 224 | if (!options || !options.firstLoad) {
|
207 | 225 | this._reset();
|
208 | 226 | }
|
209 | 227 |
|
| 228 | + this._setScrollLeft(0); |
| 229 | + this._setScrollTop(0); |
| 230 | + |
210 | 231 | this._setOffsets();
|
211 | 232 | this._findParticles();
|
212 | 233 | this._findBackgrounds();
|
| 234 | + |
| 235 | + // Fix for WebKit background rendering bug |
| 236 | + if (options && options.firstLoad && /WebKit/.test(navigator.userAgent)) { |
| 237 | + $(window).load(function() { |
| 238 | + var oldLeft = self._getScrollLeft(), |
| 239 | + oldTop = self._getScrollTop(); |
| 240 | + |
| 241 | + self._setScrollLeft(oldLeft + 1); |
| 242 | + self._setScrollTop(oldTop + 1); |
| 243 | + |
| 244 | + self._setScrollLeft(oldLeft); |
| 245 | + self._setScrollTop(oldTop); |
| 246 | + }); |
| 247 | + } |
| 248 | + |
| 249 | + this._setScrollLeft(oldLeft); |
| 250 | + this._setScrollTop(oldTop); |
213 | 251 | },
|
214 | 252 | _detectViewport: function() {
|
215 | 253 | var viewportOffsets = this.$viewportElement.offset(),
|
|
0 commit comments