jQuery,悬停时图像发生变化
jQuery, image changing on hover
好吧,所以我已经通过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有一个透明的背景。
现在,上面的工作。在mouseover上,它显示Market.png,透明背景部分为tile_4.jpg,在mouseout上显示tile_4..jpg。
我想知道的是:有没有任何方法可以用jQuery或CSS完成与上面完全相同的事情?我还没有弄清楚,我花了几个小时尝试,但如果可能的话,我宁愿做其他事情,因为上面的格式(大量重复,目前重复了大约100次,但我计划将其扩展到1000多次)将成为带宽占用者。
您可以为每个<img />
元素添加一个类,例如"xyz"(请选择一个更好的名称),然后利用hover()函数。假设您的图像是动态的,您可以使用额外的数据属性来渲染图像标记,作为"备用"或"悬停"图像源。最后,您可能会呈现这样的东西:
<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" />
jQuery
您可以使用mouseover
和mouseout
事件:
$("img").on({
"mouseover" : function() {
this.src = 'images/Market.png';
},
"mouseout" : function() {
this.src='images/tile_4.jpg';
}
});
通过这种方式,您可以从HTML中去掉属性onmouseout
和onmouseover
,并使代码整洁。
CSS
然而,最简单的方法是使用CSS:
img {
background-image: url('images/tile_4.jpg');
}
img:hover {
background-image: url('images/Market.png');
}
当然,使用jQuery很容易。
$('img').hover(function(){
$(this).attr('src','images/Market.png');
},function(){
$(this).attr('src','images/tile_4.jpg');
});
- 一个变化:在加载图像之前加载元素
- 如何在浏览器宽度/高度变化时动态调整图像网格的大小
- 如何根据动态变化的百分比值为图像上色
- 滚动时背景图像发生变化
- 将鼠标悬停在图像上,图像的不透明度和图像下方标题的颜色会发生变化..同样,当标题变成两行时,它会破坏格式
- 淡入淡出每隔几秒就会发生变化的图像
- Jquery-背景图像随select中的数据属性而变化
- 将图像悬停在左侧时,右侧的图像会发生变化
- 按下和向上键时,Javascript图像会发生变化
- 如何在引导轮播的高度随响应而变化时保持引导程序轮播中响应式图像的纵横比
- 如何在时间变化时旋转图像
- 当圆形图像在圆轮中发生变化时,如何在顶部显示标签
- 水平居中高度变化的图像,而不会扭曲图像
- 当模型更改时,AngularJS图像SRC会发生变化
- 可缩放的背景图像,点击后会发生变化
- 如何创建一个带有导航箭头和播放/暂停的图像转盘,点击后会发生变化
- 我应该在什么时候用CSS和Javascript控制背景图像的变化
- 悬停时背景图像发生变化
- 与图像幻灯片放映相对应的文本颜色变化
- Jquery中弹出的图像的边距变化量由什么决定