Подскажите, как можно реализовать такую вещь: ---------------------------------------------------------- Сайт визитка фирмы. Расположение блокв очень простое. 1.Над header-oм в верхнем левом углу - лого (узображение). 2.Header 3.Под Header-ом находится топ-меню (основной цвет черный). Нужно чтобы при нажатии на пункты меню (фон активного меню становится белым - реализовано!) менять цвет фона топ-меню, цвет фона footer и менять изображение лого
Масса способов. Можно реализовать средствами JavaScript: если у элементов есть ID - можно воспользоваться "голым" JS: Код (PHP): document.getElementById("name-of-element").click(function() { document.getElementById("logo").src="../images/logo2.png"; document.getElementById("menu-main").style.backgroundColor = '#ff0000'; document.getElementById("footer").style.backgroundColor = '#ff0000'; }); Если ID нет - лучше не выкобениваться и подключить библиотеку jQuery : Код (PHP): $(document).ready(function() { $("click-element").click(function() { $(".logo").css("background", "url('../images/logo2.png')"); $(".menu-main").css("background", "#ff0000"); $(".footer").css("background", "#ff0000"); }); });
A как прописывается код? В index.php. Но как именно указать конкретный элемент? можете пояснить на примере: вот так генерится меню: Код (PHP): <!-- Topmenu --> ►<div id="topmenu"> ▼<ul class="menu"> ► <li class="item-110 parent">...</li> ▼ <li class="item-111 cuрent active deepeр paрent"> <a href="/index.php/produkti">Produkti</a> ► <ul>...</ul> </li> ► <li class="item-112 parent">...</li> ► <li class="item-113 parent">...</li> ► <li class="item-147 parent">...</li> ► <li class="item-148">...</li> ► <li class="item-149">...</li> </ul> вот на активную вкладку "item-111 и надо повесить тригеры ------------------------------------------ а вот CSS: Код (PHP): /** Topmenu **/ #topmenu { margin: auto; width: 1000px; padding-left: 0px; font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif; font-weight: 500; font-size: 9pt; color: #fff; background: linear-gradient(#153828, #173124, #088958); overflow: auto; } #topmenu ul { float: right; padding: 0; padding-top: 8px; padding-bottom: 0px; margin: 0; list-style: none; } #topmenu li.active { background: linear-gradient(gray, white, white, white); color: #000; border-top-right-radius: 6px; border-top-left-radius: 6px; border-bottom-left-radius: - 6px; margin-bottom: 0px; } #topmenu li.active a { padding-top: 2px; padding-bottom: 3px; color: #5F5F5F; font-weight: 600; } #topmenu a { display: block; color: #fff; padding-top: 0px; padding-bottom: 0px; padding-left: 11px; padding-right: 11px; margin-left: 10px; margin-right: 10px; margin-bottom: 1px; text-decoration:none; text-transform: uppercase; } #topmenu a:hover { color: #c1c1c1; text-decoration: none; } #topmenu li { float: left; border-left: 1px solid #565656; } #topmenu li:first-child { border-left: 0px solid #000000; } пробовал так: Код (html): $(document).ready(function() { $("div#topmenu .item-113 parent").click(function() { $("#logo").css("background", "url('../images/powered_by.png')"); $("#topmenu").css("background", "#ff0000"); $("#copyright").css("background", "#ff0000"); }); }); но если честно, сути не понимаю
Товарищ, что Вы делаете?? Это же JavaScript, а не CSS))) Скрипты подключаются на страницу через вставку формата: Код (PHP): <script type="text/javascript"> ...код... </script> Самое простое - откройте файл шаблона index.php (templates/{название-шаблона}/index.php) и вставьте скрипт в область между тегами <head> и </head>. Если используете вариант с jQuery - не забудьте туда же вписать подключение самого файла библиотеки: Код (PHP): <script src="http://code.jquery.com/jquery-1.11.0.min.js" type="text/javascript"></script>
Вы как обычно, в своем "менторском" репертуаре. Не хотите помогать, не помогайте! Но форум сделан именно для этого. Здесь собираются именно неспециалисты. Кое какие основы я знаю. Непонятно, как прицепить тригеры изменения оформления на конкретный элемент меню, который находится в классе А именно <li class="item-111
Спасибо вам за ответ. Я так и делал, там же подключил библиотеку. Только взял готовую из другого шаблона и закинул в папку шаблона. Но не могу понять, как правильно указать нужные элементы. Пробовал по разному: Код (PHP): /** 1 **/ $(document).ready(function() { $("item-113").click(function() { $(".logo").css("background", "url('../images/logo2.png')"); $(".topmenu").css("background", "#ff0000"); $(".copyright").css("background", "#ff0000"); }); }); /** 2 **/ $(document).ready(function() { $("item-113").click(function() { $("logo").css("background", "url('../images/logo2.png')"); $("topmenu").css("background", "#ff0000"); $("copyright").css("background", "#ff0000"); }); }); /** 3 **/ $(document).ready(function() { $("item-113").click(function() { $("#logo").css("background", "url('../images/logo2.png')"); $("#topmenu").css("background", "#ff0000"); $("#copyright").css("background", "#ff0000"); }); }); /** 4 **/ <script type="text/javascript"> document.getElementByClass("item-113").click(function() { document.getElementById("logo").src="../images/logo2.png"; document.getElementById("topmenu").style.backgroundColor = '#ff0000'; document.getElementById("copyright").style.backgroundColor = '#ff0000'; }); /** 5 **/ jQuery(document).ready(function() { jQuery("item-113").click(function() { jQuery('.logo').css("background", "url('../images/powered_by.png')"); jQuery('.topmenu').css("background", "#ff0000"); jQuery('.copyright').css("background", "#ff0000"); }); }); может проблема в синтаксисе или неправильном указании начального элемента "item-113"....
Можете прочитать все мои сообщения: http://joomla-support.ru/search.php?searchid=680269 Я Вам желаю добра и просто реально проще освоить знакомство с HTML+CSS, и потом уже не совершать мелкие ошибки (вставка JS кода в CSS код): Все это бесплатно и понятно на 99%
Снова вы туда же... Ну неужели вы думаете, я не искал решения и не изучал вопрос... Просто я не могу понять сути, что у меня не работает ..... !? Или не могу получить элемент с помощью Jquery, или не работает селектор на элементе..... так генерится меню: Код (PHP): <!-- Topmenu --> ►<div id="topmenu"> ▼<ul class="menu"> ► <li class="item-110 parent">...</li> ▼ <li class="item-111 cuрent active deepeр paрent"> <a href="/index.php/produkti">Produkti</a> ► <ul>...</ul> </li> ► <li class="item-112 parent">...</li> ► <li class="item-113 parent">...</li> ► <li class="item-147 parent">...</li> ► <li class="item-148">...</li> ► <li class="item-149">...</li> </ul> вот фрагмент кода в index.php Код (PHP): <?php <head> <jdoc:include type="head" /> <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/system.css" type="text/css" /> <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/system/css/general.css" type="text/css" /> <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/css/template.css" type="text/css" /> <script type="text/javascript" src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/js/sfhover.js"></script> <?php if (($this->countModules('position-15') && $slides == 2) || ($slides == 1)): ?> <!-- Slides Scripts --> <?php if ($loadjquery): ?> <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script> <?php endif; ?> <script type="text/javascript" src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/js/slides.js"></script> <script type="text/javascript"> jQuery(document).ready(function(){ jQuery('#slides').slides({ play: 5000, pause: 2500, hoverPause: true<?php if ($slideseffect == 1): ?>, effect: 'fade', crossfade: true, fadeSpeed: 500<?php endif; ?> }); }); jQuery(document).ready(function() { jQuery("#slides").hover(function() { jQuery(".slides_nav").css("display", "block"); }, function() { jQuery(".slides_nav").css("display", "none"); }); }); $(document).ready(function() { $("div#topmenu .item-113 parent").click(function() { $("#logo").css("background", "url('../images/powered_by.png')"); $("#topmenu").css("background", "#ff0000"); $("#copyright").css("background", "#ff0000"); }); }); </script> <?php endif; ?> </head> что я делаю не так?
nikanors, не понимаю, что Вам не понятно. Такой вот каламбур Давайте на пальцах объясню... ПРИМЕР: КАК В ТЕОРИИ Есть 3 кнопки. При нажатии на кнопку первый раз - цвет фона меняется на красный. При повторном нажатии цвет фона меняется на исходный. КАК В РЕАЛЕ Код (html): <html> <head> ... <script src="http://code.jquery.com/jquery-1.11.0.min.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function() { $(".menu-top ul li a").click(function() { var link_bg = $(this).css("background"); var menu_img = $(".logo img").attr("src"); if (menu_img == "1.png") { $(".logo img").attr("src","2.png"); $(this).css("background", "#ff0000"); } else { $(".logo img").attr("src","1.png"); $(this).css("background", "#555"); } }); }); </script> ... </head> <body> <div class="logo"> <img src="images/logo_1.png" /> </div> <div class="menu-top"> <ul class="menu"> <li class="item-101"> <a href="one-page.html"></a> </li> <li class="item-102"> <a href="two-page.html"></a> </li> <li class="item-103"> <a href="three-page.html"></a> </li> </ul> </div> </body> </html> Логика такая! Может где и ошибся, давно не возился с JS...
все верно... на примерах все работает. А у меня нет! И не могу понять что не так Руководствовался этим: http://anton.shevchuk.name/javascript/jquery-for-beginners/ Как получить элемент с помощью jQuery? $(“#header”) – получение элемента с id=”header” $(“h3″) – получить все <h3> элементы $(“div#content .photo”) – получить все элементы с классом =”photo” которые находятся в элементе div с id=”content” $(“ul li”) – получить все <li> элементы из списка <ul> $(“ul li:first”) – получить только первый элемент <li> из списка <ul> в моем варианте, посмотрите что написано неверно. Мой код последний в блоке "head"
фу....!!! Заработало вот в таком варианте: Код (html): jQuery(document).ready(function() { jQuery("li.item-113").click(function() { jQuery("#logo").css("background", "url('../images/powered_by.png')"); jQuery("#topmenu").css("background", "#ff0000"); jQuery("#copyright").css("background", "#ff0000"); }); }); Всем большое спасибо!
У Вас библиотека подключается, только если переменная $loadjquery вернула TRUE. Что это за переменная и когда она что возвращает в Вашем шаблоне я не знаю... Попробуйте убрать условие IF для подключения библиотеки. Код (html): $(document).ready(function() { $("#topmenu ul li a").click(function() { $("#logo").css("background", "url('../images/powered_by.png')"); $("#topmenu").css("background", "#ff0000"); $("#copyright").css("background", "#ff0000"); }); });
Спасибо Вам Александр! Все работает! Но засада! Нажатие мыши на пункт меню, включает обработчик события и вызывает смену оформления но кратковременно (1 сек). Как сделать так, чтобы после селектора .click сохранялись полученные изменения? Не подскажите, где копать....!?
Если изменения на странице не сохраняются, значит отрабатывает ещё какой-то скрипт. Возможно, интегрирован код автоматического обновления страницы или её отдельных элементов через определённые промежутки времени. Подобное поведение может быть обоснованно требованиями безопасности при работе сайта. Открываете Firefox Firebug (пр.кл.мыши на странице - "Инспектировать элемент с помощью FIrebug), переходите на вкладку Сценарий и жмёте Ctrl + F5. Далее смотрите какие скрипты подключены на текущей странице. P.S.: кстати, по поводу кода, наверное, логичнее было бы так: Код (PHP): $(document).ready(function() { $(".menu-top ul li a").click(function() { var menu_img = $(".logo img").attr("src"); if (menu_img == "1.png") { $(".logo img").attr("src","2.png"); $(this).css("background", "#ff0000"); } else { $(".logo img").attr("src","1.png"); $(this).css("background", "#555"); } }); });
Частично вы правы. Но в моем случае замена оформления происходит у обьектов(#logo- лого в лэйере, #topmenu - меняет фон полосы меню, #copyright - меняет фон полосы внизу страницы), которые не являются элементами пункта меню, на который происходит клик. Пробовал по разному. Пытался смотреть сценарии работы скриптов через FB. Ставил свой скрипт в область элемента, переносил в "body", в самый низ документа. Пытался переопределить порядок выполнения js скриптов, т.е. расставить порядок вывода js файлов. Что-то типа: Код (PHP): function hook_js_alter(&$javascript) { $javascript['misc/jquery.js']['weight'] = 0; $javascript['script.js']['weight'] = 1; } не получилось ... Не хотелось бы сдаваться, но сам не могу понять, как увидеть тот обработчик, который сбрасывает мой js скрипт. Склоняюсь к тому, чтобы сделать еще один шаблон с измененным .css и по клику на пункте меню менять оформление таким образом
Склоняйтесь лучше к тому, чтобы самостоятельно верстать "чистые" шаблоны или пользоваться платными шаблонами с поддержкой пользователей и адекватной документацией от разработчика. А копаться в куче скриптов, часть которых вообще непонятно что делают - себе дороже, это просто не рентабельная трата времени.