Advertisement

JS绑定.on的hover事件

阅读量:

今天在项目中UI设计了一个鼠标划入和划出的效果,发现由于数据是通过Ajax异步加载,导致hover方法无法使用。最初使用的是jQuery的hover事件,但后来改用on事件绑定到父元素ul上,发现效果不好。经过进一步研究发现,hover事件在jQuery 1.7版本中触发的是mouseenter和mouseleave事件,而在1.8版本中触发的是mouseover和mouseout事件。因此,改用绑定mouseenter和mouseleave事件,成功实现了鼠标的划入和划出效果。

今天在项目中,UI实现了鼠标划入和划出的效果,这个功能相对简单。然而,在实际的生产环境中,遇到了一些问题。因为数据采用异步加载方式,导致hover效果无法实现。先来看一下原始代码:

复制代码
 1 $('ul li').hover(function(){

    
 2     $(this).addClass('hover');
    
 3 },function(){
    
 4     $(this).removeClass('hover');
    
 5 })复制代码

原理也非常简单,就是在鼠标进入事件触发的时候,我们为这个Li元素添加hover类名,随后在鼠标离开事件发生时,及时删除该类名。这种相对简单的交互效果能够有效提升用户体验。在进行AJAX异步加载时,我们需要将相关事件绑定到父元素ul上(因为li是动态添加的),从而实现了以下代码。

复制代码
 1 $('ul').on('hover','li',function(){

    
 2     $(this).addClass('hover');
    
 3 },function(){
    
 4     $(this).removeClass('hover');
    
 5 })复制代码

后来发现并不能行啊!!!想想也是啊,为什么第三个参数!

这里需要复习on的使用方法。我们这里采用的on事件实际上是原delegate事件。具体信息可参考以下链接:www.runoob.com/jquery/even…。在delegate函数中,第二个参数,即咱们所写的Li,是必需的,不能省略。如果对此理解不够深入,可以参考下面的链接进一步学习:www.jb51.net/article/462…。值得注意的是,hover是jQuery封装的专用函数,而非JavaScript原生函数。

在jQuery 1.7版本之前,该方法会响应mouseentermouseleave事件。

该方法在版本更新后响应mouseover和mouseout事件的触发。

值得注意的是,不同jQuery版本中的hover时间设置有所差异。具体来说,mouseenter事件不会触发冒泡事件,而mouseover事件则会触发冒泡效果。至于mouseleave和mouseout事件,在大多数情况下会表现出相同的行为。为了更直观地了解相关内容,您可以参考下面的实验演示:www.runoob.com/try/try.php…。通过这个小实验,相信您很快就能掌握这些细节。

针对咱们的问题,为了给异步加载的Li绑定鼠标划入和划出事件,只能为该组件绑定两个特定的鼠标事件。

复制代码
 $('ul').on('mouseenter', 'li', function() {//绑定鼠标进入事件

    
     $(this).addClass('hover');
    
 });
    
 $('ul').on('mouseleave', 'li', function() {//绑定鼠标划出事件
    
     $(this).removeClass('hover');
    
 });复制代码

这样的话就能实现鼠标的事件了!

全部评论 (0)

还没有任何评论哟~