【问题标题】:Jquery fade icon back on mouseout to the value it had before mousenterJquery在鼠标悬停时将图标淡化回鼠标悬停之前的值
【发布时间】:2013-01-24 01:59:13
【问题描述】:

我有这段代码,它在 mouseenter 上将一些图标淡化为不透明度 1.0,在 mouseleave 上淡化为 0.3。它工作得很好,除了我在不同的响应视图中将这些图标设置为不透明度 0.13,但下面的代码仍然在鼠标移出时将它们淡化回 0.3 而不是 0.13,这不是我想要的。

$(".social-holder img").on("hover", function(e) {
    if(e.type == "mouseenter") {
        $(this).fadeTo('fast', 1.0);
    }
    else if (e.type == "mouseleave") {
        $(this).fadeTo('fast', 0.3);
    }
});

我尝试了下面的代码,但我不明白为什么它不起作用。它在 mouseleave 上将图标保留为 1.0

$(".social-holder img").on("hover", function(e) {
    var currentOpacity = $(this).css('opacity');
    if(e.type == "mouseenter") {
        $(this).fadeTo('fast', 1.0);
    }
    else if (e.type == "mouseleave") {
        $(this).fadeTo('fast', currentOpacity);
    }
});

顺便说一句,var currentOpacity 似乎工作正常,正如我使用控制台检查的那样,但它似乎没有进入 else if 语句。也许我对范围或其他东西有一些误解。

【问题讨论】:

  • 您是否尝试添加一些console.log 消息以查看这些事件何时触发?您的 mouseleavemouseenter 动画可能彼此重叠和/或您的其他动画重叠。
  • 是的,我几乎到处都试过了,但我仍然看不到问题

标签: jquery css fadeto


【解决方案1】:

您的代码不起作用,因为每次调用处理程序时,currentOpacity 都会发生变化。所以在鼠标离开时,这段代码被执行:

 var currentOpacity = $(this).css('opacity');
 $(this).fadeTo('fast', currentOpacity);

这是一种无所事事的精心设计:-)

改用此代码:

if(e.type == "mouseenter") {
    // Either preserve the saved value or get current opacity
    var origOpacity = $(this).data('origOpacity') || $(this).css('opacity');
    $(this).fadeTo('fast', 1.0).data('origOpacity', origOpacity);
}
else if (e.type == "mouseleave") {
    var origOpacity = $(this).data('origOpacity');
    $(this).fadeTo('fast', origOpacity, function(){ $(this).removeAttr('style'); });
}

这会将输入时的不透明度保存在元素的数据映射中并从那里取回。

【讨论】:

  • 谢谢...是的,这很有效,但对我来说并不是很好。这是一个响应式主题,当某人调整窗口大小时,任何以前悬停在图标上的图标最终都会由于某种原因而忽略 css ......我知道它应该只在一个视图中使用,但它可能会在浏览器中调整大小原因......我之前从未听说过 data() 函数......有没有办法让它丢弃它的内容或其他东西。正如我所说的,在 juery api 上。
  • 问题是你并不总是得到mouseleave,但这不是问题。在 mouseenter 中使用此代码:var origOpacity = $(this).data('origOpacity') || $(this).css('opacity');
  • 通过此修复,开始不透明度保存在data() 中,无论动画的哪个阶段中断,这始终是首选。
  • 使用您在上面发布的新代码对我来说仍然具有相同的效果
  • 我大部分时间都在那里,我想我现在正在寻找的只是一点 jquery 来在 mouseleave 之后从元素中删除样式属性内容,它优先于普通 css
猜你喜欢
  • 2011-08-04
  • 2011-07-05
  • 1970-01-01
  • 2018-03-26
  • 2011-01-25
  • 2011-07-07
  • 2018-09-03
  • 1970-01-01
  • 2012-05-04
相关资源
最近更新 更多