【问题标题】:JQuery link hover effect code condensingjQuery链接悬停效果代码浓缩
【发布时间】:2011-08-02 14:30:00
【问题描述】:

我想知道压缩这些代码行所需的方法。基本上,当您滚动图像时,其下方的文本图像会淡入淡出。

        $("#2").hover(function(){
            $('#two').stop().animate({"opacity": 1}, 600);
        },function(){
            $('#two').stop().animate({"opacity": 0}, 600);
        });
        $("#4").hover(function(){
            $('#one').stop().animate({"opacity": 1}, 600);
        },function(){
            $('#one').stop().animate({"opacity": 0}, 600);
        });
        $("#5").hover(function(){
            $('#three').stop().animate({"opacity": 1}, 600);
        },function(){
            $('#three').stop().animate({"opacity": 0}, 600);
        });
        $("#6").hover(function(){
            $('#four').stop().animate({"opacity": 1}, 600);
        },function(){
            $('#four').stop().animate({"opacity": 0}, 600);
        });

提前非常感谢您!

【问题讨论】:

  • 你也可以添加你的 HTML 吗?对你的标记有更多了解会更容易回答。
  • 看到标记也很实用..
  • 定义哪个元素影响其他元素的规则是什么?请张贴您的标记。事实上,这似乎没有多大意义。或者,至少,发布一个指向JS Fiddle demo 的链接。
  • 我尝试编辑帖子并添加更多代码,但它给了我一个关于新用户发布图片的反垃圾邮件错误。我并没有尝试发布图片,所以有点不知所措......

标签: jquery hover hyperlink


【解决方案1】:

悬停的东西和那个动画的东西之间的关系 看起来有点随机,所以你可能不得不使用一个简单的映射 表。

var id_map = {
    '2': 'two',
    '4': 'one',
    '5': 'three',
    '6': 'four'
};

$('#2, #4, #5, #6').hover(
    function() { $('#' + id_map[this.id]).stop().animate({opacity: 1}, 600); },
    function() { $('#' + id_map[this.id]).stop().animate({opacity: 0}, 600); }
);

您还可以使用数据将id_map 放在源元素上 属性。 HTML 看起来像这样:

<div id="2" data-target="two"  >...</div>
<div id="4" data-target="one"  >...</div>
<div id="5" data-target="three">...</div>
<div id="6" data-target="four" >...</div>

还有 jQuery:

$('#2, #4, #5, #6').hover(
    function() { $('#' + $(this).data('target')).stop().animate({opacity: 1}, 600); },
    function() { $('#' + $(this).data('target')).stop().animate({opacity: 0}, 600); }
);

如果您将一个类附加到 #2#4、... 元素,那么您可以简化选择器:

$('.someClass').hover(
    function() { $('#' + $(this).data('target')).stop().animate({opacity: 1}, 600); },
    function() { $('#' + $(this).data('target')).stop().animate({opacity: 0}, 600); }
);

顺便说一句,使用所有数字 id 属性是 a bad idea,它们应该以字母开头。

【讨论】:

  • 谢谢!是的,我的做法很糟糕——我是个新手。虽然最初的答案有效,但我希望有一个这样的解决方案,我可以将元素配对在一起并稍后调用它们。知道这一点的存在将有助于更广泛地走下去。谢谢!
【解决方案2】:

如果你给每个适用的 HTML 元素一个类,例如&lt;img class="fade-on-hover" /&gt;,那么你可以这样做:

 $(".fade-on-hover").hover(function(){
    $(this).stop().animate({"opacity": 1}, 600);
 },function(){
    $(this).stop().animate({"opacity": 0}, 600);
 });

编辑

我最初错过了您没有使图像本身褪色,因此如果您使用的是 HTML5 和 jQuery 1.4.3 或更高版本,您可以执行以下操作:

HTML:

 <img id="image-one" class="fade-on-hover" data-hoverelement="text-one" />

Javascript:

 $(".fade-on-hover").hover(function(){
    $('#' + $(this).data('hoverelement')).stop().animate({"opacity": 1}, 600);
 },function(){
    $('#' + $(this).data('hoverelement')).stop().animate({"opacity": 0}, 600);
 });

【讨论】:

  • 我还建议使用 delegate() 来提高性能。例如$("body").delegate(".fade-on-hover", "hover", function(){ ...
  • @jmans delegate() 与 OP 发布的行为不同。
  • 我正在寻找这样的浓缩方法。我认为问题在于每次悬停时淡出的元素都不同,所以我不能使用“this”。
  • @Ryan this 指的是悬停在上面的单个元素,而不是所有元素。
  • @Andrew 好的。悬停的元素没有任何反应。它只是触发另一个元素的可见性。所以我发布的原始代码有效,只是重复。基本上,当这个图标悬停在上面时,它下面的文本会淡入,当它悬停时,它下面的文本会淡出。有 4 个不同的图标。没有办法进一步压缩它,但我真的很感谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 2019-03-12
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 2011-08-25
  • 2019-01-20
相关资源
最近更新 更多