2017-10-04 1 views
1

コンテンツを開くためのブロックとボタンがいくつかあります。私がボタンを押すと、ブロック内のすべてのコンテンツがブロックされますが、画面はフォーカスされたままです。トグルブロックにフォーカスを当てたブラウザの位置

(予想通り)ブラウザ画面は、ブラウザの一番下まで移動し、バッククローズドブロックの先頭に行くのdoesnt - しかし、私はブロックの一番下までスクロールし、モードを非表示に戻ってそれを切り替えるには、ボタンを押したとき
$('.ul' + l).append('<button type="button" onclick="$(this).myFunc()">Button</button>'); 

      $.fn.myFunc = function() { 
      var ul = $(this).parent().attr('class'); 
      $('.' + ul + ' li:gt(5)').fadeToggle("fast"); 
         }; 

私はいくつか$(window).focusものを試してみましたが、fadeToggle("fast").preventDefault()などを追加しましたが、何も助けませんでした。何か案は?

+2

'で 'L'である何$( 'ul' + l) '? – Akshay

+1

「画面が集中している」とはどういう意味ですか?あなたが 'window.scroll()'や '$(...)animate({scrollTop、...}'、スクロール位置を制御しようとしているように思えますが、フォーカスではありません) –

+0

@Akshay申し訳ありませんが前に言及しなかった - それはブロックの数量を構築するためのループの反復子です。 –

答えて

1

あなたが必要なものを行うための最も簡単な方法は、ネイティブscrollIntoView()方法です:

document.querySelector('.ul' + l).scrollIntoView({ 
    behavior: 'smooth' 
}); 

これは、すべての主要なブラウザのcurrent versionsでサポートされていますが、例えば、以下の古いブラウザ(IE 10とのサポートが必要な場合)polyfillを使用することができます。

以下のコメントには:documentオブジェクトがありますが、私は約束します:documentはすべてのウェブページの基礎となります。それはあなたがしたい場合は、代わりにjQueryのセレクタを使用することができると述べていますが、scrollIntoViewを使用することができます前に、基礎となるDOMオブジェクトを取得する必要があります(それはjQueryの方法ではないので。)

$('.ul' + l)[0].scrollIntoView({...}); 
+0

ありがとうございましたが、私はドキュメントを持っていないし、スクリプトのすべてをやっているので、私はこのwindow.scroll()を実装しようとしました。私が書いた(間違った)この: '$ .fn.myFunc =関数(){VAR UL = $(この).parent()のattr( 'クラス');' '$を(+ UL + '。 '' fooToggle( "fast")。scrollIntoView({'' behavior: 'smooth'});}; ' そして、コンソールの 'scrollIntoViewは関数ではありません.' –

+0

すべてのページが' document'を持っていますが、jqueryオブジェクトから変換する方法を示す答えを更新しました。 –

+0

ありがとう!今分かります。それはトリックをした –

関連する問題