2017-10-20 5 views
0

このタスクの全体的な目標は、#hashNameがURLに追加されたものに応じてページの下の特定のdivにユーザーをスクロールさせることです。ページロード後にdiv idにjqueryをリンクしますが、アニメーション後にページが読み込まれ続けます

私が扱っているhtmlには正しいdiv IDが追加されていないため、ドキュメント上でjavascriptを使用して追加しています。 div idが追加されると、渡されたハッシュを判別し、ユーザーをハッシュに渡すスクリプトが作成されます。この次のコードは動作します:

jQuery(document).ready(function($){ 
    //append new div id to current FAQ class 
    document.querySelector('.press-24_tab').id = 'faq'; 

    //now that we have correct div id, animate user to this div 
     var target = window.location.hash; 

     $('html, body').animate({scrollTop: $(window.location.hash).offset().top}, 'slow', function() { 
      //in animate callback, attempt to keep user focused here 
      $('#faq').focus(); 
     }); 
}); 

私はワードプレスでこれを使用することができますので、私はコード内などjQueryを呼び出しています。

このコードは正常に動作します。私の問題は、このスクリプトはのページがロードされていることです。そしてページは読み込みを続けます。その結果、ページフォーカスはページの先頭に戻ります!

私は$(window).on('load', function(){});のハッシュコードにアニメーションをラップすることを考えていましたが、これはうまくいかないようです。ユーザーに焦点を当て続けるために私の既存のアニメーションコールバックに注意してください - しかし、これは固執していません。ページはまだ読み込まれます。ページにはロード時間がかかりすぎるので、私はこれに対して戦っています。

この時点で、私はレンガの壁に当たっています。私はjavascriptとjQueryの私より賢い人たちに私がここで何をしなければならないか見るために手を差し伸べています。どんな助けでも大歓迎です。

答えて

0

jquery(document).ready()はすぐにDOMは、物事のルックスで期待通りDOMは、文書自体と同じものではありませんように、これは実際に働いている準備ができていると発生します。

あなたがwindow.load()イベント

jquery(window).load(function() { 
    //append new div id to current FAQ class 
    document.querySelector('.press-24_tab').id = 'faq'; 

    //now that we have correct div id, animate user to this div 
    var target = window.location.hash; 

    $('html, body').animate({ 
    scrollTop: $(window.location.hash).offset().top 
    }, 'slow', function() { 
    //in animate callback, attempt to keep user focused here 
    $('#faq').focus(); 
    }); 
}); 

を使用する必要があり、ウェブフォント、画像、動画などのような外部コンテンツを待つ必要がある場合

はDOM hereのドキュメントを通して見てください。

+0

'(ウィンドウ).load'内にdiv idを追加するコードを入力すると、動作しません。私はそれを文書の中に入れておく必要はありませんか? – HollerTrain

+0

はい、それはあなたが欠けていたものです。あなたのdiv idをウィンドウロードに置くことは決してありません。私はこの質問への回答を掲示します – HollerTrain

関連する問題