Помогите с реализацией на mootools 1.2
Не знаю даже с какой стороны подобраться к данной проблеме.
Надо реализовать блок, но моих знаний явно не хватит. Суть проблемы в нижеследующей картинке: http://plasmon.rghost.ru/148389.image
<style>
.left li {
cursor:pointer;
list-style:none;
float:left;
margin-left:5px;
margin-right:5px;
color:#333;
}
.left li:hover {
color:#e3c7a2;
}
.block
{
margin:100px; padding:20px; border:1px solid #ccc; width:80%
}
</style>
<div class="block">
<ul class="left">
<li id="click_div_1">1</li>
<li id="click_div_2">2</li>
<li id="click_div_3">3</li>
<li id="click_div_4">4</li>
<li id="click_div_5">5</li>
</ul>
<ul class="left">
<li id="click_div_prev">назад</li>
<li id="click_div_next">вперед</li>
</ul>
<div style="clear: both;"></div>
<div id='div_1' style="display:block">текст блока 1</div>
<div id='div_2' style="display:none">текст блока 2</div>
<div id='div_3' style="display:none">текст блока 3</div>
<div id='div_4' style="display:none">текст блока 4</div>
<div id='div_5' style="display:none">текст блока 5</div>
</div>
|
HTML стоило выложить текстом в соответствующем BB-теге, а не картинкой
mootols для решения вашей задачи не обязателен решение будет выглядеть примерно так:
(function()
{
var cur_page=1,i;
//назначение обработчиков
document.getElementById('click_div_prev').onclick=function()
{
document.getElementById('div_'+cur_page).style.display='none';
cur_page--;
document.getElementById('div_'+cur_page).style.display='';
};
document.getElementById('click_div_next').onclick=function()
{
document.getElementById('div_'+cur_page).style.display='none';
cur_page++;
document.getElementById('div_'+cur_page).style.display='';
};
for(i=1;i<=5;i++)
{
document.getElementById('click_div_'+i).onclick=
(function(new_page)
{return function()
{
document.getElementById('div_'+cur_page).style.display='none';
cur_page=new_page;
document.getElementById('div_'+cur_page).style.display='';
}
})(i);
}
})()
проверить не имел возможности, так как вбивать HTML руками лень. должно быть рабочим вроде бы |
Что то не работает =(
Код html добавил. |
отлично работает.
код это должен быть вызван после того, как загрузятся все упомянутые элементы
<html>
<head>
<style>
.left li {
cursor:pointer;
list-style:none;
float:left;
margin-left:5px;
margin-right:5px;
color:#333;
}
.left li:hover {
color:#e3c7a2;
}
.block
{
margin:100px; padding:20px; border:1px solid #ccc; width:80%
}
</style>
<title>Выберите</title>
</head>
<body>
<div class="block">
<ul class="left">
<li id="click_div_1">1</li>
<li id="click_div_2">2</li>
<li id="click_div_3">3</li>
<li id="click_div_4">4</li>
<li id="click_div_5">5</li>
</ul>
<ul class="left">
<li id="click_div_prev">назад</li>
<li id="click_div_next">вперед</li>
</ul>
<div style="clear: both;"></div>
<div id='div_1' style="display:block">текст блока 1</div>
<div id='div_2' style="display:none">текст блока 2</div>
<div id='div_3' style="display:none">текст блока 3</div>
<div id='div_4' style="display:none">текст блока 4</div>
<div id='div_5' style="display:none">текст блока 5</div>
</div>
<script>
(function()
{
var cur_page=1,i;
//назначение обработчиков
document.getElementById('click_div_prev').onclick=function()
{
document.getElementById('div_'+cur_page).style.display='none';
cur_page--;
document.getElementById('div_'+cur_page).style.display='';
};
document.getElementById('click_div_next').onclick=function()
{
document.getElementById('div_'+cur_page).style.display='none';
cur_page++;
document.getElementById('div_'+cur_page).style.display='';
};
for(i=1;i<=5;i++)
{
document.getElementById('click_div_'+i).onclick=
(function(new_page)
{return function()
{
document.getElementById('div_'+cur_page).style.display='none';
cur_page=new_page;
document.getElementById('div_'+cur_page).style.display='';
}
})(i);
}
})()
</script>
</body>
</html>
PS надо добавить еще ряд проверок, чтобы не выходило за пределы в обе стороны, иначе скрипт перестает работать корректно. Думаю сами с этим справитесь |
Спасибо огромное +))
А почему скрипт не работает до загрузки элементов? |
потому что в нем навешиваются обработчики событий на элементы
и соответственно если элементов еще нету в DOM-дереве, то и навешивать событие не на что. советую занятся более качественным изучением JS-а. зря вы начали изучение JS-а с фреймворка. сначала лучше научится решать элементарные задачи, без помощи многокилобайтных либ, чтобы не возникало глупых вопросов |
Так и поступлю.
Как ни странно но с js я сталкиваюсь редко, хотя разрабатываю крупные проекты на php уже более 8 лет. |
На увеличение я сделал проверку
if (cur_page == 5)
{
document.getElementById('div_'+cur_page).style.display='none';
cur_page--;
document.getElementById('div_5').style.display='';
}
else
{
document.getElementById('div_'+cur_page).style.display='none';
cur_page++;
document.getElementById('div_'+cur_page).style.display='';
}
а вот как на уменьшение, что то в толк не возьму... Как не сделай все равно глючи |
неправильно ты делаеш проверку.
по твоей логике получается "если мы хотим увеличить номер страницы, и находимся на пятой, то сперва делаем невидимой пятую, затем выставляем внутренний счетчик на 4-ую страницу(нарушение логики), и делаем видимой 5-ую" проверку можно сделать например так
document.getElementById('click_div_prev').onclick=function()
{
if(cur_page==1)
return;
document.getElementById('div_'+cur_page).style.display='none';
cur_page--;
document.getElementById('div_'+cur_page).style.display='';
};
document.getElementById('click_div_next').onclick=function()
{
if(cur_page==5)
return;
document.getElementById('div_'+cur_page).style.display='none';
cur_page++;
document.getElementById('div_'+cur_page).style.display='';
};
|
| Часовой пояс GMT +3, время: 11:37. |