【问题标题】:Help with multiple image jquery hover帮助多个图像jquery悬停
【发布时间】:2011-05-14 16:49:53
【问题描述】:

大家好,对不起,我是 Jquery 的新手。我一直试图用 CSS 做所有事情,但我试图为一个网站显着减少我的代码。 我想要做的是,当一个 div.class img 悬停时,它会同时更改 2 个图像的源文件。 我可以做到这一点,但我需要这两个图像具有不同的源文件。 我还试图保持代码足够简单,以便我可以在 HTML 中设置我的图像源,而不必在脚本中设置每个图像。这样做的原因是实际应用程序将有数百张图像。在 CSS 和脚本中定义翻转状态过于庞大和混乱。

这是我目前所拥有的。

    <script>
    $(function() {
       $(".on img").hover(
            function() {
    $(".on img").attr("src", $(".on img").attr("src").split(".").join("_hover."));
}, 
function() {
    $(".on img").attr("src", $(".on img").attr("src").split("_hover.").join("."));
        });
   });

    </script>

所以我使用 DIV 类来指定我想要更改或将被悬停的任何图像。 因此,当该类中的任何其他图像悬停时,任何图像都将具有该翻转状态。

现在的问题是,当该类中的所有图像都更改时,它们都会更改为相同的图像源,我需要它们更改为自己的图像源。所以 x.jpg 变成 x_hover.jpg 和 y.jpg 变成 y_hover.jpg 等等。

这是本示例的 HTML。

    <div class="on"><img src="api.jpg" /> </div>
    <div class="on"><img src="ex.jpg"  /></div>
    <div class="on"><img src="api.jpg" /> </div>
    <div class="on"><img src="ex.jpg"  /></div>

谢谢!!任何可以提供帮助的人,将不胜感激。我是 Jquery 的新手,我一直在寻找如何做到这一点。

-JK

【问题讨论】:

  • 如果我将鼠标悬停在第一个div 中的&lt;img src="api.jpg" /&gt; 上,应该更改哪些其他图像?他们应该改成什么?
  • 永远不要为对新事物感到抱歉 :-) 很高兴你发现了 jQuery,我们都必须从某个地方开始!
  • @Jam --> jQ 太棒了,我想回到过去的 5 个月重新开始! :)
  • 哈哈一样!我有一个应该拥有它的旧项目,但我从未听说过 jQuery!真可惜 :-( - 花了很长时间。

标签: jquery class hover


【解决方案1】:

我能想出的最简单的方法是更改​​悬停元素的src

$('.on img').hover(
    function(){
        var cur = this.src.split('.');
        var extension = cur.pop();
        this.src = cur.join('.') + '_hover.' + extension;
    },
    function(){
        this.src = this.src.replace('_hover','');
    }
);

JS Fiddle demo.


编辑以回应来自@Jamie 的问题,在 cmets 中对此答案:

您知道如何将其应用于该 div 类中的所有图像,但将每个图像更改为它自己的图像吗?例如:a.jpg 更改为 a_hover.jpg,然后恢复为 a.jpg,而 b.jpg 更改为 b_hover.jpg,然后恢复为 b.jpg。如果光标悬停在该 div 类中的图像上,我希望所有这些图像同时更改。

下面的 jQuery 脚本会为您解决这个问题:

$('.on img').hover(
    function(){
        $('.on img').each(
            function(){
                var cur = this.src.split('.');
                var extension = cur.pop();
                this.src = cur.join('.') + '_hover.' + extension;
            });
    },
    function(){
        $('.on img').each(
            function(){
                this.src = this.src.replace('_hover','');
            });
    }

);

JS Fiddle demo.

已编辑 以修复上述网址,由于某种原因,该网址针对的是图片而不是演示。傻我……它现在链接到实际的演示。对不起。

【讨论】:

  • @roXon:pop() 只是从数组 (cur) 中取出最后一个元素并将其分配给 extension 变量。谢谢你:)
  • Arrrrgh 我花了一些时间终于看到 .pop 是一个很好的旧 javascript 方法!哈哈 好老 JS ;) 太棒了!
  • 嘿大卫,我喜欢你的编码,它又好又干净!你知道我怎样才能使它适用于该 div 类中的所有图像,但每个图像都更改为它自己的图像吗?例如:a.jpg 更改为 a_hover.jpg,然后恢复为 a.jpg,而 b.jpg 更改为 b_hover.jpg,然后恢复为 b.jpg。如果光标悬停在该 div 类中的图像上,我希望所有这些图像同时更改。我希望这是有道理的,对不起,我有时解释事情很糟糕。我希望你能帮助我。我在这里靠着一堵砖墙。非常感谢!!!
  • 大卫你是我的英雄!现在我看到它是完全有道理的,但我已经为此花费了永远!这是我的第一个 jquery 脚本,所以我非常感谢你帮助我!
  • @Jamie,太好了!我现在可以,合法地,把我的内衣穿在外面! =D 另外,我很高兴能帮上忙!
【解决方案2】:

我对正则表达式的看法

$('.on img').hover(function() {
  this.src = this.src.replace(/(.*)(\.[^.]+)$/, '$1_hover$2');
}, function() {
  this.src = this.src.replace(/_hover(\.[^.]+)$/, '$1');
});

小提琴: http://jsfiddle.net/nWc2D/

【讨论】:

  • +1 @Gary(如果你有时间的话)你有什么好的正则表达式建议吗? (提前致谢!)
  • 你知道吗,我什至不记得我是如何开始学习正则表达式的。就这样发生了。 :D 最好的办法就是使用 Regex Buddy 或在线工具等工具练习匹配字符串,我喜欢 regex.larsolavtorvik.com -- 从基础开始 -- regular-expressions.info/quickstart.html -- 当你开始学习贪婪时会变得很困难,向后看,环顾四周等,但继续练习,你会到达那里!
  • 很好,谢谢!我一定会的!!你的例子就像你说的那样:看起来像“一旦你得到它:你拥有它!”我确信使用简约的“标志”很有趣。就像在瓶子里造一艘船! :) 所有的拆分、连接、ifs、afters、befores、arrays... fun fun fun
【解决方案3】:

试试这个:

$(function() {
    $(".on img").hover(
            function() {
                   $(this).attr("src", $(this).attr("src").split(".").join("_hover."));
            } , 
            function() {
                   $(this).attr("src", $(this).attr("src").split("_hover.").join("."));
           });
   });

在这种情况下,$(this) 将为您提供悬停的图像,而不是该类的所有图像。

【讨论】:

  • 对不起各位,我觉得我不太擅长解释。我可以让每个图像单独翻转。我之前使用过 $(this) 。我想要做的是让该类中的所有图像在悬停时更改。并且让每张图片都与其他图片不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-09
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多