Помогите с jQuery и кнопкой.
Приветствую уважаемое сообщество. Сам я совсем еще чайник, но учусь :)
Делаю меню для сайта. Это горизонтальный ряд кнопок, которые при :hover медленно изменяют цвет, а при нажатии меняют цвет на оранжевый, пока не будет нажата другая кнопка. Весь текст в Div'ах, которые при нажатии отображаются, в зависимости от нажатой кнопки. Проблема в том, что если всю функцию целиком засунуть в <button onclick=****> все работает отлично. Но это куча лишнего кода на странице. Из отдельного файла это работать не хочет. Догадываюсь, что это из-за $(this).css('background-color','rgba(255,162,0,0.7)'); Вся проблема, похоже, в (this). Если при вызове из onclick, скрипт понимает, что (this) это та кнопка, которая нажата, то скрипт в файле этого не понимает. На что поменять (this) ? Как передать в скрипт информацию, какая кнопка нажата ?
<style>
.btnnavi
{
background-color:rgba(0,0,0,0.7);
height:90px;
width:15%;
color:white;
border-style:hidden;
border-bottom-left-radius:1px;/*без этого в опере нет прозрачности, почему-то*/
font-size:90%;
-webkit-transition-property:background-color, li;
-webkit-transition-duration: 1s, 1s;
-webkit-transition-timing-function: linear, ease-in;
-moz-transition-property:background-color, li;
-moz-transition-duration:1s;
-moz-transition-timing-function: linear, ease-in;
-o-transition-property:background-color, li;
-o-transition-duration:1s;
-o-transition-timing-function: linear, ease-in;
}
#btnnavi-l
{
border-bottom-left-radius:15px;
border-top-left-radius:15px;
}
#btnnavi-r
{
border-bottom-right-radius:15px;
border-top-right-radius:15px;
}
.btnnavi:hover,#btnnavi-l:hover,#btnnavi-r:hover
{
background-color:rgba(0,110,255,0.7);
}
</style>
<div>
<button class="btnnavi" id="btnnavi-l" onclick="$(navigate('page1'));">Пункт 1</button>
<button class="btnnavi" onclick="$(navigate('page2'));">Пункт 2</button>
<button class="btnnavi" id="btnnavi-r"onclick="$(navigate('page3'));">Пункт 3</button>
</div>
function navigate(page) {
$('.text').hide(); /*скрываем открытый div*/
$('#' + page).fadeIn('slow'); /*показываем другой div*/
$('.btnnavi').css('background-color','rgba(0,0,0,0.7)'); /*сбрасываем цвет нажатой кнопки*/
$(this).css('background-color','rgba(255,162,0,0.7)');/*устанавливаем цвет нажатой кнопки*/
}
|
не пользуйтесь onclick)
Пишите скрипты только в файле скрипта, например так:
$(/*пункт меню (селектор)*/).click(function() {
/*функция по клику на пункт меню, где this = тот пункт меню на который мы нажали*/
});
Тогда вам не надо писать функции для каждого пункта меню. Можно написать одну функцию на все. Допустим меню сделано списком:
$('li').click(function() {
$('ul').find('active').toggleClass('active');//Снимаем класс актив с пункта меню
$(this).toggleClass('active');//Добавляем класс актив к кликнутому пункту
/*В таком варианте вы просто задаёте цвет для class='active' через css*/
})
|
Цитата:
|
Цитата:
|
Получить хочу меню. При наведении на кнопку меняет цвет. При нажатии на кнопку - нажатая кнопка меняет цвет на оранжевый, и остается такой, пока другую не нажму.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<style type="text/css">
.btnnavi
{
background-color:rgba(0,0,0,0.7);
height:90px;
width:15%;
color:white;
border-style:hidden;
border-bottom-left-radius:1px;/*for button transparency in opera*/
font-size:90%;
-webkit-transition-property:background-color, li;
-webkit-transition-duration: 1s, 1s;
-webkit-transition-timing-function: linear, ease-in;
-moz-transition-property:background-color, li;
-moz-transition-duration:1s;
-moz-transition-timing-function: linear, ease-in;
-o-transition-property:background-color, li;
-o-transition-duration:1s;
-o-transition-timing-function: linear, ease-in;
}
#btnnavi-l
{
border-bottom-left-radius:15px;
border-top-left-radius:15px;
}
#btnnavi-r
{
border-bottom-right-radius:15px;
border-top-right-radius:15px;
}
.btnnavi:hover,#btnnavi-l:hover,#btnnavi-r:hover
{
background-color:rgba(0,110,255,0.7);
}
.btnnavi:active,#btnnavi-l:active,#btnnavi-r:active
{
background-color:rgba(255,162,0,0.7);
}
</style>
</head>
<body>
<script type="text/javascript">
$(document).ready(function(){
$('.btnnavi').click(function()
{
$('.text').hide();
$('#page'+ $(this).attr("value")).fadeIn('slow');
$('.btnnavi').find(':active').toggleClass(':active');
$(this).toggleClass('active');
});
});
</script>
<div class="bodyTop">
<button class="btnnavi" id="btnnavi-l" value="1">Главная</button>
<button class="btnnavi" value="2">Порядок работы</button>
<button class="btnnavi" value="3">Стоимость услуги</button>
<button class="btnnavi" value="4">Контакты</button>
<button class="btnnavi" value="5">Документы</button>
<button class="btnnavi" id="btnnavi-r" value="6">Информация</button>
</div>
</body>
</html>
Вот так это выглядит. Не могу справиться с $('.btnnavi').find(':active').toggleClass(':active '); $(this).toggleClass('active'); Что-то не так делаю. Не остается она оранжевой после нажатия. |
Цитата:
Как вариант.
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
.btnnavi {
background-color:rgba(0,0,0,0.7);
height:90px;
width:15%;
color:white;
border-style:hidden;
border-bottom-left-radius:1px;/*for button transparency in opera*/
font-size:90%;
-webkit-transition-property:background-color, li;
-webkit-transition-duration: 1s, 1s;
-webkit-transition-timing-function: linear, ease-in;
-moz-transition-property:background-color, li;
-moz-transition-duration:1s;
-moz-transition-timing-function: linear, ease-in;
-o-transition-property:background-color, li;
-o-transition-duration:1s;
-o-transition-timing-function: linear, ease-in;
}
#btnnavi-l {
border-bottom-left-radius:15px;
border-top-left-radius:15px;
}
#btnnavi-r {
border-bottom-right-radius:15px;
border-top-right-radius:15px;
}
.btnnavi:hover {
background-color:rgba(0,110,255,0.7);
}
.btnnavi:active {
background-color:rgba(255,162,0,0.7);
}
.btnnavi.on:hover,
.btnnavi.on:active,
.on {
background-color: orange;
}
</style>
<script type="text/javascript">
$(document).ready(function () {
$('.btnnavi').click(function () {
$('.bodyTop .btnnavi').removeClass('on');
$(this).addClass('on');
});
});
</script>
</head>
<body>
<div class="bodyTop">
<button class="btnnavi" id="btnnavi-l" value="1">Главная</button>
<button class="btnnavi" value="2">Порядок работы</button>
<button class="btnnavi" value="3">Стоимость услуги</button>
<button class="btnnavi" value="4">Контакты</button>
<button class="btnnavi" value="5">Документы</button>
<button class="btnnavi" id="btnnavi-r" value="6">Информация</button>
</div>
</body>
</html>
|
Усилю нажим со стилями... :)
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<!--
<link rel="stylesheet" type="text/css" href="tmp.css" />
-->
<style type="text/css">
.btnnavi {
background-color:rgba(0,0,0,0.7);
height:90px;
width:15%;
color:white;
border-style:hidden;
border-bottom-left-radius:1px;/*for button transparency in opera*/
font-size:90%;
-webkit-transition-property:background-color, li;
-webkit-transition-duration: 1s, 1s;
-webkit-transition-timing-function: linear, ease-in;
-moz-transition-property:background-color, li;
-moz-transition-duration:1s;
-moz-transition-timing-function: linear, ease-in;
-o-transition-property:background-color, li;
-o-transition-duration:1s;
-o-transition-timing-function: linear, ease-in;
}
.btnnavi:first-child {
border-bottom-left-radius:15px;
border-top-left-radius:15px;
}
.btnnavi:last-child {
border-bottom-right-radius:15px;
border-top-right-radius:15px;
}
.btnnavi:hover {
background-color:rgba(0,110,255,0.7);
}
.btnnavi:active {
background-color:rgba(255,162,0,0.7);
}
.btnnavi.on:hover,
.btnnavi.on:active,
.on {
background-color: orange;
}
</style>
<script type="text/javascript">
$(document).ready(function () {
$('.btnnavi').click(function () {
$('.bodyTop .btnnavi').removeClass('on');
$(this).addClass('on');
});
});
</script>
</head>
<body>
<div class="bodyTop">
<button class="btnnavi" value="1">Главная</button>
<button class="btnnavi" value="2">Порядок работы</button>
<button class="btnnavi" value="3">Стоимость услуги</button>
<button class="btnnavi" value="4">Контакты</button>
<button class="btnnavi" value="5">Документы</button>
<button class="btnnavi" value="6">Информация</button>
</div>
</body>
</html>
|
Ооооо! Благодарю ! То, что требовалось. Пойду работу над ошибками делать. Спасибо огромное !
Понятно. А в варианте first(last)-child кроме того, что убирается лишний id есть преимущества ? И в .on { background-color: orange; } все-таки не orange a rgba(255,162,0,0.7), для прозрачности. И вдогонку еще вопрос : Почему в Опере прозрачность работает, только если указать border-bottom-left-radius:1px; Без этой строки, кнопки, которые не крайние не делаются прозрачными. Баг в опере ? |
| Часовой пояс GMT +3, время: 07:05. |