通过悬停另一个元素使元素可见(没有:hover-property)

Posted

技术标签:

【中文标题】通过悬停另一个元素使元素可见(没有:hover-property)【英文标题】:Making an element visible by hovering another element (without :hover-property) 【发布时间】:2013-01-22 20:23:56 【问题描述】:

好的,问题来了:

我有这三个 DIV:

<div id="gestaltung_cd"></div>
<div id="gestaltung_illu"></div>
<div id="gestaltung_klassisch"></div>

...而这三个 DIV——它们是不可见的 (display:none;)——位于页面上完全不同的位置:

<div id="mainhexa1"></div>
<div id="mainhexa2"></div>
<div id="mainhexa3"></div>

我想做的是: 如果我悬停“gestaltung_cd”,我想让“mainhexa1”可见,如果我悬停“gestaltung_illu”,我想让“mainhexa2”可见,依此类推……

如您所见,三个不可见的 DIV 不是前三个 DIV 的子元素……所以在这种情况下,":hover" 是不可能的。有没有简单的方法在 JQuery 中做到这一点?

谢谢, 乔辰

【问题讨论】:

你试过使用jQuery的hover函数吗? 对不起,我忘了说我对JQuery不是很熟悉......你知道怎么做吗? 【参考方案1】:

您可以使用兄弟选择器。只要 div 共享同一个父级,您仍然可以通过悬停影响它们

DEMO

生命密码:

#gestaltung_cd:hover ~ #mainhexa1,
#gestaltung_illu:hover ~ #mainhexa2,
#gestaltung_klassisch:hover ~ #mainhexa3 
    display: block;

【讨论】:

也许你应该精确的兼容性? 哦,我还以为是后来到IE的。因此,我的评论无关紧要。【参考方案2】:

使用jQuerys的悬停功能,像这样:

$('#gestaltung_cd').hover(function() 
    $('#mainhexa1').toggle();
);

(如果不想在模糊时隐藏 div,则将 toggle() 更改为 show())

【讨论】:

【参考方案3】:

使用 jQuery 的hover 函数:

var divs = 
   cd:        'mainhexa1',
   illu:      'mainhexa2',
   klassisch: 'mainhexa3'
;
$('[id^=gestaltung]').hover(function() // selects all elements whose id starts with gestaltung
   $('#'+divs[this.id.slice('gestaltung_'.length)]).toggle();
);

请注意,在开启者和开启元素之间建立某种关系可能更容易,例如类或其他属性(如 nnnnnn 的回答)。

【讨论】:

【参考方案4】:

这是一个如何执行第一个的示例,您只需对具有相关 ID 的其他两个执行相同操作即可。

$("#gestaltung_cd").hover(
function () 
    $("#mainhexa1").show();
,
function () 
    $("#mainhexa1").hide();

);

【讨论】:

【参考方案5】:

我建议你在前三个 div 中添加一个属性,指定悬停时显示哪个 div:

<div id="gestaltung_cd" data-maindiv="mainhexa1"></div>
<div id="gestaltung_illu" data-maindiv="mainhexa2"></div>
<div id="gestaltung_klassisch" data-maindiv="mainhexa3"></div>

这样,您只需使用.hover() 方法即可处理悬停时的显示/隐藏:

$("div[data-maindiv]").hover(function() 
    $("#" + $(this).attr("data-maindiv") ).show();
,
function() 
    $("#" + $(this).attr("data-maindiv") ).hide();
);

演示:http://jsfiddle.net/GFMQR/

【讨论】:

【参考方案6】:
$("#gestaltung_cd").hover(function(
    $("#mainhexa1").css( "visibility": "visible" );
, function() 
    //Your hover out function
);

【讨论】:

【参考方案7】:

如果您将每个 div 块包装在一个容器中,您可以通过索引匹配它们,这将使代码无论有多少 div 都可以工作。像这样的:

<div class="gesaltung-container">
    <div id="gestaltung_cd">gestaltung_cd</div>
    <div id="gestaltung_illu">gestaltung_illu</div>
    <div id="gestaltung_klassisch">gestaltung_klassisch</div>
</div>
<div class="mainhexa-container">
    <div id="mainhexa1">mainhexa1</div>
    <div id="mainhexa2">mainhexa2</div>
    <div id="mainhexa3">mainhexa3</div>
</div>
$('.gesaltung-container div').hover(
    function () 
        $('.mainhexa-container div').eq($(this).index()).show();
    ,
    function () 
        $('.mainhexa-container div').eq($(this).index()).hide();
    
);

Example fiddle

【讨论】:

【参考方案8】:

只是为了记录......

您可以只使用 CSS 和 html(不使用 javascript)来实现您想要的效果,但是您必须将元素放置在彼此跟随的位置并在 CSS 中使用 + 选择器。类似的东西:

HTML

<div id="gestaltung_cd"></div>
<div id="mainhexa1"></div>
<div id="gestaltung_illu"></div>
<div id="mainhexa2"></div>
<div id="gestaltung_klassisch"></div>
<div id="mainhexa3"></div>

CSS

div#gestaltung_cd:hover + div#mainhexa1 
   display:block;

div#gestaltung_illu:hover + div#mainhexa2 
   display:block;

div#gestaltung_klassisch:hover + div#mainhexa3 
   display:block;

您可以查看演示 http://tinkerbin.com/KP17XUgq

【讨论】:

您可以在不将元素彼此跟随的情况下做到这一点。检查我的答案,它使用~ 兄弟选择器 是的;)你也是对的。我在发布我的答案后几秒钟就看到了你的答案。虽然在生产中我使用+,因为我没有指定 div ids 了解+ 的工作原理很有用,但请注意,OP 明确指出隐藏的 div 位于“页面上完全不同的位置”。

以上是关于通过悬停另一个元素使元素可见(没有:hover-property)的主要内容,如果未能解决你的问题,请参考以下文章

浏览器事件:当您使元素可见(并且鼠标在其上)时,不会发生鼠标悬停]]

检查仅在鼠标悬停/输入其他元素时出现的元素

悬停时可见元素,但单击时不可见

根据淘汰赛中另一个元素的值使一个元素可见

使元素无法操纵可见性

元素背面没有鼠标事件