29

How can I use the scrolltop without an animation

This code works:

var offTop = $('#box').offset().top;
offTop  = offTop-43;
$('#mainCt').animate({scrollTop: '+=' + offTop + 'px'}, 400);

And here are my (not working solutions):

$("#mainCt").scrollTop('+=' + offTop + 'px');                 // doesn't work
$("#mainCt").scrollTop('+='+offTop);                          // doesn't work
hhh = setTimeout(' $("#mainCt").scrollTop('+offTop+');',800); // doesn't work

DEMO
http://jsfiddle.net/DNNFF/9/

9 Answers 9

24

Try this:

var offTop = $('#box').offset().top - 43;
$('#mainCt').scrollTop(offTop);

The scrollTop property accepts just an integer, no suffixes or units required.

Sign up to request clarification or add additional context in comments.

6 Comments

Works fine here: jsfiddle.net/wNehJ Do you have any errors in your console?
also when you scroll a little bit down? Edit: play with it, it does not work (i check the code on Firefox and on chrome)
I think that's because there is no #box element in your example
-> $(this).after('<div id="box">content</div>');
Ugh, sorry. I need better glasses obviously.
|
19

Skip jQuery. Just use JavaScript:

window.scroll(0, 0);

Comments

17
+50

maybe if you don't want an animation or anything fancy just use an anchor

<a name="top"></a>

Place it where you need to scroll

and in your function where you are calling use

document.location.href="#top";

You could also create a function to append the anchor before the element, do the document.location thing and later remove that anchor.

http://jsfiddle.net/fSrxr/1/

3 Comments

This works, but how can i use jQuery ScrollTop without an animation?
Whilst this answer "works", it messes with the browser history. $(element).scrollTop(offset) is better for the reposition without animation, and without messing with the browser history. Especially $(window).scrollTop(offset) for repositioning a jQuery UI Accordion section after the accordion has loaded.
This assumes that you are going name all your elements. Doesn't work as a general solution when elements are selected dynamically. Also doesn't work when you already have legit sections of your page named and you thus need to use the hashed part of the location
12

http://api.jquery.com/scrollTop/

$(window).scrollTop(offTop)

2 Comments

if mainCt is a layer with a scrollbar (overflow:auto) then you can use it on mainCt. If you want to scroll the browser viewport, then you have to use window.
right, mainCt is a div with overflow-x: hidden; overflow-y: scroll;
4

Why not use it with less duration. I fiddled it and it had no animation. SInce there will be no time to see the animation, there will be no animation at all.

var offTop = $('#box').offset().top;
offTop  = offTop-43;
$('#mainCt').animate({scrollTop: '+=' + offTop + 'px'}, 50); //50 added here as duartion

2 Comments

Doesn't answer the question.
This is, in my opinion, the most elegant solution. I'd actually just set the duration to 1.
1

Can't you play with the duration ?

var offTop = $('#box').offset().top;
offTop  = offTop-43;
$('#mainCt').delay('800').animate({scrollTop: '+=' + offTop + 'px'}, 1);

2 Comments

I can, but this solution is a little bit dirty :/
Doesn't answer the question.
0

Demo with keep position on refresh page using jQuery:

//------KEEP SCROLL POSITION
        $(window).scroll(function () {
            sessionStorage.scrollTop = $(this).scrollTop();
        });
        $(document).ready(function () {
            if (sessionStorage.scrollTop != "undefined") {
                setTimeout(() => window.scrollTo({
                    top: sessionStorage.scrollTop,
                    left: 0,
                    behavior: 'auto'
                }), 5);
            }
        });

Comments

0

[EDITED] This code will reset the view to its original starting position with its height equal to the device height temporarily excluding and disabling scroll and overflow. In short, it has the same function as scrolling to top without animation.

$('#yourButton').on('click', function(){
    $('html, body').css({ overflow: 'hidden', height: '100%' });
});

1 Comment

Your answer could be improved by adding more information on what the code does and how it helps the OP.
-1
var offTop = $('#box').offset().top;
$(window).scrollTop(parseInt(offTop))

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.