Вертикальное скользящее/переключаемое меню

Я хотел бы использовать вертикальное скользящее/переключаемое меню, см. мой код ниже, на данный момент меню переключается только при нажатии на знак +, см. код ниже.

Я пытаюсь найти способ, когда вы нажимаете на название категории, например, «Сообщения», и открывается подменю (та же функциональность с +), и страница переходит на страницу «Сообщения». И когда вы нажимаете на знак +, функция и страница остаются прежними.

Как я могу настроить эту задачу? Ваша помощь/предложение приветствуется.

Благодарю вас!

<html>
<head>
<style type="text/css">
body{background:#CCC;}
#container{margin:0 auto; background:white; border:1px solid #999; width:400px;       padding:20px; -moz-border-radius:10px;-webkit-border-radius:10px;  overflow:hidden;}
#menu {text-align:left;}
/*Toggle Area*/
#menu .toggle {float:right;width:9px; padding:5px; cursor:pointer; border-top:1px     solid white; border-left:1px solid #E0E0E0; color:#999;}
#menu ul.navmenu li:first-child .toggle{border-width:0 0 0 1px;}
/*Menu Setup*/
#menu ul{padding:0; margin:0; width:150px;}
#menu ul ul{border:1px solid #CCC;overflow:hidden;}
#menu ul.navmenu li {margin:0; list-style:none;float:left;}
#menu ul.navmenu li li {float:none;}
/*Links*/
#menu ul.navmenu a, #menu ul.navmenu a:visited {text-decoration:none; padding:5px; display:block; color:#008FDD;}
#menu ul.navmenu ul.submenu a:hover{background:#FFF4D2; color:#333;}
/*Heading Outer div*/
#menu ul.navmenu .menutop{border:1px solid #CCC; border-width:0 1px; overflow:hidden; width:150px; background:#F9F9F9; }
/*Header Links*/
#menu ul.navmenu .menutop a{width:120px;float:left;margin:0 0 1px 0; border-top:1px solid white;}
/*Header Link Hover*/
 #menu ul.navmenu .menutop a:hover{color:#333;}
/*Removes white border for the first header*/
 #menu ul.navmenu li:first-child .menutop a {border-width:0px;}
/*Single Menu Width Fix*/
#menu ul.navmenu .menusingle a{width:140px;}
/*Border Radius and Special Border Width*/
#menu ul.navmenu li:first-child .menutop{border-width:1px 1px 0 1px; -moz-border-radius:5px 5px 0 0;-webkit-border-top-left-radius:5px;-webkit-border-top-right-radius:5px;}
#menu ul.navmenu li:last-child .menutop{border-width:0px 1px 1px 1px; -moz-border-radius:0 0 5px 5px; -webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;}
 #menu ul.navmenu li:last-child ul.submenu{-moz-border-radius:0 0 5px 5px;-webkit-border-bottom-left-radius:5px;-webkit-border-bottom-right-radius:5px;}
#menu ul.navmenu li:last-child .menutop-open{-moz-border-radius:0;-webkit-border-radius:0px; border-width:0 1px;} 
</style>
<script src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"   type="text/javascript">

</script>



<script type="text/javascript">
$(document).ready(function(){
hideMenus();

$('.toggle').click(function(){
    var menu = $(this);
    hideMenus();

    if (menu.hasClass('toggle-open')) {     
        menuHide(menu);
    }else{
        menuShow(menu);
    }
});
});
 function hideMenus(){
$('.toggle').each(function(){
    menuHide($(this));
});
}

function menuHide(menu){ 
menu.removeClass('toggle-open').addClass('toggle-closed').empty('').append('+').parents('li').children('ul').slideUp(250); 
menu.parent('.menutop').removeClass('menutop-open').addClass('menutop-closed'); 
} 
function menuShow(menu){ 
menu.parent('.menutop').removeClass('menutop-closed').addClass('menutop-open'); 
menu.removeClass('toggle-closed').addClass('toggle-open').empty('').append('–').parents('li').children('ul').slideDown(250); 
}



</script>
</head>

<body>
<div id="container">
<div id="menu">
<ul class="navmenu">
<li><div class="menutop"><a href="#">Posts</a><div class="toggle">+</div></div>
 <ul class="submenu">
   <li><a href="#">Add New</a></li>
   <li><a href="#">Tags</a></li>
 </ul>
</li>
<li><div class="menutop"><a href="#">Pages</a><div class="toggle">+</div></div>
 <ul class="submenu">
   <li><a href="#">Add New</a></li>
   <li><a href="#">Edit</a></li>
 </ul>
</li>
<li><div class="menutop menusingle"><a href="#">Comments</a></div></li>
<li><div class="menutop"><a href="#">Users</a><div class="toggle">+</div></div>
 <ul class="submenu">
   <li><a href="#">Manage</a></li>
   <li><a href="#">Add New</a></li>
   <li><a href="#">Profile</a></li>
 </ul>
</li>
</ul>
</div></div>
</body>
</html>

person grumpypanda    schedule 12.12.2011    source источник
comment
Итак, вы хотите нажать на название категории вместо +?   -  person jQuerybeast    schedule 12.12.2011
comment
Похоже, что класс toggle используется для выбора элемента, который переключает подменю.   -  person Jared Farrish    schedule 12.12.2011
comment
Привет, JQuerybeast, спасибо за быстрый повтор. Я хотел бы нажать на имя, а также знак +. Поэтому, когда вы нажимаете на название категории, вы переходите на страницу с названием категории и перемещаете следующее меню вниз. Когда вы нажимаете только на знак +, следующее меню опускается, но страница остается на той же странице. Я надеюсь, что это имеет смысл. Спасибо. С :)   -  person grumpypanda    schedule 12.12.2011
comment
Привет, Джаред, спасибо за твой ответ. Любой код/предложения о том, как я нацеливаю этот класс переключения? Большое спасибо, С   -  person grumpypanda    schedule 12.12.2011


Ответы (1)


Это код, который я использовал, чтобы сделать именно это, за исключением того, что я использовал изображения стрелок вместо + и -, но вы должны иметь возможность изменить его. Надеюсь, поможет!

Изменить: я поместил приведенный ниже код в JSFiddle, чтобы вы могли его попробовать: http://jsfiddle.net/CrxAg/3/

HTML:

<div id="menu">
    <div class="submenublock" id="submenu1"><h3>Category1</h3>
        <ul>
            <li><a href="page.html">option1</a></li>
            <li><a href="page.html">option2</a></li>
        </ul>
     </div>
    <div class="submenublock" id="submenu2"><h3>Category2</h3>
        <ul>
            <li><a href="page.html">option1</a></li>
            <li><a href="page.html">option2</a></li>
        </ul>
     </div>
</div>

JS:

$(document).ready(function(){
    $('div.submenublock > ul').hide();  
    $("div.submenublock > h3").css("background", "url(images/menuarrowdown.gif) no-repeat right bottom");

    $('div.submenublock > h3').click(function() {
        $(this).next().slideToggle('fast',function(){
            //set arrow depending on whether menu is shown or hidden
            if ($(this).is(':hidden')) {
                $(this).prev().css("background", "url(images/menuarrowdown.gif) no-repeat right bottom"); 
            } else {
                $(this).prev().css("background", "url(images/menuarrowup.gif) no-repeat right bottom"); 
            }
            return false;
        }); 
   });

    /* change appearance of h3 element on hover to make it look like a link */
    $('div.submenublock > h3').hover(over, out);
    function over(event) {
        $(this).find("a").css("color", "#663");
        $(this).css("cursor", "pointer");
    }
    function out(event) {
        $(this).find("a").css("color", "");
        $(this).css("cursor", "default");
    } 
    /*end hover code*/
});
person FluffyKitten    schedule 12.12.2011
comment
Привет Fluffykitten, большое спасибо за редактирование. Я попробую и дам вам знать, как я иду. Большое спасибо за ваш ответ. С :) - person grumpypanda; 12.12.2011
comment
Нет проблем. Просто чтобы вы знали, что я дал неверную ссылку на JSFiddle, если вы уже пробовали ее, я обновил ее сейчас, указав правильную (jsfiddle.net/CrxAg/3) - person FluffyKitten; 12.12.2011
comment
Я заметил, что вы отредактировали свой пост, включив в него свой код, поэтому он работает с вашим кодом: jsfiddle.net /MCLFt/1 Это не совсем то, что вам нужно — другие категории не закрываются при открытии одной из них. Кроме того, граница в последнем меню немного смещена, возможно, это связано с идентификаторами, которые я дал каждому меню, но вы будете знать свой CSS лучше, чем кто-либо. - person FluffyKitten; 12.12.2011
comment
Привет, котенок, я отредактировал свой пост и убежал от вопроса. Я попробовал код блока подменю, который вы мне только что дали, ура, он прекрасно работает, спасибо. Это лучше, чем учебник, который я получил. Только один вопрос, я не знаю, как легко это можно сделать. Я помещаю ссылку на название категории, например, категорию 1 (которая является h3), когда люди нажимают на категорию 1, они переходят на страницу, возможно ли сделать так, чтобы тег ‹a› расширялся до изображения стрелки, в то время как пустое между категорией 1 и стрелкой просто расширяет меню. Какие-либо предложения? Большое спасибо за Вашу помощь!! - person grumpypanda; 13.12.2011
comment
Привет, котенок, большое спасибо за вашу помощь и последующие действия, так мило с вашей стороны за то, что вы сделали для меня! Я обязательно приму ваш ответ, у меня только что возник вопрос по вашему редактированию2, я пробовал ваш код, но он превращает название категории и изображение стрелки в ссылку, и меню больше не скользит. Я использую ваш код jsfiddle.net/CrxAg/3 и изменил его так, чтобы он как боковая панель anz.com/personal/bank-accounts, но застрявшая на сделать пустую часть между названием категории и изображением стрелки. Можно ли сделать пустую часть той же ссылкой, что и название категории? Спасибо. :) - person grumpypanda; 13.12.2011
comment
На самом деле, если сделать пробел между названием категории и изображением стрелки в качестве ссылки на страницу слишком сложно, не беспокойтесь. Ваше меню - jsfiddle.net/CrxAg/3 работает великолепно. Я в восторге от помощи, которую вы мне оказали. Приятно видеть, что есть такие замечательные замечательные разработчики, как вы, надеюсь, однажды я смогу помочь другим, как вы. Большое спасибо, Пушистик, очень классное/милое имя. Желаю хорошей недели. Огромное спасибо! С :) - person grumpypanda; 13.12.2011
comment
Спасибо Сэм! Извините, я только что понял, что то, что я дал вам, совершенно не подходит для того, о чем вы просили... это работает в тех случаях, когда в меню нет подменю. Какова структура рубрики вашей категории на данный момент? Если вы используете фоновое изображение для стрелки в теге h3, тогда код должен работать так, как он был, но поскольку это не так, я предполагаю, что у вас есть другой div или что-то в этом роде. Можете ли вы сказать мне, что у вас сейчас есть для блока категорий, например. ‹div class=submenublock id=submenu2›‹h3›Категория 2‹/h3› - person FluffyKitten; 13.12.2011
comment
Только что увидел ваш 2-й комментарий ... нет, совсем не сложно сделать полный блок ссылкой, в основном вам просто нужно вызвать функцию щелчка на содержащем элементе вместо h3, но если вы покажете мне структуру, я буду сможет лучше объяснить. И я рада, что могу помочь! - person FluffyKitten; 13.12.2011
comment
Большое спасибо Котенок, это html-код в productmenu div ‹div class=submenublock id=submenu1›‹h3›‹a href=#›Category 1‹/a›‹/h3› ‹ul class=second_level›‹li ›‹a href=page.html›Вариант 1‹/a›‹/li›‹li›‹a href=page.html›Вариант 2‹/a›‹/li› ‹/ul› ‹/div› и повторите это для всего меню. Я сделал несколько стилей CSS, чтобы соответствовать внешнему виду anz.com/personal/bank-accounts и я использую ваш JS из jsfiddle.net/CrxAg/3 Большое спасибо . Я должен покинуть форум сейчас, но вернусь первым делом завтра. Спасибо огромное!!!!:) - person grumpypanda; 13.12.2011
comment
Хммм... Не понимаю, почему это не сработает. Не могли бы вы добавить html, js и css для меню в jsfiddle.net, чтобы я мог увидеть все это в действии? Так было бы легче обнаружить проблему! Поговорим завтра :-) - person FluffyKitten; 13.12.2011
comment
Привет, котенок, я только что загрузил ваше отличное меню на jsFiddle - jsfiddle.net/VEg5e, вы можете видеть только имена категорий являются ссылками. Просто чтобы уточнить, чего я пытаюсь достичь, я бы хотел, чтобы имена категорий и промежуток до изображения стрелки были ссылкой на страницу, а также выполняли скользящее меню, и изображение стрелки будет работать одинаково. Пример см. на боковой панели: anz.com/personal/bank-accounts Пожалуйста, дайте мне знать если у вас есть какие-нибудь вопросы. Большое спасибо за вашу замечательную помощь, я очень ценю! :) - person grumpypanda; 13.12.2011
comment
На самом деле это уже так работает! Просто курсор не меняется при наведении мыши, потому что это элемент h3, а не элемент a. Я отредактировал свой пост, добавив код js, чтобы изменить внешний вид h3 и сделать его похожим на ссылку, и вы можете попробовать это здесь: jsfiddle.net/VEg5e/3 - person FluffyKitten; 13.12.2011
comment
В качестве альтернативы для этого примера вы можете сделать это только с помощью CSS! Если вы добавите display:block; к блоку подменю a, это позволит увеличить кликабельную область до ограничений содержащего элемент h3. См. это здесь: jsfiddle.net/VEg5e/4 Было бы лучше, если бы вы переместили заполнение из вместо этого h3 на h3 a. Это работает в этом примере, но не будет работать во всех ситуациях, если элементы a не могут расширяться до полного размера блока h3. - person FluffyKitten; 13.12.2011
comment
Спасибо, Котенок, я отпущу тебя очень скоро, я знаю, что ты помог мне более чем достаточно. Что касается вашего jsfiddle.net/VEg5e/3, я понимаю, что цвет изменился, но пробел по-прежнему не является ссылкой, как название категории, можно ли также сделать пробел ссылкой? Часть /*добавила это*/ $(this).css({'color' : '#666633', cursor, pointer}); вышла синтаксическая ошибка. Огромное спасибо! - person grumpypanda; 14.12.2011
comment
Гэп у меня работает... странно. Проверьте это: jsfiddle.net/VEg5e/9 Я изменил css, чтобы упростить посмотреть, что происходит. Я добавил красную рамку вокруг h3, и если я щелкну где-нибудь в этом поле, меню развернется. Я делаю фон привлекательным желтым оттенком :) раз это ссылка. Что это дает вам? Я удалил код с добавлением этого комментария - он был закомментирован и не работал (как вы обнаружили!). Код, который вам нужен, находится в конце — я добавил комментарий, чтобы сделать его более очевидным. - person FluffyKitten; 14.12.2011
comment
Я, должно быть, сбиваю вас с толку, извините. Вот что я видел: добавленный вами код js меняет цвет всего пространства имен категорий на желтый при наведении курсора, но желтый цвет не является ссылкой — в данном случае ‹a href=#›. Потому что ссылка # появляется только в нижней части левого угла, когда я навожу курсор на названия категорий, но ссылка не появляется в углу, когда я навожу курсор на желтый. Можно ли сделать желтую ссылку (#) той же ссылкой, что и названия категорий? Я надеюсь, что это имеет смысл. Спасибо! :) - person grumpypanda; 14.12.2011
comment
Хорошо, я немного смущен! Если вы нажмете на желтый значок за пределами названия категории, он не активирует ссылку и не развернет меню? По умолчанию только элементы a действуют как ссылки, поэтому мы должны кодировать эту функциональность для любых других элементов, таких как h3. Другими словами, элемент h3 обычно не меняет цвет, статус или курсор, поэтому мы должны сообщить ему об этом. В нашем коде мы только сообщаем ему об изменении цвета и курсора при наведении курсора мыши, мы не сообщаем ему об изменении статуса. Но это не значит, что это не ссылка, она по-прежнему действует как ссылка, потому что мы сказали ей сделать это в функции клика. Имеет ли это смысл? - person FluffyKitten; 14.12.2011
comment
Привет, котенок, когда я нажимаю на желтый значок за пределами названия категории, он расширяет меню, но не активирует ссылку. Я думаю, что для того, чтобы сделать желтую активную ссылку, но не изображение стрелки, мне, возможно, придется изменить всю структуру страницы, поэтому мне лучше придерживаться исходного кода. Большое спасибо за все ваши подробные объяснения, последующие действия и помощь. Вы были очень хороши для меня, я не могу сказать вам достаточно благодарности. FluffyKitten рулит! Спасибо! :) - person grumpypanda; 14.12.2011
comment
Ооо... Я собирался сказать, что ссылки нет, но вы планируете сделать текстовую категорию 1 ссылкой на страницу, но вне этого расширить меню? Если так - извините, я неправильно понял! Итак, вы хотите, чтобы расширялась только стрелка, а остальная часть окна переходила на страницу? Да, это тоже возможно... дайте мне знать, если это то, что вам нужно, и я могу сделать это быстро! - person FluffyKitten; 14.12.2011
comment
Ребята, это слишком затянулось. Пожалуйста, рассмотрите возможность перехода в чат SO! - person markus; 14.12.2011
comment
@SamIAm, взгляните на это и убедитесь, что это то, что вам нужно: jsfiddle.net/VEg5e/12 Удачи! Если я вам понадоблюсь, я буду в чате javascript в течение следующих 30 минут или около того: chat.stackoverflow.com/rooms /17/javascript Я никогда раньше им не пользовался, так что... не знаю, как вы меня найдете :-) - person FluffyKitten; 14.12.2011
comment
Как сказал @markus, рассмотрите возможность проведения расширенных обсуждений в чате переполнения стека. Спасибо. - person Sampson; 14.12.2011