我正在尝试在鼠标悬停时制作节目内容,并让鼠标悬停在列表上时保持可见,因为我打算在那里放一个按钮,但是当我悬停时,隐藏的内容因某些原因而保持弹跳。
$('li.employers').mouseover(function () {
$('.employer_content').show("slow");
$(this).addClass("bluehover");
});
$('li.employers').mouseout(function () {
$('.employer_content').hide("fast");
$(this).removeClass("bluehover");
});
<li class="employers">
<div>employer</div>
<div class="employer_content">some content.</div>
</li>
<li class="court">
<div>court</div>
<div class="court_content">some content.</div>
</li>
答案 0 :(得分:11)
您可以使用仅限CSS 来显示/隐藏内容。
您可以利用CSS中的:hover
类。
.whatwedo {
padding: 20px;
color: #fff;
max-width: 480px;
margin: 0 auto;
}
ul li {
list-style-type: none;
}
ul > li {
background-color: #08588c;
display: inline-block;
width: 100%;
cursor: pointer;
float: left;
max-width: 100px;
padding: 10px;
}
.whatwedo {} ul.wwd_list {
padding: 0;
margin: 0;
}
.employer_content,
.court_content,
.companies_content,
.labor_content {
display: none;
clear: right;
}
.bluehover {
background-color: #01395d;
}
.content {
padding-top: 10px;
display: none;
}
.wwd_list li:hover .content {
display: block;
}
&#13;
<div class="whatwedo">
<ul class="wwd_list">
<li class="employers">
<div>employer</div>
<div class="content">some content.</div>
</li>
<li class="court">
<div>court</div>
<div class="content">some content.</div>
</li>
<li class="companies">
<div>companies</div>
<div class="content">some content.</div>
</li>
<li class="laborunion">
<div>labour union</div>
<div class="content">some content.</div>
</li>
</ul>
</div>
&#13;
如果仍然想要使用jQuery:
mouseover
事件,而是使用mousein
hover
代替mousein
和mouseout
stop()
停止以前的动画
$('.wwd_list li').hover(function() {
$(this).find('div.content').stop().show("slow");
$(this).addClass("bluehover");
}, function() {
$(this).find('div.content').stop().hide("slow");
$(this).removeClass("bluehover");
});
&#13;
.whatwedo {
padding: 20px;
color: #fff;
max-width: 480px;
margin: 0 auto;
}
ul li {
list-style-type: none;
}
ul > li {
background-color: #08588c;
display: inline-block;
width: 100%;
cursor: pointer;
float: left;
max-width: 100px;
padding: 10px;
}
.whatwedo {} ul.wwd_list {
padding: 0;
margin: 0;
}
.employer_content,
.court_content,
.companies_content,
.labor_content {
display: none;
clear: right;
}
.bluehover {
background-color: #01395d;
}
.content {
display: none;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<div class="whatwedo">
<ul class="wwd_list">
<li class="employers">
<div>employer</div>
<div class="content">some content.</div>
</li>
<li class="court">
<div>court</div>
<div class="content">some content.</div>
</li>
<li class="companies">
<div>companies</div>
<div class="content">some content.</div>
</li>
<li class="laborunion">
<div>labour union</div>
<div class="content">some content.</div>
</li>
</ul>
</div>
&#13;
答案 1 :(得分:7)
您可以使用hover
代替mouseover
和mouseout
。像这样:
$('li.employers').hover(function () {
$('.employer_content').show("slow");
$(this).addClass( "bluehover" );
console.log('mouse in');
}, function() {
$('.employer_content').hide("slow");
$(this).removeClass( "bluehover" );
console.log('mouse out');
});
答案 2 :(得分:3)
this怎么样?
您可以使用stop()
停止动画并从停止的位置继续播放新动画
$('.employer_content').stop().show("slow");
$('.employer_content').stop().hide("slow");
根据他人的建议,使用mouseenter
而不是mouseover
答案 3 :(得分:3)
将mouseover
功能替换为mouseenter
,将mouseout
替换为mouseleave
。
你可以看到这个小提琴正在运作。
答案 4 :(得分:2)
尝试使用mouseenter和mouseleave代替:
来自https://api.jquery.com/mouseover/:
此事件类型可能会因事件冒泡而导致许多令人头疼的问题。对于 例如,当鼠标指针在此内部元素上移动时 例如,鼠标悬停事件将被发送到该事件,然后涓涓细流 外。这可以在inopportune触发我们绑定的mouseover处理程序 倍。有关有用的替代方法,请参阅.mouseenter()的讨论。
$('li.employers').mouseenter(function () {
$('.employer_content').show("slow");
$(this).addClass("bluehover");
});
$('li.employers').mouseleave(function () {
$('.employer_content').hide("fast");
$(this).removeClass("bluehover");
});
答案 5 :(得分:2)
只需从隐藏功能中删除$('li.employers').mouseover(function () {
$('.employer_content').show("slow");
$(this).addClass("bluehover");
});
$('li.employers').mouseout(function () {
$('.employer_content').hide();
$(this).removeClass("bluehover");
});
即可。它是工作。检查这个小提琴:http://jsfiddle.net/zp3jr43u/
JavaScript代码应如下所示。
{{1}}
答案 6 :(得分:1)
不知何故,mouseover事件会被多次触发。我在切换元素之前使用.stop()
方法使其工作。
答案 7 :(得分:1)
您不需要为每个列表项都有单独的类。即使使用这些单独的类,下面的代码也可以让您轻松上手。
$('.wwd_list li').hover(function () {
$('div:last-child',this).show("slow");
$(this).addClass( "bluehover" );
}, function(){
$('div:last-child',this).hide("slow");
$(this).removeClass( "bluehover" );
});
请注意,您只需要使用一个悬停功能而不是鼠标和鼠标移出。这是有效的,因为你在wwd_lsit类中有两个div,而最后一个恰好是你想要定位的那个。如果你想改变一些东西,请小心!
答案 8 :(得分:1)
将mouseover
替换为mouseenter
,将mouseout
替换为mouseleave
。
查看更具分解的形式:
$('li').on({
mouseenter: function() {
jQuery("div.content", this).show('slow');
$(this).addClass( "bluehover" );
},
mouseleave: function() {
jQuery("div.content", this).hide('fast');
$(this).removeClass( "bluehover" );
}
});
(内容类已添加到每个内容div)