我是jQuery的新手,我正试图解决导航问题。我构建了一个包含许多嵌套列表的垂直菜单。它纯粹是CSS,但我的客户要求当你不再盘旋它时,当前打开的子菜单会保持打开一秒左右。
以下是我正在处理的网站:http://dev.musgraveagencies.com/
这是他们目前拥有的网站,以及他们希望菜单延迟的方式:http://www.musgraveagencies.com/
我相信我可以使用jQuery来实现这一目标,但如果没有启用Javascript,我希望网站能够正常工作。
编辑:感谢大家的帮助!这是下面的最终代码。
我的HTML:
<body class="nojs">
<div id="nav">
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">Development Projects</a>
<ul>
<li><a href="#">Design Build</a>
<ul>
<li><a href="#">Interior Design</a>
<ul>
<li><a href="#">Project Example</a></li>
</ul>
</li>
<li><a href="#">Project Example 1</a></li>
<li><a href="#">Project Example 2</a></li>
<li><a href="#">Project Example 3</a></li>
</ul>
</li>
<li><a href="#">Industrial</a>
<ul>
<li><a href="#">Project Example 1</a></li>
<li><a href="#">Project Example 2</a></li>
<li><a href="#">Project Example 3</a></li>
<li><a href="#">Project Example 4</a></li>
</ul>
</li>
<li><a href="#">Residential</a></li>
<li><a href="#">Neighbourhood</a></li>
</ul>
</li>
<li><a href="#">Contact</a></li>
</ul>
</div>
</div>
</body>
我的CSS:
#nav {
width: 156px;
font: 9pt 'TeXGyreScholaRegular', Arial, sans-serif;
text-align: left;
}
#nav ul a {
color: #fff;
display: block;
overflow: auto;
line-height: 19pt;
text-indent: 2px;
}
#nav ul a:hover {
color: #fff;
text-decoration: none;
}
#nav ul li:hover {
background: #484848;
}
#nav ul {
width: 156px;
}
#nav ul li {
list-style: none;
background: #000;
position: relative;
z-index: 100;
}
#nav ul li ul {
position: absolute;
width: 156px;
top: 0;
left: 156px;
}
body.nojs #nav ul li ul {
display: none;
}
body.nojs #nav ul li:hover > ul {
display: block;
}
我的jQuery:
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.hoverIntent.minified.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#nav ul li ul').hide();
$('body').removeClass('nojs');
var config = {
sensitivity: 2,
interval: 200,
timeout: 700,
};
var animating = false;
$('#nav ul li').hoverIntent(
function () {
animating = true;
$('> ul', this).fadeIn(100, function() {
animating = false;
});
},
function () {
animating = true;
$('> ul', this).delay(400).fadeOut(200, function() {
animating = false;
});
});
});
</script>
答案 0 :(得分:1)
你可以在使用@ thecl.com看到它,它也有助于ie8 / 7中的问题,因为无法从父锚转到子导航。
答案 1 :(得分:1)
尝试这个小提琴:http://jsfiddle.net/hamidlab/adadv/
我删除了所有顶级和子级别的类,并使用>
来定位直接子级。
js也做了一点改动(你不需要js,如果你不关心fadeIn效果)
$('#nav ul li').hover(function(){
$(' > ul', this).stop(true, true).fadeIn();
}, function(){
$(' > ul', this).hide(0);
});
CSS中的一些变化:http://jsfiddle.net/hamidlab/adadv/1/
注意: 对于这个小东西,你不需要插件。 我觉得最好不要使用插件,并尽可能保持简单和干净。
答案 2 :(得分:1)
代码的问题是,您正在使用jQuery触发转换(淡入淡出),但会立即使用CSS隐藏元素。所以这种情况没有延迟。
您可以将transition-delay
或animation-delay
属性与CSS3一起使用,但IE中不支持这些属性。所有其他人都支持他们,但不支持大多数版本。
transition-delay: 2s;
-moz-transition-delay: 2s; /* Firefox 4 */
-webkit-transition-delay: 2s; /* Safari and Chrome */
-o-transition-delay: 2s; /* Opera */
所以,我认为你应该使用setTimeout()
方法或jQuery的delay()
方法将大部分CSS(悬停伪类)迁移到javascript / jQuery并使用延迟隐藏/显示。
<强>更新强>
因为您担心在用户的浏览器中没有启用javascript;没有javascript和CSS延迟相关属性,我认为不可能延迟HTML元素外观的更改。
所以你可以做的是;
<noscript>
标记用于非JavaScript内容和仅限CSS的菜单,并将其放入其中。这样您就可以让两个用户满意。