Oto mój kod:

var scrollOnLoad = function scrollOnLoad(selector, offset) {
    window.onload = function() {
        if ($(window).height() <= 800) {
            var attempts = 100;
            var interval = setInterval(function() {
                var h = $(selector).height();
                console.log("attempt #" + attempts + ", h=" + h);
                if (h > 0 || !attempts--) {
                    $("body,html").animate({scrollTop : h + offset}, '1000');
                    clearInterval(interval);
                }
            }, 50)
        }
    }
}

I oto jak dzwoni:

scrollOnLoad(".content-wrapper", 50);

Zauważyłem, że wydarzenie w oknie Z góry dziękuję!

1
Vytalyi 28 listopad 2013, 11:06

2 odpowiedzi

Najlepsza odpowiedź

Możesz użyć document.readyState Nieruchomość:

function scrollOnLoad(selector, offset) {
    if(document.readyState === 'complete')
        x();
    else
        document.addEventListener('readystatechange', function(){
            if(document.readyState === 'complete')
                x();
        });

    function x(){
        if ($(window).height() <= 800) {
            var attempts = 100;
            var interval = setInterval(function() {
                var h = $(selector).height();
                console.log("attempt #" + attempts + ", h=" + h);
                if (h > 0 || !attempts--) {
                    $("body,html").animate({scrollTop : h + offset}, '1000');
                    clearInterval(interval);
                }
            }, 50)
        }
    }
}
2
karaxuna 28 listopad 2013, 07:39

Jak wspomniano w komentarzach ScrollonLoad jest wykonywany po załadowaniu okna.

Teraz w lepszych scenariuszach wydarzenia należy dodać w zakresie globalnego.

Tak powinno być

 window.onload = function() {
  if(someConditionIsSatisfied){

    if ($(window).height() <= 800) {
            var attempts = 100;
            var interval = setInterval(function() {
                var h = $(selector).height();
                console.log("attempt #" + attempts + ", h=" + h);
                if (h > 0 || !attempts--) {
                    $("body,html").animate({scrollTop : h + offset}, '1000');
                    clearInterval(interval);
                }
            }, 50)
        }
    }
}
0
Ghost 28 listopad 2013, 08:04