Autor Zpráva
Knd
Profil *
Zdravim,
pokousel jsem se ukuchtit div, ktery by neustale scroloval nahoru a dolu po nacteni stranky. Prisel jsem s timhle:
<html>
<head>
<script type="text/javascript">
    var scrolling = null;
 
    function scroll_up() {
        var d = document.getElementById('div_scroll');
 
        d.scrollTop = d.scrollTop - 1;
 
        scrolling = window.setTimeout(function() {
            scroll_up();
        }, 5);
		if (d.scrollTop == 1){scroll_down();}
    }
 
    function scroll_down() {
        var d = document.getElementById('div_scroll');
		 
        d.scrollTop = d.scrollTop + 1;
 
        scrolling = window.setTimeout(function() {
            scroll_down();
        }, 5);
		if (d.scrollTop == (d.scrollHeight - d.offsetHeight)){scroll_up();}
    }
</script>
</head>
<body onload="scroll_down()">
<div id='div_scroll' style="width: 50px; height: 100px; overflow: hidden;">
bububu<br>
bububu<br>
bububu<br>
bububu<br>
bububu<br>
bububu<br>
bububu<br>
bububu<br>
</div>
</body>
</html>


Problem je v tom, ze po chvili to nescrolluje plynule, jakoby tam haproval pixel a ja nevim kde (js zrovna neovladam)... zadam proto o pomoc =)
Suta
Profil
Knd
Řešení je spousta. V první řadě nikde nezastavuješ jednou spuštěnou funkci scroll_up() či scroll_down(), takže jakmile na konci počátečně spuštěné funkce scroll_down() spustíš funkci scroll_up(), funkce scroll_down() stále pokračuje... takže funkce se nabalují a po půl minutě ti jich může jet třeba 30 najednou, proto ta "neplynulost"... Musíš je nějak zastavit, např. přidáním těchto zvýrazněných řádků:

<script type="text/javascript">
    var scrolling = null;
    var scrollingUp = false, scrollingDown = false;
 
    function scroll_up() {
        if(scrollingDown) return;
        var d = document.getElementById('div_scroll');
 
        d.scrollTop = d.scrollTop - 1;
 
        scrolling = window.setTimeout(function() {
            scroll_up();
        }, 5);
        if (d.scrollTop == 1){scrollingUp = false; scrollingDown = true; scroll_down(); }
    }
 
    function scroll_down() {
        if(scrollingUp) return;
        var d = document.getElementById('div_scroll');
         
        d.scrollTop = d.scrollTop + 1;
 
        scrolling = window.setTimeout(function() {
            scroll_down();
        }, 5);
        if (d.scrollTop == (d.scrollHeight - d.offsetHeight)){ scrollingDown = false; scrollingUp = true; scroll_up();}
    }
</script>


Samozřejmě by to šlo i pomocí jedné jediné proměnné, nicméně snad jsem tě navedl na řešení.
Knd
Profil *
Aha, to mi nedoslo... Jak jsem psal, js neovladam :)
Dekuji za radu

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: