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

jQuery,悬停时图像发生更改

柳志专
2023-03-14
问题内容

好的,所以我已经通过PHP动态生成了图像,因此不一定得到相同的图像。我花了最后四个小时扫描互联网,并尝试使用jQuery和/或CSS做无数次尝试,并且提出了以下可行的建议。

    <a href="build.php?x=1875&y=2020"><img style='background:url(images/tile_4.jpg)' src='images/tile_4.jpg' onmouseover="this.src='images/Market.png'" onmouseout="this.src='images/tile_4.jpg'" /></a>
<a href="build.php?x=1876&y=2020"><img style='background:url(images/tile_4.jpg)' src='images/tile_4.jpg' onmouseover="this.src='images/Market.png'" onmouseout="this.src='images/tile_4.jpg'" /></a>
<a href="build.php?x=1877&y=2020"><img style='background:url(images/tile_4.jpg)' src='images/tile_4.jpg' onmouseover="this.src='images/Market.png'" onmouseout="this.src='images/tile_4.jpg'" /></a>
<a href="build.php?x=1878&y=2020"><img style='background:url(images/tile_4.jpg)' src='images/tile_4.jpg' onmouseover="this.src='images/Market.png'" onmouseout="this.src='images/tile_4.jpg'" /></a>
<a href="build.php?x=1879&y=2020"><img style='background:url(images/tile_4.jpg)' src='images/tile_4.jpg' onmouseover="this.src='images/Market.png'" onmouseout="this.src='images/tile_4.jpg'" /></a>

Market.png具有透明背景。

现在,以上工作。鼠标悬停时,它显示Market.png,透明背景部分为tile_4.jpg,鼠标移出时为tile_4.jpg。

我想知道的是:有什么方法可以使用jQuery或CSS完成与上述完全相同的操作?我还没有弄清楚,我已经花了数小时的时间进行尝试,但是自上次以来,如果可能的话,我宁愿做些其他的事情(通过大量重复,目前上述格式已经重复了约100次,但是我有计划将其扩展到1000倍以上)将成为带宽消耗。


问题答案:

您可以向每个<img />元素添加一个类,例如“
xyz”(请选择一个更好的名称),然后利用hover()函数。鉴于图像是动态的,您可以使用额外的data属性渲染图像标记,以用作“备用”或“悬停”图像源。最后,您可能会呈现出以下内容:

<img class="xyz" data-alt-src="/images/Market.png" src="/images/tile_4.png" />
<img class="xyz" data-alt-src="/images/Something.png" src="/images/tile_5.png" />

然后要为每个图像应用切换功能,您可以编写一个小函数来交换图像src属性和data-alt-src悬停/悬停时的属性:

var sourceSwap = function () {
    var $this = $(this);
    var newSource = $this.data('alt-src');
    $this.data('alt-src', $this.attr('src'));
    $this.attr('src', newSource);
}

然后,就像使用一小部分jQuery事件绑定直接执行函数一样简单:

$(function () {
    $('img.xyz').hover(sourceSwap, sourceSwap);
});

这是一个工作示例(版本1):

var sourceSwap = function () {

        var $this = $(this);

        var newSource = $this.data('alt-src');

        $this.data('alt-src', $this.attr('src'));

        $this.attr('src', newSource);

    }



    $(function () {

        $('img.xyz').hover(sourceSwap, sourceSwap);

    });


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<img class="xyz" data-alt-src="http://cdn1.iconfinder.com/data/icons/fatcow/32/accept.png" src="http://cdn1.iconfinder.com/data/icons/fatcow/32/cancel.png" />

<br/>

<img class="xyz" data-alt-src="http://cdn1.iconfinder.com/data/icons/fatcow/32/accept.png" src="http://cdn1.iconfinder.com/data/icons/fatcow/32/cancel.png" />

<br/>

<img class="xyz" data-alt-src="http://cdn1.iconfinder.com/data/icons/fatcow/32/accept.png" src="http://cdn1.iconfinder.com/data/icons/fatcow/32/cancel.png" />

这是评论中Andres Separ的示例的一个变体。使用此选择器,您无需用标记类装饰图像。它还将预加载备用源图像,以帮助消除悬停时的任何滞后或闪烁:

$(function() {
    $('img[data-alt-src]').each(function() { 
        new Image().src = $(this).data('alt-src'); 
    }).hover(sourceSwap, sourceSwap); 
});

这是第二个版本:

var sourceSwap = function () {

        var $this = $(this);

        var newSource = $this.data('alt-src');

        $this.data('alt-src', $this.attr('src'));

        $this.attr('src', newSource);

    }



    $(function() {

        $('img[data-alt-src]').each(function() {

            new Image().src = $(this).data('alt-src');

        }).hover(sourceSwap, sourceSwap);

    });


<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<img data-alt-src="http://cdn1.iconfinder.com/data/icons/fatcow/32/accept.png" src="http://cdn1.iconfinder.com/data/icons/fatcow/32/cancel.png" />

<br/>

<img data-alt-src="http://cdn1.iconfinder.com/data/icons/fatcow/32/accept.png" src="http://cdn1.iconfinder.com/data/icons/fatcow/32/cancel.png" />

<br/>

<img data-alt-src="http://cdn1.iconfinder.com/data/icons/fatcow/32/accept.png" src="http://cdn1.iconfinder.com/data/icons/fatcow/32/cancel.png" />


 类似资料:
  • 问题内容: 我需要一个包含图像的菜单,当有人将鼠标悬停在菜单上时,图像应该会更改。 HTML CSS 我面临的问题是,当我将 鼠标悬停 在菜单项周围时,要显示在悬停上的图像显示 在 旧图像 的背面 。此外,显示的悬停背景图像的宽度和高度 很小 。请帮忙。谢谢![在此处输入图片描述] [1] 问题答案: 将此代码放在结束body标签之前, 将课程首页放置在标签中。做完了 完美运作。

  • 问题内容: 如何更改此确切代码以对鼠标悬停产生悬停效果? 我尝试遵循其他一些问题和答案,但我无法真正遵循它们。 因此,HTML是: 现在,我要做的是当鼠标悬停在小图像上时更改大尺寸图像。 问题答案: 请尝试以下代码。工作正常 我修改了代码,希望它能稍作延迟。.但是,它不是动画。

  • 问题内容: 我有一个链接图像。当用户将鼠标悬停在链接上时,我想显示不同的图像。 目前,我正在使用以下代码: 但是我遇到了很多问题:div没有选择CSS规则(当我在Firebug中查看元素时,该元素只是没有显示相关的CSS规则)。 也许这是因为(据我所知)这是无效的HTML:您不能在周围加上。但是,如果切换到该位置,似乎会遇到更大的问题,因为您不能可靠地在span上设置高度和宽度。 帮帮我!我该如何

  • 这个问题很基本,但是我想确定没有比我现在做的更好的方法了。假设我有一个脸书图标。到目前为止,当用户悬停在该图像上时,我会显示不同的图像以更改颜色。有没有一种替代的CSS方法来做到这一点,所以我不使用多个图像? 在下面的小提琴中,我试图改变背景,但这只覆盖了整个图像。 JSFIDLE

  • 问题内容: 我知道,如果鼠标悬停在文本上方,将允许显示文本。我想知道是否可以在鼠标悬停时更改图像?提前致谢。 问题答案: 我会在您保存图片的组件中添加一个。 然后只需重写方法并 更改图像即可。 这是一个完整的工作示例:

  • 问题内容: 我有一个问题,我将一个图像设置为当鼠标悬停时显示另一个图像,但是第一个图像仍然出现,新的图像不会更改高度和宽度,而会与另一个图像重叠。我对HTML / CSS还是很陌生,所以我可能错过了一些简单的东西。这是代码: 问题答案: 一种解决方案是将第一个图像也用作背景图像,如下所示: 如果您的悬停图片大小不同,则必须将它们设置为: