- ベストアンサー
JSで自動スクロールを行う方法とアニメーションの付加方法
- JSで自動スクロールを行う方法について質問があります。特にアニメーションを付加したい場合の方法について教えてください。
- 例えば、ゆっくりスクロールさせるにはどのようにすれば良いでしょうか。animate関数を使用して実現したいです。
- 現在のコードでは自動スクロールは実現できていますが、アニメーションが上手く動作しません。どのように修正すれば良いでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>animate以外でもお待ちしております。 自作すればいいんでないの? 例えば、こんな感じ(全角空白は半角に) function sample(dest){ var duration = 500; var obj = document.documentElement || document.body; var pos = obj.scrollTop; var flag = dest > pos, step = (dest - pos) * 30 / duration; var animate = setInterval(function(){ pos += step; if((flag && pos>=dest)||(!flag && dest>=pos)) pos = dest; obj.scrollTop = pos; if(pos === dest) clearInterval(animate); }, 30); }
その他の回答 (1)
- fujillin
- ベストアンサー率61% (1594/2576)
コードを追いかけてはいませんが、$(winow)でanimateを行なおうとすると『ownerDocumentが未定義である』といったようなエラーがでるようです。 これからの推測ですが、DOMエレメントでないとanimateは使えないのかも知れません。 とりあえずの思いつきですが… $("#wall").click(function(){ var div = $("<div>").css("height", 0); var target = $("#wall_2").offset().top; div.animate( { height: 1 }, { step: function(d){ $(window).scrollTop(target * d);} } ); }); とか。
お礼
fujillinさん、さっそく回答ありがとうございます! なるほど、stepを使う事によってこうゆう事が出来るんですね。 更にここに、duration を加えると更に秒数の設定も出来ますね。 $("#wall").click(function(){ var div = $("<div>").css("height", 0); var target = $("#wall_2").offset().top; div.animate( { height: 1 }, { duration: 5000, step: function(d){ $(window).scrollTop(target * d);} } ); }); 他に、方法がないかも回答をお待ちしております! animate以外でもお待ちしております。
お礼
このようなコードをすっと書けるの凄いですね。 憧れます。 2回もアイディアをいただき、ありがとうございます! 感謝。