アコーディオンは、div の代わりにリスト ul と li を使用して構築されます。この問題を抱えているほとんどの人がそうであるように、アコーディオンの一部のセクション内のコンテンツは非常に長く、大きなヘッダーの 1 つをトリガーすると、ユーザーは下にスクロールしてすべてのコンテンツを表示します。その下には、クリックする別の li ヘッダーがあり、アコーディオンが閉じて最後のヘッダーが開きます。そのセクションのコンテンツも大きいため、ユーザーは最後のヘッダー セクションの一番下を見つめたままになり、再度上にスクロールする必要があります。
この問題を調査している間、多くの人が animate() 関数を使用してアコーディオンの上部にフォーカスを戻すことを提案しました。私の問題は、オープンソースのコードを使用しているため、あまり編集するのが気が進まないことです。試してみましたが、これまでのところ成功していません。
誰でも助けることができますか?【jqueryはこちら】
(function(jQuery){
jQuery.fn.extend({
accordion: function() {
return this.each(function() {
var $ul = $(this);
if($ul.data('accordiated'))
return false;
$.each($ul.find('ul, li>div'), function(){
$(this).data('accordiated', true);
$(this).hide();
});
$.each($ul.find('a'), function(){
$(this).click(function(e){
activate(this);
return void(0);
});
});
var active = (location.hash)?$(this).find('a[href=' + location.hash + ']')[0]:'';
if(active){
activate(active, 'toggle');
$(active).parents().show();
}
function activate(el,effect){
$(el).parent('li').toggleClass('active').siblings().removeClass('active').children('ul, div').slideUp('slow');
$(el).siblings('ul, div')[(effect || 'slideToggle')]((!effect)?'fast':null);
}
});
}
});
})(jQuery);
ありがとうございました :)
[編集]
ここにある私のhtmlからアコーディオンをトリガーするコードが必要になる場合があることを認識しています::
<script type="text/javascript">
$(document).ready(function () {
$('ul').accordion();
});
</script>
より多くの研究で、何人かの人々が scrollTo() を提案したので、私もこれを試しました::
<script type="text/javascript">
$(document).ready(function () {
$('ul').accordion({
change: function() {
document.scrollTo(0, 0);
}
});
});
</script>
しかし、これもうまくいきませんでした。「ため息」..私が正しい軌道に乗っているかどうか誰か知っていますか?? ありがとう :)