我有一些图像及其翻转图像。使用jQuery,我想在onmousemove / onmouseout事件发生时显示/隐藏翻转图像。我的所有图像名称都遵循相同的模式,如下所示:
原始图片:
Image.gif
展期图片:
Imageover.gif
我想分别在onmouseover和onmouseout事件中插入和删除图像源的“over”部分。
我怎样才能使用jQuery?
答案 0 :(得分:619)
准备就绪:
$(function() {
$("img")
.mouseover(function() {
var src = $(this).attr("src").match(/[^\.]+/) + "over.gif";
$(this).attr("src", src);
})
.mouseout(function() {
var src = $(this).attr("src").replace("over.gif", ".gif");
$(this).attr("src", src);
});
});
对于那些使用网址图片来源的人:
$(function() {
$("img")
.mouseover(function() {
var src = $(this).attr("src");
var regex = /_normal.svg/gi;
src = this.src.replace(regex,'_rollover.svg');
$(this).attr("src", src);
})
.mouseout(function() {
var src = $(this).attr("src");
var regex = /_rollover.svg/gi;
src = this.src.replace(regex,'_normal.svg');
$(this).attr("src", src);
});
});
答案 1 :(得分:113)
我知道你问的是使用jQuery,但是你可以在使用CSS关闭JavaScript的浏览器中实现相同的效果:
#element {
width: 100px; /* width of image */
height: 200px; /* height of image */
background-image: url(/path/to/image.jpg);
}
#element:hover {
background-image: url(/path/to/other_image.jpg);
}
有更长的说明here
然而,更好的是使用精灵:simple-css-image-rollover
答案 2 :(得分:61)
如果您有多个图像,并且需要一些不依赖于命名约定的通用图标。
HTML
<img data-other-src="big-zebra.jpg" src="small-cat.jpg">
<img data-other-src="huge-elephant.jpg" src="white-mouse.jpg">
<img data-other-src="friendly-bear.jpg" src="penguin.jpg">
的JavaScript
$('img').bind('mouseenter mouseleave', function() {
$(this).attr({
src: $(this).attr('data-other-src')
, 'data-other-src': $(this).attr('src')
})
});
答案 3 :(得分:57)
/* Teaser image swap function */
$('img.swap').hover(function () {
this.src = '/images/signup_big_hover.png';
}, function () {
this.src = '/images/signup_big.png';
});
答案 4 :(得分:24)
不限制您使用“此图像”和“该图像”的通用解决方案可能只是将“onmouseover”和“onmouseout”标记添加到HTML代码本身。
HTML
<img src="img1.jpg" onmouseover="swap('img2.jpg')" onmouseout="swap('img1.jpg')" />
的JavaScript
function swap(newImg){
this.src = newImg;
}
根据您的设置,这样的事情可能会更好(并且需要更少的HTML修改)。
HTML
<img src="img1.jpg" id="ref1" />
<img src="img3.jpg" id="ref2" />
<img src="img5.jpg" id="ref3" />
JavaScript / jQuery
// Declare Arrays
imgList = new Array();
imgList["ref1"] = new Array();
imgList["ref2"] = new Array();
imgList["ref3"] = new Array();
//Set values for each mouse state
imgList["ref1"]["out"] = "img1.jpg";
imgList["ref1"]["over"] = "img2.jpg";
imgList["ref2"]["out"] = "img3.jpg";
imgList["ref2"]["over"] = "img4.jpg";
imgList["ref3"]["out"] = "img5.jpg";
imgList["ref3"]["over"] = "img6.jpg";
//Add the swapping functions
$("img").mouseover(function(){
$(this).attr("src", imgList[ $(this).attr("id") ]["over"]);
}
$("img").mouseout(function(){
$(this).attr("src", imgList[ $(this).attr("id") ]["out"]);
}
答案 5 :(得分:21)
$('img.over').each(function(){
var t=$(this);
var src1= t.attr('src'); // initial src
var newSrc = src1.substring(0, src1.lastIndexOf('.'));; // let's get file name without extension
t.hover(function(){
$(this).attr('src', newSrc+ '-over.' + /[^.]+$/.exec(src1)); //last part is for extension
}, function(){
$(this).attr('src', newSrc + '.' + /[^.]+$/.exec(src1)); //removing '-over' from the name
});
});
您可能想要从第一行更改图像类别。如果您需要更多图像类(或不同的路径),可以使用
$('img.over, #container img, img.anotherOver').each(function(){
等等。
它应该有效,我没有测试它:)
答案 6 :(得分:13)
我希望有一个像这样的超级衬里:
$("img.screenshot").attr("src", $(this).replace("foo", "bar"));
答案 7 :(得分:6)
如果您正在寻找的解决方案是动画按钮,那么您可以做的最好的是提高性能是精灵和CSS的组合。精灵是一个巨大的图像,包含您网站上的所有图像(标题,徽标,按钮和您拥有的所有装饰)。您拥有的每个图像都使用HTTP请求,HTTP请求的次数越多,加载的时间就越长。
.buttonClass {
width: 25px;
height: 25px;
background: url(Sprite.gif) -40px -500px;
}
.buttonClass:hover {
width: 25px;
height: 25px;
background: url(Sprite.gif) -40px -525px;
}
0px 0px
坐标将是精灵的左上角。
但如果您正在使用Ajax或类似的东西开发一些相册,那么JavaScript(或任何框架)是最好的。
玩得开心!
答案 8 :(得分:4)
$('img').mouseover(function(){
var newSrc = $(this).attr("src").replace("image.gif", "imageover.gif");
$(this).attr("src", newSrc);
});
$('img').mouseout(function(){
var newSrc = $(this).attr("src").replace("imageover.gif", "image.gif");
$(this).attr("src", newSrc);
});
答案 9 :(得分:4)
虽然在一段时间内寻找解决方案,我发现了一个类似于下面的脚本,经过一些调整后我才为我工作。
它处理两个图像,几乎总是默认为“关闭”,鼠标离开图像(image-example_off.jpg),偶尔“开启”,鼠标悬停的时间,所需的显示替代图像(image-example_on.jpg)。
<script type="text/javascript">
$(document).ready(function() {
$("img", this).hover(swapImageIn, swapImageOut);
function swapImageIn(e) {
this.src = this.src.replace("_off", "_on");
}
function swapImageOut (e) {
this.src = this.src.replace("_on", "_off");
}
});
</script>
答案 10 :(得分:3)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>JQuery</title>
<script src="jquery.js" type="text/javascript"> </script>
<style type="text/css">
#box{
width: 68px;
height: 27px;
background: url(images/home1.gif);
cursor: pointer;
}
</style>
<script type="text/javascript">
$(function(){
$('#box').hover( function(){
$('#box').css('background', 'url(images/home2.gif)');
});
$('#box').mouseout( function(){
$('#box').css('background', 'url(images/home1.gif)');
});
});
</script>
</head>
<body>
<div id="box" onclick="location.href='index.php';"></div>
</body>
</html>
答案 11 :(得分:2)
我做了类似下面的代码:)
仅当您使用_hover命名的第二个文件时,它才有效,例如facebook.png
和facebook_hover.png
$('#social').find('a').hover(function() {
var target = $(this).find('img').attr('src');
//console.log(target);
var newTarg = target.replace('.png', '_hover.png');
$(this).find('img').attr("src", newTarg);
}, function() {
var target = $(this).find('img').attr('src');
var newTarg = target.replace('_hover.png', '.png');
$(this).find('img').attr("src", newTarg);
});
答案 12 :(得分:1)
<img src="img1.jpg" data-swap="img2.jpg"/>
img = {
init: function() {
$('img').on('mouseover', img.swap);
$('img').on('mouseover', img.swap);
},
swap: function() {
var tmp = $(this).data('swap');
$(this).attr('data-swap', $(this).attr('src'));
$(this).attr('str', tmp);
}
}
img.init();
答案 13 :(得分:1)
改编自Richard Ayotte的代码 - 要在ul / li列表中定位img(在此处通过包装器div类找到),如下所示:
$('div.navlist li').bind('mouseenter mouseleave', function() {
$(this).find('img').attr({ src: $(this).find('img').attr('data-alt-src'),
'data-alt-src':$(this).find('img').attr('src') }
);