1

問題へのリンク:

jQueryダイアログ内でメソッドを使用し.scrollTop()てもうまくいきません。HTMLマークアップは次のとおりです。

<div id="toogleMAmaximized" style="background:#000000">
     <div id="missionsMinimized" style="display:none;margin-top:10px;margin-bottom: 10px;cursor:pointer"><img src="images/missionsMinimized.png" alt="missions"/></div>
     <div id="achivmentsMinimized" style="display:none;margin-top:5px;cursor:pointer">        <img src="images/achivmentsMinimized.png" /></div>
     <div id="missions" class="unselected MAmaximized"></div>
     <div id="achivments" class="unselected MAmaximized"></div>
     <div id="dataMA" style="position:absolute;top:10px;right:10px;display:none;width:850px;height:500px;background-image: url('images/background-home.png') ; overflow-y:scroll"></div>
</div>

JavaScript 関数を使用してdataMAdiv を設定します。

        function populateMissionsData(){    
             $('#missions').empty();
             $('#dataMA').append('<h1 style="color:white">Current Missions:</h1>');
             for (var $key in missionData['current']){
                 $('#dataMA').append(missionData['current'][$key]);
             }
             $('#dataMA').append('<h1 style="color:white">Not started missions:</h1>');
             for (var $key in missionData['other']){
                 $('#dataMA').append(missionData['other'][$key]);
             }
             $('#dataMA').append('<h1 style="color:white">Ccompleted Missions:</h1>');
             for (var $key in missionData['completed']){
                 $('#dataMA').append(missionData['completed'][$key]);
             }
        }

これは、問題なく dataMA が読み込まれるため、うまく機能します。これで、プラグインを使用する dataMA 内の div のコンテンツを展開するボタンができlivequeryました。スクロールの問題は次のとおりです。

        $(".plus").livequery('click',(function(){
              key = $(this).attr('key').toString();           
              $('#data'+ key).slideToggle('fast');

              //this is the problem, it does not scroll the dialog.
              $('#dataMA').scrollTop($('#data'+ key).offset().top);
              //Update - this does not work either
              $('#dataMA').scrollTop($('#dataMA')[0].scrollHeight);                        
              //Update 100 - This is not working either
              $('#dataMA').scrollTop($('#data'+ key).offset().top - $('#dataMA').offset().top + $('#dataMA').scrollTop());
              $(this).toggleClass('less')
              if($(this).hasClass('less')){
                   $(this).attr('src','images/less.png');
              }else{
                   $(this).attr('src','images/plus.png');
              }
          }));

プラスボタンをトリガーしてもスクロールしませんが、プラスボタンをもう一度クリックすると、下にスクロールして上にスクロールしたように機能します。

dataMAでセレクターを変更しましtoogleMAmaximizedた。スクロールしましたが、期待どおりではありませんでした (その中のコンテンツを上に移動しました)。

更新 1 興味がある場合は、私の環境: jQueryv1.7.1 jQuery UI1.8.16 liveQuery1.1.1

更新 2jQuery環境を(1.7.2) およびjQuery UI(1.8.21) の最新バージョンに更新しましたが、同じ問題が引き続き発生します。

Update 3 OK、fiddle問題を確認するためのファイルを入手しました。私の小さな画面では正しく表示できません。皆さんが改善してくれることを願っています。まず、右の画像をクリックしてから、最初の四角をクリックします。スクロールの問題を確認するには、タイトルのロードされていないアイコンのいずれかをクリックします (plusクラスがあります)。dataMA 変数は、データベースへのクエリを置き換えるもので、そこに入力した文字列を結果として返します。リクエストを使用して追加されたタグを使用するlivequeryと、多くの問題が発生したため、使用します。.on().post()

jsfiddle

Update 4 解像度が 1300x768 よりも高い人は、jsfiddle ファイルを正しく取得できるかどうか教えてもらえますか? この問題を解決できませんでした。

更新 5

いくつかの要素をスクロールできますが、要素が含まれているdivの外側にある場合はスクロールされませんが、上記のようにボタンをもう一度押すと上にスクロールしようとします。

アップデート 6

理解を深めるためにjsfiddleを更新しました。手順は同じです。画像をクリックします->ダイアログがポップアップします->ミッションをクリックします->最後のミッション(厚い壁)までスクロールします->不足している画像をクリックして右(なぜ代替コンテンツが表示されないのかわかりません)それを行うと、非表示のコンテンツが表示され、もう一度クリックすると非表示になります。ただし、自動スクロールは行われません。

4

2 に答える 2

1

本当の答えではありませんが、コメントリンクを見つけるためにコードのぼかしを渡したことがわかりませんでした。

とにかく...私もjQuery UI Dialog 内で .scrollTop() を使用するのに苦労しています。私も、それを機能させるために必要なコードを理解できていないことを示すために、 Fiddleを投稿しました。そこでは、作業中のダイアログと、失敗した試行を明確に示す短いコードが表示されます。

画面の解像度が jsFiddle での問題とは何の関係もないと思います。むしろ、あなたのコードは意図された文脈からかけ離れているので、一般的には不完全であり、完全に壊れているわけではありませんが、意図した文脈から十分に取り除かれていないため、意図した文脈から十分に取り除かれていないと思われます。問題を解決するのに役立つ合理的な努力をするためにパスを並べ替えるにはコードが多すぎます。

開発プラットフォームで、関連するビット (たとえば、ダイアログと原因と scrollTop() を呼び出す手段) 以外はすべて取り除いてモックアップすることをお勧めします。それでも動かない場合は、削除したコードをここまたは jsFiddle に投稿して、助けを求めてください。(ちょうど私の2セント。)

于 2012-06-14T13:39:21.110 に答える
1

私はついに自分の問題がどこにあるのかを理解しました。slideToggle()エフェクトが完成する前に巻物をやろうとしてた!私がする必要があるのは、次のようにスクロールを呼び出すことだけでした:

$('#data'+ key).slideToggle('fast',function(){
    $('#dataMA').scrollTop($('#data'+ key).offset().top - $('#dataMA').offset().top + $('#dataMA').scrollTop());
});

ここに解決策があります

于 2012-07-02T14:24:40.380 に答える