1
Personal talk.
I have the following problem, I have a code that identifies when a scroll of the page occurred to be able to move up my side menu when a scroll is performed. Works on IE and Firefox but doesn’t work on Chrome.
Follow the code example.
<script type="text/javascript">
$(document).ready(function () {
var $body = $('body');
var $pagiSidebar = $('.page-sidebar');
$body.scroll(function (event) {
console.log('scrolled $(body).scrollTop() = ' + $('body').scrollTop());
console.log('scrolled $(document).scrollTop() = ' + $(document).scrollTop());
console.log('scrolled $(window).scrollTop() = ' + $(window).scrollTop());
console.log('scrolled $(html).scrollTop() = ' + $('html').scrollTop());
console.log('scrolled $(html, body).scrollTop() = ' + $('html, body').scrollTop());
console.log('scrolled $(html, body, document).scrollTop() = ' + $('html, body, document').scrollTop());
if ($body.scrollTop() > 47) {
$pagiSidebar.addClass('top-zero');
}
else {
$pagiSidebar.removeClass('top-zero');
}
});
});
</script>
With this I obtained the following results.
Firefox e IE =
scrolled $(body).scrollTop() = 270
scrolled $(document).scrollTop() = 0
scrolled $(window).scrollTop() = 0
scrolled $('html').scrollTop() = 0
scrolled $('html, body').scrollTop() = 0
scrolled $('html, body', document).scrollTop() = 0
Chrome =
scrolled $(body).scrollTop() = 0
scrolled $(document).scrollTop() = 0
scrolled $(window).scrollTop() = 0
scrolled $('html').scrollTop() = 0
scrolled $('html, body').scrollTop() = 0
scrolled $('html, body', document).scrollTop() = 0
Does anyone know why or if there is another way to get that same result without using scrollTop ?
Solution
Guys, after exploring a little more and analyzing the suggestions I arrived in the following solution.
<script type="text/javascript">
$(document).ready(function () {
var $body = $('body');
var $pageSidebar = $('.page-sidebar');
var $pageContainer = $('.page-container');
$body.scroll(function (event) {
if ($pageContainer.offset().top > 0) {
$pageSidebar.css("top", $pageContainer.offset().top + "px");
} else {
$pageSidebar.css("top", "0px");
}
});
});
</script>
I gave up the use of scrollTop() because it was presenting a very unstable behavior which is not good for application.
Thanks to all!
try using the native property
window.scrollY
, in addition the correct is to assign the eventscroll
to the elementwindow
– Pedro Sanção
@Sanction on the property
window.scrollY
also keeps returning0
.– Erick Gallani
See if it helps you here. http://answall.com/questions/47462/fazer-else-em-jquery-para-controlr-scrolltop/47593#47593
– Marconi
Thanks guys. Based on the suggestions and answers I arrived at a possible solution that I put in the body of the question to help other people.
– Erick Gallani