jQuery:如何创建 jQuery 悬停功能?

发布于 2024-09-25 05:44:20 字数 426 浏览 5 评论 0原文

我想创建两个淡入和淡出元素的函数。

这就是我到目前为止所做的,但问题是,如果您在悬停元素中移动鼠标,它就会开始振动:|我该如何让它不振动并正常工作?

<script language="javascript" type="text/javascript">
 function hoverIn(target, speed){
     $(target).fadeIn(speed); 
 }

 function hoverOut(target, speed){
     $(target).fadeOut(speed); 
 }
</script>

实时预览 - 查看实时问题

I want to create two functions what fades in and out an element.

This is what I have done so far, but the problem with this is that if you move the mouse while you are in the hovered element it starts vibrating :| How should I make it to not vibrate and work correctly?

<script language="javascript" type="text/javascript">
 function hoverIn(target, speed){
     $(target).fadeIn(speed); 
 }

 function hoverOut(target, speed){
     $(target).fadeOut(speed); 
 }
</script>

LIVE PREVIEW - check out the problem in live

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

深海里的那抹蓝 2024-10-02 05:44:20

更好的方法是使用不显眼的脚本,您想要的主要内容是调用 .stop() 来停止前面的动画,如下所示:

<script type="text/javascript">
 function hoverIn(target, speed){
     $(target).stop(true, true).fadeIn(speed); 
 }

 function hoverOut(target, speed){
     $(target).stop(true, true).fadeOut(speed); 
 }
</script>

这仍然是一个问题,因为 鼠标悬停mouseout 在进入/离开孩子时触发。但是, .hover() 使用 mouseentermouseleave 不会遇到同样的问题,并且会消除您的“振动”问题。

不显眼的版本如下所示:

$(function() {
  $("ul > li").hover(function() {
    $(this).find("ul").stop(true, true).fadeIn('fast');
  }, function() {
    $(this).find("ul").stop(true, true).fadeOut('fast');
  });
});​

您可以在此处查看,或者更短的版本:

$(function() {
  $("ul > li").hover(function() {
    $(this).find("ul").stop(true, true).animate({opacity: 'toggle'}, 'fast');
  });
});​

您可以在此处进行测试,请注意,所有这些不显眼的方法都不使用任何内联 JavaScript,并且适用于多个子菜单。

A better way to do this would be using unobtrusive script, the main thing you want is a .stop() call to stop the previous animation, like this:

<script type="text/javascript">
 function hoverIn(target, speed){
     $(target).stop(true, true).fadeIn(speed); 
 }

 function hoverOut(target, speed){
     $(target).stop(true, true).fadeOut(speed); 
 }
</script>

This is still a problem because mouseover and mouseout fire when entering/leaving a child. However, .hover() uses mouseenter and mouseleave which don't suffer the same problem, and will eliminate your "vibration" problem.

The unobtrusive version looks like this:

$(function() {
  $("ul > li").hover(function() {
    $(this).find("ul").stop(true, true).fadeIn('fast');
  }, function() {
    $(this).find("ul").stop(true, true).fadeOut('fast');
  });
});​

You can see it here, or the even shorter version:

$(function() {
  $("ul > li").hover(function() {
    $(this).find("ul").stop(true, true).animate({opacity: 'toggle'}, 'fast');
  });
});​

You can test that here, note that all of these unobtrusive approaches don't use any inline javascript, and work for multiple child menus.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文