我有这个简单的HTML:
<span class="coverImg" style="background-image:url('images/show2.jpg');"></span></a>
和一些Javascript:
$(function() {
$(".coverImg").hover(function() {
$(this).animate({
backgroundPosition : "0 0"
}, "fast");
}, function() {
$(this).animate({
backgroundPosition : "50% 50%"
}, "fast");
});
});
所以当鼠标悬停时,该功能正常工作,虽然动画不是那么完美,很容易看到缓和.. 但是当mouseout功能不起作用时,背景图像只是坐在那里,甚至不在像素上移动......
有什么问题?我错过了什么?
OR:
$(function() {
$(".coverImg").mouseover(function() {
$(this)
.animate({
"background-position-x" : "-=20px",
"background-position-y" : "-=20px"
}, "fast");
}).mouseout(function() {
$(this).animate({
"background-position-x" : "0 ",
"background-position-y" : "0"
}, "fast");
})
})
这仅适用于Chrome ...
所以又是什么问题!什么是虫子!我错过了什么?!
答案 0 :(得分:3)
我认为jQuery不能将背景位置设为默认动画 - 我使用http://archive.plugins.jquery.com/project/backgroundPosition-Effect
标准CSS不支持background-position-x
和background-position-y
,只有少数人支持此功能。
jQuery的animate()
方法不支持同时为两个值设置动画,有时会出现错误,或者在某些浏览器中没有做任何事情。
毕竟,请查看http://snook.ca/archives/javascript/jquery-bg-image-animations。应该有一个名为jQuery.bgpos.js
的jQuery插件,如果你想为背景位置设置动画效果很好。
代码是这样的:
(function($) {
$.extend($.fx.step, {
backgroundPosition : function(fx) {
if(fx.state === 0 && typeof fx.end == 'string') {
var start = $.curCSS(fx.elem, 'backgroundPosition');
start = toArray(start);
fx.start = [start[0], start[2]];
var end = toArray(fx.end);
fx.end = [end[0], end[2]];
fx.unit = [end[1], end[3]];
}
var nowPosX = [];
nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0];
nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1];
fx.elem.style.backgroundPosition = nowPosX[0] + ' ' + nowPosX[1];
function toArray(strg) {
strg = strg.replace(/left|top/g, '0px');
strg = strg.replace(/right|bottom/g, '100%');
strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g, "$1px$2");
var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
return [parseFloat(res[1], 10), res[2], parseFloat(res[3], 10), res[4]];
}
}
});})(jQuery);
答案 1 :(得分:2)
好像你正在使用jQuery的重手法。这可以单独用css完成:
span {
background: url(yourimage.jpg) top left no-repeat;
transition: all 3s ease-in-out;
}
span:hover {
background-position: 50% 50%;
}
背景位置更改将在现代浏览器中生成动画,并且只是IE8及以下版本的静态更改。
您可能还想添加transition
属性的其他浏览器特定前缀版本:
-webkit-transition:
-moz-transition:
-o-transition:
transition: