http://storehouse.sakura.ne.jp/sscroll.html
function sscroll() { var element = document.getElementById('foo'); var duration = parseInt(document.getElementById('duration').value, 10) var interval = 10; var offset = 0; var length = element.scrollHeight - element.clientHeight var n = Math.ceil(duration / interval); function shift(x) { element.scrollTop = (0.5 - Math.cos(Math.PI * x / n) / 2) * length + offset; } (function(i) { if (i > n) { element.scrollTop = offset; return; } shift(i); var self = arguments.callee; setTimeout(function() { self(i + 1); }, interval); })(1); }
再帰のせいで無駄に重い気がする…。
素直にsetInterval()を使えばよかったかな?