当前位置: 首页 > 面试题库 >

用jQuery动画addClass / removeClass

俞俊逸
2023-03-14
问题内容

我正在使用jQuery和jQuery-ui,并希望为各种对象设置各种属性的动画。

为了在此说明问题,我将其简化为一个div,当用户将鼠标悬停在其上时,该分区从蓝色变为红色。

使用时我可以得到想要的行为animate(),但是这样做时,我要设置动画的样式必须在动画代码中,因此与样式表是分开的。(请参见 示例1

一种替代方法是使用addClass()removeClass()但是我无法重新创建可以得到的确切行为animate()。(请参见
示例2

例子1

让我们看一下我拥有的代码animate()

$('#someDiv')
  .mouseover(function(){
    $(this).stop().animate( {backgroundColor:'blue'}, {duration:500});
  })
  .mouseout(function(){
    $(this).stop().animate( {backgroundColor:'red'}, {duration:500});
  });

它显示了我正在寻找的所有行为:

  1. 在红色和蓝色之间平滑动画。
  2. 当用户将鼠标快速移入或移出div时,没有动画“超排队”。
  3. 如果用户在动画播放过程中将鼠标移出/移入,则可以正确地缓解当前的“中途”状态和新的“目标”状态。

但是,由于定义了样式更改,因此animate()我必须在此处更改样式值,而不能仅将其指向我的样式表。定义样式的位置的“碎片化”确实让我感到困扰。

例子2

这是我目前使用addClass()和的最佳尝试removeClass(请注意,要使动画正常工作,您需要jQuery-ui):

//assume classes 'red' and 'blue' are defined

$('#someDiv')
  .addClass('blue')
  .mouseover(function(){
    $(this).stop(true,false).removeAttr('style').addClass('red', {duration:500});
  })
  .mouseout(function(){
    $(this).stop(true,false).removeAttr('style').removeClass('red', {duration:500});
  });

这同时显示了我的原始需求的属性1.和2.,但是3不起作用。

我了解原因:

进行动画制作时addClass()removeClass()jQuery将临时样式添加到元素,然后递增适当的值,直到它们达到所提供类的值,然后才实际添加/删除该类。

因此,我必须删除样式属性,否则,如果动画停止一半,样式属性将保留并永久覆盖任何类值,因为标记中的样式属性比类样式具有更高的重要性。

但是,当动画进行到一半时,它尚未添加新类,因此,使用此解决方案,当用户在动画完成之前移动鼠标时,颜色会跳到先前的颜色。

我理想地想要做的是这样的事情:

$('#someDiv')
  .mouseover(function(){
    $(this).stop().animate( getClassContent('blue'), {duration:500});
  })
  .mouseout(function(){
    $(this).stop().animate( getClassContent('red'), {duration:500});
  });

哪里getClassContent会返回所提供类的内容。关键点在于,这样我不必到处都保留样式定义,而可以将它们保留在样式表的类中。


问题答案:

由于您不必担心IE,为什么不使用CSS过渡来提供动画和jQuery来更改类。实时示例:http://jsfiddle.net/tw16/JfK6N/

#someDiv{
    -webkit-transition: all 0.5s ease;
    -moz-transition: all 0.5s ease;
    -o-transition: all 0.5s ease;
    transition: all 0.5s ease;
}


 类似资料:
  • 所属类别 特效(Effects) | 特效核心(Effects Core) | 方法重载(Method Overrides) 用法 描述:当动画样式改变时,为匹配的元素集合内的每个元素添加指定的 Class。 返回:jQuery.addClass( className [, duration ] [, easing ] [, complete ] ) 参数 类型 描述 默认值 className

  • 所属类别 特效(Effects) | 特效核心(Effects Core) | 方法重载(Method Overrides) 用法 描述:当动画样式改变时,为匹配的元素集合内的每个元素添加指定的 Class。 返回:jQuery.addClass( className [, duration ] [, easing ] [, complete ] ) 参数 类型 描述 默认值 className

  • 基本的想法是,我有商店菜单作为清单 已经尝试了几件事情,甚至与css关键帧,但它不工作,如何实现这一点?

  • 问题内容: 我正在尝试在鼠标悬停时使用jQuery来动画backgroundColor的变化。 我检查了一些示例,似乎正确了,它可以与其他属性(例如fontSize)一起使用,但可以使用backgroundColor和“ Invalid Property” js错误。我正在使用的元素是一个div。 有任何想法吗? 问题答案: 颜色插件仅比UI库便宜4kb。当然,您将要使用一个不错的插件版本,而不要

  • 主要内容:实例,jQuery stop() 方法,实例jQuery stop() 方法用于在动画或效果完成前对它们进行停止。 停止滑动 时间是宝贵的,因此,我们为您提供快捷易懂的学习内容。 在这里,您可以通过一种易懂的便利的模式获得您需要的任何知识。 实例 jQuery stop() 滑动 演示 jQuery stop() 方法。 jQuery stop() 动画(带参数) 演示 jQuery stop() 方法 jQuery stop() 方法 j

  • Categories: Effects | Effects Core | Method Overrides .addClass( className [, duration ] [, easing ] [, complete ] )Returns: jQuery 描述: 为每个匹配的元素添加指定的样式类名,而且所有改变的样式以动画的形式展示 .addClass( className [, dura