我有一些元素在悬停时切换子ul的显示(无/块)。不幸的是,我无法通过带有显示的CSS转换淡入淡出。使用不透明度也不起作用,因为悬停区域扩展到不透明度:0 ul,两者的组合(过渡不透明度,但仍然切换显示)似乎不起作用。
有没有办法通过Javascript截取显示更改,并让它在块和没有之间淡出?是否有其他建议(我试过一个高度:0 /自动切换,也没有正常工作)?在JS被禁用或其他什么的情况下,我更喜欢拦截方法而不是纯JS方法。
答案 0 :(得分:1)
如果我理解正确的话。假设:<div class="nav-container"><ul></ul></div>
。
您可以在父级上侦听悬停,因为它包含子级:
var parent = document.getElementsByClassName('nav-container')[0];
var connect = function (element, event, callback) {/* I think you */};
var disconnect = function (handle) { /* can find */};
var addClass = function (element, className) { /* these elsewhere. */};
var removeClass = function (element, className) { /* ... */};
var hoverHandle = connect(parent, 'hover', function (event) {
addClass(parent, 'hovered');
if (blurHandle) {
disconnect(blurHandle);
}
});
var blurHandle = = connect(parent, 'blur', function (event) {
removeClass(parent, 'hovered');
if (hoverHandle) {
disconnect(hoverHandle);
}
});
然后在CSS中:
.nav-container > ul {
display: none;
/* do fade out */
}
.nav-container.hovered > ul {
display: block;
/* do fade in */
}
如果你正在使用jQuery 1.7,那么这将成为:
var navContainers = $('.nav-container');
navContainers.on('hover', function () {
$(this).toggleClass('hovered');
});
navContainers.on('blur', function () {
$(this).toggleClass('hovered');
});