Помогите убрать прыжек страницы при клике
Здравствуйте
Есть код для вкладок:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="author" content="Grafs" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.js"></script>
<script type="text/javascript">
jQuery(document).ready(function($){
$('ul.wstab').each(function() {
$(this).find('li').each(function(i) {
$(this).click(function(e){
$(this).addClass('wstbcur').siblings().removeClass('wstbcur');
var pr = $(this).parents('div.wpposttab');
pr.find('div.wstabcn').hide();
pr.find('div.wstabcn:eq('+i+')').fadeIn(250);
});
});
});
});
</script>
<style type="text/css">
<!--
.wpposttab{width:100%;margin:10px 0;}
.wstab{position:relative;margin:0 0 0 10px;padding:0;z-index:22;}
.wpposttab .wstab li{position:relative;float:left;border:1px solid #d2d3d5;background:#f1f1f2;margin:0 5px 0 0;padding:5px 10px;text-align:center;text-transform:uppercase;font-weight:bold;color:#3c3b3d;list-style:none;}
.wpposttab .wstab li:hover{color:#f68b2e;cursor:pointer;}
.wstabl,.wstabr{position:absolute;top:-1px;width:6px;height:6px;overflow:hidden;font-size:0;background:url(images/round.png) no-repeat;}
.wstabl{left:-1px;background-position: 0 0;} .wstabr{right:-1px;background-position: -6px 0;}
.wstabcn{display:none;position:relative;border:1px solid #d2d3d5;background:#FFF;z-index:10;top:-1px;padding:10px 10px;overflow:hidden;}
.wstbshow{display: block;}
.wpposttab li.wstbcur{color:#f68b2e;border-bottom:1px solid #FFF; background:#FFF;}
.wpposttab li.wstbcur:hover{color:#f68b2e;cursor:auto;}
-->
</style>
<title>Untitled 3</title>
</head>
<body>
Вкладка 1
<div class="wpposttab">
<ul class="wstab">
<li class="wstbcur">Меню1</li>
<li>Меню2</li>
<li>Меню3</li>
</ul>
<div style="clear:both;"></div>
<div class="wstabcn wstbshow">Текст меню 1</div>
<div class="wstabcn">Текст меню 2</div>
<div class="wstabcn">Текст меню 3</div>
</div>
Здесь идет какойто текст<br />
Здесь идет какойто текст<br />
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
Вкладка 2<br />
<div class="wpposttab">
<ul class="wstab">
<li class="wstbcur">Меню1</li>
<li>Меню2</li>
<li>Меню3</li>
</ul>
<div style="clear:both;"></div>
<div class="wstabcn wstbshow">Текст меню 1</div>
<div class="wstabcn">Текст меню 2</div>
<div class="wstabcn">Текст меню 3</div>
</div>
Здесь идет какойто текст<br />
Здесь идет какойто текст<br />
Здесь идет какойто текст<br />
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
</body>
</html>
Все работает на ура кроме одного нюанса Если прокрутить страницу так чтобы нижняя вкладка оказалась вверху страница и кликнуть по меню вкладки то страница смещается вниз к первой вкладке. Не могу понять в чем проблема. Как убрать смещение страницы чтобы при клике по меню страница не двигалась? Буду очень благодарен за помощь. |
return false
|
Пробовал, не помогает
|
попробуй не hide-ом прятать предыдущий элемент, а сделать ему сразу .css({'display':'none'});
|
Всеравно зараза прыгает
|
Разберитесь с версткой. Данный js-код сам по себе не приводит к прыжку страницы, при нормально сверстанной странице. Попробуйте фаербагом повторить последовательность действий: скройте один таб, отобразите другой. и посмотрите, что происходит со страницей
|
Посмотрел, меняется у дивов display:block; на display:none; и все
Вот css:
.wpposttab{width:100%;margin:10px 0;}
.wpposttab .wstab{position:relative;margin:0 0 0 10px;padding:0;z-index:22;}
.wpposttab .wstab li{position:relative;float:left;border:1px solid #d2d3d5;background:#f1f1f2;margin:0 5px 0 0;padding:5px 10px;text-align:center;text-transform:uppercase;font-weight:bold;color:#3c3b3d;list-style:none;}
.wpposttab .wstab li:hover{color:#f68b2e;cursor:pointer;}
.wstabl,.wstabr{position:absolute;top:-1px;width:6px;height:6px;overflow:hidden;font-size:0;background:url(images/round.png) no-repeat;}
.wstabl{left:-1px;background-position: 0 0;} .wstabr{right:-1px;background-position: -6px 0;}
.wstabcn{display:none;position:relative;border:1px solid #d2d3d5;background:#FFF;z-index:10;top:-1px;padding:10px 10px;overflow:hidden;}
.wstbshow{display: block;}
.wpposttab li.wstbcur{color:#f68b2e;border-bottom:1px solid #FFF; background:#FFF;}
.wpposttab li.wstbcur:hover{color:#f68b2e;cursor:auto;}
|
ага, и сейчас кто-то должен сверстать себе страничку с вашим кодом, подключить ваш js, чтобы решить вашу же детскую проблему?
|
Если есть возможность помочь решить мою детскую проблему по другому то я только ЗА.
|
Обновил в первом посте код, это готовая html страничка для теста.
Попробуйте прокрутить страницу вниз и нажать на любой пункт менб во 2 вкладке. |
хз. у меня страница ника не прыгает. в каком браузере проверяете?
П.С. попробуйте поклацать по уже активной вкладке =) |
Клацал и по активной и по не активной
Проверял во всех FF,IE,Oprea,Сhrome Поднимите вторую-нижнюю вкладку под самый верх экрана и кликните по меню. При первом клике страница съезжает вниз. В самом диве сейчас мало текста а когда много то сьезает существенно. Я пока решил это таким методом
$('html, body').scrollTop(e.pageY-(e.clientY - document.documentElement.clientTop));
Но это не решение, а так костыль временный, пока не найду решения. |
Я то понимаю что происходит, и скажу, это нормально, но если уж сильно хочется убрать скачки попробуй
<div class="wstabcn wstbshow">Текст меню 1</div> <div class="wstabcn">Текст меню 2</div> <div class="wstabcn">Текст меню 3</div> эти блоки вложить в еще один div и дать ему фиксированную высоту или же если не планируется поддержка ие6 то можно динамически менять ему стиль min-height на максимально возможный при переключении вкладок... |
Похоже проблему решил, но с глюками
В pr.find('div.wstabcn').hide(); изменил на pr.find('div.wstabcn').hide(1); и все. Но при этом если быстро кликать то проскакивает съезжание. И еще, если кликнуть на активной вкладке то страница съезжает. Как отключить в этом коде скрипта евент на активной вкладке? |
| Часовой пояс GMT +3, время: 02:27. |