\$\begingroup\$
\$\endgroup\$
1
I am working again and got this to work. Is this the best way to write this code?
$(window).load(function(){
var $window = $(window),
$sticky = $('#contentSideIner'),
elTop = $sticky.offset().top;
$window.scroll(function() {
$sticky.toggleClass('sticky', $window.scrollTop() > elTop);
});
$window.scroll(function() {
$sticky.toggleClass('stickyBottom', $window.scrollTop() > elTop + 4685);
});
});
I had such a hard time to get this function to work in the first place. For the longest time I was told it was not executing at all.
200_success
145k22 gold badges190 silver badges478 bronze badges
-
\$\begingroup\$ Welcome to Code Review! Could you tell us what you really want to accomplish with this code — what scrolling behaviour should the user see as a result? Could you post the relevant CSS too? And maybe your HTML as well, if it might help us understand what you are trying to accomplish? \$\endgroup\$200_success– 200_success2014年12月04日 05:44:27 +00:00Commented Dec 4, 2014 at 5:44
1 Answer 1
\$\begingroup\$
\$\endgroup\$
This can be simplified to this:
$(window).scroll(function() {
var $sticky = $('#contentSideIner'),
elTop = $sticky.offset().top,
wTop = $(window).scrollTop();
$sticky.toggleClass('sticky', wTop > elTop)
.toggleClass('stickyBottom', wTop > elTop + 4685);
});
- The
window
object already exists, so no need to wait until it loads before attaching an event handler to it. - Don't cache objects outside of the event handler unless it's really needed (consumes more memory, code is less encapsulated, makes your page susceptible to problems if layout or DOM elements change, etc...)
- Use jQuery chaining for multiple method calls on the same jQuery object
- Only use one event handler and put both
.toggleClass()
calls in the same event handler.
answered Dec 4, 2014 at 5:59
Explore related questions
See similar questions with these tags.
default