【问题标题】:jQuery mouseout event capturejQuery mouseout 事件捕获
【发布时间】:2023-04-02 14:12:01
【问题描述】:

我通过 load 方法加载了一些图像,如下所示:

<ul>
   <li><img src="1" alt="" /></li>
   <li><img src="2" alt="" /></li>
</ul>

在鼠标悬停时,我想在 &lt;li&gt; 中附加一个比 img 更大的 z-index 的 div,这样 div 就会出现在图像的“前面”(就像一个带有图像编辑链接的栏)。在 mouseout 时,我希望它消失。问题是这些图像不断变化(通过加载方法加载),我尝试了这样的事情:

$('img').live('mouseover',function(){
    $(this).append('<div>links links</div>');
});

$('img').live('mouseout',function(){
    $('div').remove()
});

实际的问题是当鼠标离开图像区域进入div区域时,div消失并不断出现,无法点击里面的链接。请记住,div 会“超过”图像。

我怎样才能正确地做到这一点?

【问题讨论】:

    标签: jquery function events live effect


    【解决方案1】:

    根据您的浏览器兼容性要求,您可以使用 :hover 对 css 执行此操作。

    在你的标记中包含img标签和div标签,然后像这样使用css:

    ul li div {
      display: none;
    }
    
    ul li:hover div{
      display: block;
    }
    

    对于 div 在 img 标签上的定位,它实际上取决于页面布局的其余部分。如果图像总是相同的尺寸,您可以使用负边距偏移和 div 的像素定位。

    如果您使用不透明度设置,您还可以在基于 webkit 的浏览器上实现一些不错的淡入淡出效果:

    ul li div {
      opacity: 0;
      -webkit-transition: opacity .33s linear;
    }
    
    ul li:hover div{
      opacity: 1;
    }
    

    【讨论】:

    • 仅供参考,将它们放在&lt;a&gt; 标记中,它适用于所有浏览器
    【解决方案2】:

    将您的事件绑定到li 而不是img。这样,mouseout 事件只会在光标离开divimg 时触发。

    【讨论】:

    • 不,我尝试过这样的事情:$('img:parent').live(...),但仍然是同样的问题:(
    【解决方案3】:

    看看parent()

    http://docs.jquery.com/Traversing/parent

    编辑:父母不适用于现场,我的错。这个怎么样:

    $('li').live('mouseover',function(){
        $(this).children().hide();
        $(this).append('<div>links links</div>');
    });
    
    $('li').live('mouseout',function(){
        $('div').remove();
        $(this).children().show();
    });
    

    【讨论】:

    • 你能说得更具体些吗?我知道 parent() 但你是什么意思?我应该如何使用它?你是说我应该在
    • 上附加一个事件吗?
  • 嗯...我不知道...看起来不太好,在鼠标悬停的代码中,我的图像消失了,我不想要那个,我希望那个 div 来在图像上(不透明度为 0.5)。
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签