Skip to content

Commit f321cb6

Browse files
committed
Reset scroll position before refreshing elements
1 parent 2a6113a commit f321cb6

File tree

3 files changed

+81
-5
lines changed

3 files changed

+81
-5
lines changed

jquery.stellar.js

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@
2828
scrollProperty = {
2929
scroll: {
3030
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); }
3235
},
3336
position: {
3437
getLeft: function($elem) { return parseInt($elem.css('left'), 10) * -1; },
@@ -171,7 +174,18 @@
171174
},
172175
_defineSetters: function() {
173176
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);
175189

176190
this._setPosition = positionPropertyAdapter.setPosition ||
177191
function($elem, left, startingLeft, top, startingTop) {
@@ -203,13 +217,37 @@
203217
});
204218
},
205219
refresh: function(options) {
220+
var self = this,
221+
oldLeft = self._getScrollLeft(),
222+
oldTop = self._getScrollTop();
223+
206224
if (!options || !options.firstLoad) {
207225
this._reset();
208226
}
209227

228+
this._setScrollLeft(0);
229+
this._setScrollTop(0);
230+
210231
this._setOffsets();
211232
this._findParticles();
212233
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);
213251
},
214252
_detectViewport: function() {
215253
var viewportOffsets = this.$viewportElement.offset(),

0 commit comments

Comments
 (0)