我需要在鼠标悬停时更改<img>
的源URL。
我已经尝试过这个但不起作用:
HTML
<img id="my-img" src="http://dummyimage.com/100x100/000/fff"/>
CSS
#my-img:hover {
content: url('http://dummyimage.com/100x100/eb00eb/fff');
}
需要任何帮助。
更新:
这仅适用于Webkit / Google Chrome。
仅使用HTML和CSS无法更改图像的src。如果您将img标签替换为div标签,则可能能够更改设置为背景的图像,如下所示:
div {
background: url('http://dummyimage.com/100x100/000/fff');
}
div:hover {
background: url('http://dummyimage.com/100x100/eb00eb/fff');
}
如果您认为可以使用一些 JavaScript 代码,那么您应该能够像下面这样更改 img 标签的 src:
function hover(element) {
element.setAttribute('src', 'http://dummyimage.com/100x100/eb00eb/fff');
}
function unhover(element) {
element.setAttribute('src', 'http://dummyimage.com/100x100/000/fff');
}
<img id="my-img" src="http://dummyimage.com/100x100/000/fff" onmouseover="hover(this);" onmouseout="unhover(this);" />
我已经对与Patrick Kostjens相关的一些内容进行了修改。
<a href="#">
<img src="http://icons.iconarchive.com/icons/fasticon/angry-birds/128/yellow-bird-icon.png"
onmouseover="this.src='http://icons.iconarchive.com/icons/fasticon/angry-birds/128/red-bird-icon.png'"
onmouseout="this.src='http://icons.iconarchive.com/icons/fasticon/angry-birds/128/yellow-bird-icon.png'"
border="0" alt=""/></a>
演示
<a>
<img src="https://cdn4.iconfinder.com/data/icons/imoticons/105/imoticon_15-128.png" />
<img src="https://cdn4.iconfinder.com/data/icons/imoticons/105/imoticon_12-128.png" />
</a>
CSS
a img:last-child {
display: none;
}
a:hover img:last-child {
display: block;
}
a:hover img:first-child {
display: none;
}
jsfiddle: https://jsfiddle.net/m4v1onyL/
请注意,为了正确显示,所使用的图像具有相同的尺寸。此外,这些图像文件大小相当小,因此在此情况下加载多个图像不是问题,但如果您要切换大型图像的显示,则可能会成为问题。
我曾经遇到过类似的问题,我的解决方法是使用两张图片,其中一张是隐藏的(display:none),另一张是可见的。在悬停在周围span标签上时,原始图片变为display:none,另一张图片则变为display:block。(根据您的情况可能会使用“inline”)
这个例子使用了两个span标签而不是图片,所以您可以在此处运行它看到结果。不幸的是,我没有任何在线图片资源可用。
#onhover {
display: none;
}
#surround:hover span[id="initial"] {
display: none;
}
#surround:hover span[id="onhover"] {
display: block;
}
<span id="surround">
<span id="initial">original</span>
<span id="onhover">replacement</span>
</span>
span#initial
代替span[id="initial"]
。 - Adam Katz你可以通过将width
和height
设置为0来隐藏实际图像,并应用一些CSS来实现你想要的效果:
#aks {
width:0px;
height:0px;
background:url('http://dummyimage.com/100x100/000/fff');
padding:50px;
}
#aks:hover {
background: url('http://dummyimage.com/100x100/eb00eb/fff');
}
通过设置padding来使img
标签达到你想要的大小(实际图片大小的一半)。
关于语义,我不喜欢目前提出的任何解决方案。因此,我个人使用以下解决方案:
.img-wrapper {
display: inline-block;
background-image: url(https://www.w3schools.com/w3images/fjords.jpg);
}
.img-wrapper > img {
vertical-align: top;
}
.img-wrapper > img:hover {
opacity: 0;
}
<div class="img-wrapper">
<img src="https://www.w3schools.com/w3css/img_lights.jpg" alt="image" />
</div>
这是一种仅使用CSS的解决方案,具有良好的浏览器兼容性。它利用了一个图像包装器,该包装器具有一种背景,最初被图像本身隐藏。当鼠标悬停时,通过透明度隐藏图像,因此背景图像变得可见。这样,不仅可以在标记代码中拥有一个空包装器,而且可以拥有一个真实的图像。
我有一个更好的解决方案。如果有人使用AngularJs:
http://jsfiddle.net/ec9gn/30/<div ng-controller='ctrl'>
<img ng-mouseover="img='eb00eb'" ng-mouseleave="img='000'"
ng-src='http://dummyimage.com/100x100/{{img}}/fff' />
</div>
Javascript:
function ctrl($scope){
$scope.img= '000';
}
同意AshisKumar的答案,
可以使用jQuery功能来实现鼠标悬停时更改图像URL的方法如下:
$(function() {
$("img")
.mouseover(function() {
var src = $(this).attr("src").match(/[^\.]+/) + "over.gif";
$(this).attr("src", url1); //URL @the time of mouse over on image
})
.mouseout(function() {
var src = $(this).attr("src").replace("over", "");
$(this).attr("src", url2); //default URL
});
});
display:block
与div
一起使用的方式有何不同?主题发起人想通过CSS更改img
的src
属性,而不是采用其他方法。 - Cthulhu我遇到了类似的问题 - 我想在:hover时更换图片,但由于缺乏Bootstrap的自适应设计,无法使用BACKGRUND-IMAGE。
如果像我一样只想在:hover时更改图片(但不坚持更改特定图像标记的SRC),您可以尝试类似以下这样的解决方案 - 它是纯CSS解决方案。
HTML:
<li>
<img src="/picts/doctors/SmallGray/Zharkova_smallgrey.jpg">
<img class="hoverPhoto" src="/picts/doctors/Small/Zharkova_small.jpg">
</li>
li { position: relative; overflow: hidden; }
li img.hoverPhoto {
position: absolute;
top: 0;
right: 0;
left: 0;
bottom: 0;
opacity: 0;
}
li.hover img { /* it's optional - for nicer transition effect */
opacity: 0;
-web-kit-transition: opacity 1s ease;
-moz-transition: opacity 1s ease;li
-o-transition: opacity 1s ease;
transition: opacity 1s ease;
}
li.hover img.hoverPhoto { opacity: 1; }
由于无法使用CSS更改src
,如果您可以使用jQuery,可以查看此代码片段。
$('#aks').hover(
function(){
$(this).attr('src','http://dummyimage.com/100x100/eb00eb/fff')
},
function(){
$(this).attr('src','http://dummyimage.com/100x100/000/fff')
}
)
基本上是使用.hover()
方法...它需要两个函数来实现。当你进入悬停状态和离开悬停状态时。
我们使用.attr
(属性的缩写)来改变src
属性。
值得注意的是,您需要像在fiddle中一样包含jQuery库才能使其正常工作。
content
只适用于:before
或:after
,所以这不会起作用。为什么不使用一个带有背景图像的div
,并在悬停时更改该背景图像呢? - putvandeDIV
。 - Hamed Kamravacontent:
仅适用于:before
或:after
。 - sulfureousimg
标签的背景图像,然后只需从图像中删除src
。虽然有点奇怪,但它会起作用。@HamedKamrava:你只能使用图像还是可以使用其他东西? - putvandecontent:url(...)
不需要:before
或:after
伪类。更新:这仅适用于Webkit/Google Chrome。 - Timo Ernst