※ ChatGPTを利用し、要約された質問です(原文:jQueryでページ内リンクに誤差が出る。)
jQueryページ内リンクの誤差を解決する方法
このQ&Aのポイント
フェード効果を追加したページ内リンクをクリックすると、上に300px程ずれてしまうエラーが発生しています。
この問題を解決するためには、jQueryのコードを修正する必要があります。
まず、jQueryのコードの一部を変更して、リンク先の要素の表示を切り替える方法を修正します。そして、スクロール位置の調整を行うために、アニメーション終了時に`window.location.hash`を使ってスクロール位置を保持し、再度スクロールさせることで正しい位置に表示させます。
フェード効果を追加したページ内リンクをクリックすると、上に300px程ずれてしまうエラーがでてしまいます。
これを解決するにはどうすればいいでしょうか?
http://code.jquery.com/jquery-1.6.2.jsを使用
* javascript *************
(function($){
var speed = 300,
active = "actve",
n_active = ":not(." + active + ")",
getTarget = function(elm){
var h, r = $("");
elm.each(function(){
if(h=$(this).attr("href").match(/#.+$/)) r = r.add(h[0]);
});
return r;
};
$.fn.extend({
changer : function(){
var t = $(this).children("a");
getTarget(t.filter(n_active)).hide();
t.click(function(){
var elm, func, t = $(this);
getTarget(t.parent().children("a")).queue([]).stop(1,1);
func = function(){
getTarget(t.addClass(active)).fadeIn(speed);
};
elm = getTarget(t.siblings("."+active).removeClass(active));
if(elm.length) elm.fadeOut(speed, func); else func();
return false;
});
}
});
})(jQuery);
$(function(){
$("#group1").changer();
});
* html *************
<div style="padding:500px 0 500px;">余白用</div>
<div id="group1">
<a href="#text1" class="actve">1を表示</a>
<a href="#text2">2を表示</a>
<a href="#text3">3を表示</a>
</div>
<hr>
<div id="text1"><p>1111111111111111111111</p><p>1111111111111111111111</p><p>1111111111111111111111</p><p>1111111111111111111111</p><p>1111111111111111111111</p></div>
<div id="text2"><p>テストテストテストテストテストテストテストテスト</p><p>テストテストテストテストテストテストテストテスト</p><p>テストテストテストテストテストテストテストテスト</p><p>テストテストテストテストテストテストテストテスト</p></div>
<div id="text3"><p>333333</p><p>333333</p><p>333333</p><p>333333</p><p>333333</p><p>333333</p><p>333333</p><p>333333</p><p>333333</p><p>333333</p><p>333333</p><p>333333</p><p>333333</p><p>333333</p></div>
上記の内容で、リンクをクリックすると切り替わったと同時に、上に戻ってしまいます。
見たところ、ランダムではなく、一定の箇所まで戻るといった感じでした。
これを直すにはどうすればいいでしょうか?