jQuery lavaLamp, плохо себя ведущий с детьми <ul>
Я поигрался с http://nixboxdesigns.com/projects/jquery-lavalamp/ для меню навигации на новом сайте, который я строю, и оно прекрасно работает с минимальной суетой, потом я начал задаваться вопросом, могу ли я добавить некоторые Перейдите к меню и перейдите к настройке меню. Проблема, с которой я столкнулся, заключается в том, чтобы плагин lavaLamp игнорировал вложенные / дочерние ul / li.
Вы можете увидеть живой пример проблемы здесь: http://www.weleasewodewick.com/redesign2 - наведите курсор мыши на "Блог" li, а затем на подменю, которое появляется.
Я не буду публиковать полный исходный код для плагинов, так как он довольно длинный, но вы сможете просмотреть их прямо здесь:
плагин lavaLamp jQuery
http://www.weleasewodewick.com/redesign2/includes/jquery.lavalamp.js
Разметка меню
<nav>
<article>
<ul>
<li><a href="#Home" alt="#">Root</a></li>
<li><a href="#About" alt="#">Who?</a></li>
<li><a href="#Projects" alt="#">Projects</a></li>
<li><a href="#Resume" alt="#">Blog</a>
<ul class='children'>
<li class="page_item page-item-18"><a href="http://localhost/wordpress/?page_id=18" title="History">History</a></li>
<li class="page_item page-item-13"><a href="http://localhost/wordpress/?page_id=13" title="Our Company">Our Company</a></li>
<li class="page_item page-item-15"><a href="http://localhost/wordpress/?page_id=15" title="Our Staff">Our Staff</a></li>
</ul>
</li>
<li><a href="#Resume" alt="#">Contact</a></li>
</ul>
</article>
</nav>
Активация lavaLamp
$(function() { $('nav>article>ul').lavaLamp(); });
Буду очень признателен за ваш вклад в этом вопросе:)
** Назначение ** Последним местом отдыха этого макета является шаблон WordPress, поэтому вложенная структура меню в основном должна оставаться прежней.
Очень ценится Федед
3 ответа
Да, наконец-то у меня все получилось:) вот демо: http://jsbin.com/uyali3
Трудно решить эту задачу, используя <ul>
как дочерний узел, поэтому я изменил его на <div>
иди сам проверь код =)
ПРИМЕЧАНИЕ. В следующий раз, когда вы отправите вопрос, обязательно укажите правильный код / HTML. Я взял меня с собой 45 min
чтобы понять весь ваш код. Наконец я нашел решение вашей проблемы =)
Код:
<!DOCTYPE html>
<html>
<head>
<title> cssFix </title>
<meta charset=utf-8 />
<style type="text/css">
body { background : #2f2f2f; }
ul li {
display:inline;
float:left;
list-style-type:none;
margin-right:10px;
position:relative;
z-index:5;
}
ul li.backLava {
-moz-border-radius :6px;
background:none repeat scroll 0 0 #009912;
}
ul li a {
color:#B9B9B9;
display:block;
font: bold 14px Arial;
padding:17px 10px 6px;
position:relative;
text-decoration:none;
text-shadow:0 1px 0 #38302F;
}
ul li a:hover {
color:#ff0;
font-size:14px;
}
ul li a:active {
color:#FFFFFF;
}
.children {
background-color:#333333;
left:-999em;
list-style:none outside none;
min-width:100px;
position:absolute;
}
li:hover .children {
-moz-border-radius:6px 6px 6px 6px;
background:none repeat scroll 0 0 rgba(0, 0, 0, 0.4);
left:auto;
margin:0;
padding:10px;
}
</style>
</head>
<body>
<ul style="position: relative;" class="ulclass">
<li class="selectedLava"><a alt="#" href="#Home">Root</a></li>
<li><a alt="#" href="#About">Who?</a></li>
<li><a alt="#" href="#Projects">Projects</a></li>
<li>
<a alt="#" href="#Resume">Blog</a>
<div class="children">
<span><a href="#">History</a></span>
<span><a href="#">Our Company</a></span>
<span><a href="#">Our Staff</a></span>
</div>
</li>
<li><a alt="#" href="#Resume">Contact</a></li>
</ul>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" ></script>
<script type="text/javascript" src="http://www.weleasewodewick.com/redesign2/includes/jquery.lavalamp.js" ></script>
<script type="text/javascript" >
$(function() {
$('ul').lavaLamp();
});
</script>
</body>
</html>
У меня тоже был такой же вопрос, но я не хотел изменять шаблоны WordPress:
Сначала я подумал о добавлении класса "noLava" к каждому <li>
с глубиной> 1, поэтому я попытался расширить класс Уокера с помощью пользовательского, но безуспешно.
Затем я начал модифицировать плагин lqualamp jquery, и, попробовав весь день, нашел решение здесь, поэтому я изменил его, как показано ниже, и он работает как шарм:)
{find `var $li = jQuery('li[class!=noLava]', this);` and replace with:}
//var $li = jQuery('li[class!=noLava]', this); //default one
//by Paolo Bergantino, via https://stackru.com/questions/965816/what-jquery-selector-excludes-items-with-a-parent-that-matches-a-given-selector/965962#965962
jQuery.expr[':'].parents = function(a,i,m){
return jQuery(a).parents(m[3]).length < 1;
};
var $li = jQuery('li', this).filter(':parents(.children, .sub-menu)'); //for worpress :) by lelebart
Возможно, лучшее решение - сохранить исходное поведение и добавить это.
Редактировать: [онлайн демо]
Я раздвоил плагин LavaLamp и добавил опцию "hoverTarget". Он использует элемент внутри элемента "target" для обнаружения наведения. (по умолчанию: "а")
Это устраняет проблемы с дочерними списками.
получите это здесь: GitHub