Прокрутите до тега привязки, когда выбрана вкладка панели

Есть ли способ прокрутить до привязки на странице, когда выбрана вкладка на панели с вкладками? Я хотел бы, чтобы панель с вкладками прокручивалась до верхней части окна браузера.

Моя страница разработки находится здесь.

Код для якоря и вкладок:

<h1 class="heading">
    <a name="heading" id="heading"></a>Asia &amp; South East Asia International Schools
</h1>
<div id="TabbedPanels1" class="TabbedPanels">
    <ul class="TabbedPanelsTabGroup">
        <li class="TabbedPanelsTab" tabindex="0">Overview</li>
        <li class="TabbedPanelsTab" tabindex="0">Activity Weeks</li>
        <li class="TabbedPanelsTab" tabindex="0">Expeditions</li>
        <li class="TabbedPanelsTab" tabindex="0">Testimonials</li>
    </ul>

</div>

Любая помощь будет принята с благодарностью. Ваше здоровье


person David Kneale    schedule 30.05.2012    source источник


Ответы (3)


Вы можете найти полезным scrollIntoView.

Есть несколько проблем с использованием scrollIntoView:

  • Он прокручивает выбранный элемент до самого верха экрана. Выглядит лучше, если над выбранным элементом есть небольшое пространство, а не до самого верха окна. Вы можете решить эту проблему, комбинируя scrollIntoView с scrollBy, которые могут прокручиваться на относительную величину.
  • На вашем конкретном сайте некоторые разделы с вкладками довольно короткие, поэтому, например, при выборе раздела Обзор — короткого — нет места для прокрутки панели вкладок в верхнюю часть экрана. , в зависимости от размера окна. Однако более длинные разделы будут прокручивать панель вкладок вверх. Эта разница в поведении выглядит не очень хорошо.

Вы можете реализовать scrollTo на текущей панели вкладок, используя что-то вроде этого:

<ul class="TabbedPanelsTabGroup">
    <li id="tabHeaderOverview" class="TabbedPanelsTab" tabindex="0" onclick="document.getElementById('tabHeaderOverview').scrollIntoView()">Overview</li>
    <li id="tabHeaderActivity" class="TabbedPanelsTab" tabindex="0" onclick="document.getElementById('tabHeaderActivity').scrollIntoView()">Activity Weeks</li>
    <li id="tabHeaderExpeditions" class="TabbedPanelsTab" tabindex="0" onclick="document.getElementById('tabHeaderExpeditions').scrollIntoView()">Expeditions</li>
    <li id="tabHeaderTestimonials" class="TabbedPanelsTab TabbedPanelsTabSelected" tabindex="0" onclick="document.getElementById('tabHeaderTestimonials').scrollIntoView()">Testimonials</li>
</ul>

Ваш вопрос помечен как jquery, но, похоже, вы его не используете. jquery предоставляет гораздо более мощный набор процедур прокрутки, см. эту демонстрационную страницу jquery.

Изменить: похоже, что у Spry есть проблема с подходом, описанным выше: добавление события onclick к элементам списка нарушает работу панели вкладок Spry. У меня небольшой опыт работы со Spry, но это Spry.Utils метод выглядит так, как будто он может быть частью решения Spry -

Вам нужно будет включить SpryUtils на свою страницу, затем вам нужно будет добавить javascript примерно так: извините, но я не могу попробовать это на своем компьютере, так что это не проверено:

function scrollTabHeader(event)
{
    this.scrollIntoView();
    // this incorporates the scrollBy mentioned above:    
    window.scrollBy(0, -10);
}

Spry.Utils.addEventListener("tabHeaderOverview", "click", scrollTabHeader, false);
Spry.Utils.addEventListener("tabHeaderActivity", "click", scrollTabHeader, false);
Spry.Utils.addEventListener("tabHeaderExpeditions", "click", scrollTabHeader, false);
Spry.Utils.addEventListener("tabHeaderTestimonials", "click", scrollTabHeader, false);
person pb2q    schedule 30.05.2012

вы можете добавить href="#change", например, к вашей ссылке

<a href="#change" onmouseout="MM_swapImgRestore()" onmouseover="MM_swapImage('Why World Challenge','','images/intl_nav_over_05.jpg',1)" href="#change"><img width="134" height="40" border="0" src="http://www.worldchallenge-internationalschools.com/dev/images/intl_nav_05.jpg" alt="Why World Challenge" id="Why World Challenge"></a>

и идентификатор вкладки

<li class="TabbedPanelsTab" tabindex="0" id="change">Why World Challenge</li>

при нажатии на кнопку окно перейдет на вкладку

person Aymen Taarit    schedule 30.05.2012
comment
Привет Аймен. Спасибо за ваш ответ. Я думаю, что ваше предложение будет работать для кнопок в верхней части страницы. Я пытаюсь сделать так, чтобы страница прокручивалась до привязки, когда выбрана одна из вкладок на панели с вкладками. [Просмотреть эту страницу] (godaddy.com/email/online-storage. aspx?ci=55860) и щелкните одну из вкладок на этой странице, чтобы понять, что я имею в виду. - person David Kneale; 30.05.2012

$('html, body').animate({
    scrollTop: $("#elementId").offset().top
}, 1000);

Это будет плавно прокручиваться до вашего элемента, вы можете изменить скорость, с которой вы можете обрабатывать группу в одной функции.

$(".TabbedPanelsTabGroup li").each(function(){
   $(this).click(function(){
     $('html, body').animate({
      scrollTop: $(this).offset().top
     }, 1000);
   });
 });
person Aymen Taarit    schedule 30.05.2012
comment
Привет Аймен. Выглядит все хорошо и по деньгам... только один вопрос от новичка, куда мне это положить? В документе HTML или в js-файле панели с вкладками? И это только второй блок кода, который мне нужно использовать? Большое спасибо! - person David Kneale; 30.05.2012
comment
ну, во-первых, вы не загружаете jQuery на свой веб-сайт, поэтому вам нужно загрузить его, а затем поместить код в нужный вам js-файл панели с вкладками. это код jquery, который вы должны поместить в $(document).ready(function(){ $(.TabbedPanelsTabGroup li).each(function(){ $(this).click(function(){ $('html, body ').animate({ scrollTop: $(this).offset().top }, 1000); }); }); }); не забывайте об этом, поместите это себе в голову ‹script src=ajax.googleapis.com/ajax/libs/jquery/1.7.2/ - person Aymen Taarit; 30.05.2012
comment
мой код протестирован с моей консолью, вам нужно загрузить jquery и поместить код в js-файл панели с вкладками - person Aymen Taarit; 30.05.2012