请看小提琴:http://jsfiddle.net/deshg/8q1pkcna/5/,它显示了一个非常简化的img悬停效果。它取代了mouseenter/Mouseleave上svg img的src,img的大小在CSS中具体定义(代码如下)。
这在除MacSafari7之外的所有浏览器上都是按预期工作的,这使得原来的SVG img在悬停后替换它时会小得多。它将图像报告为正确的大小,但显示它要小得多,所以我最初认为这是一个svg视箱问题或这方面的问题,但是我已经尝试更改视箱并保留AviewRatio值而没有效果。另外,svg最初显示正确,因此实际的svg文件不会有问题。
如果可能的话,我想避免必须手动编辑svg文件,因为这将使普通用户添加SVG变得更加困难,但我不认为它们是问题所在。
有人能解释一下为什么会发生这种情况,以及如何解决它,因为这是一个非常奇怪的问题!
FYI还有另一个线程在SVG大小悬停在safari只涵盖了类似的主题,但没有答案或链接到报告的错误。
非常感谢!
<div id="container">
<img src="https://dl.dropboxusercontent.com/s/3o4xrlvax9b08u4/svghover.svg" class="svghover">
</div>
#container {
width: 100%; background-color: #000000;
}
img {
width: 100px;
height: 100px;
}
$(document).on({
mouseenter: function () {
var t = $(this);
t.attr("src", function(index, attr){
var src = t.attr("src");
return attr.replace(src, "https://dl.dropboxusercontent.com/s/rga8anccnpyublh/svg.svg");
});
},
mouseleave: function () {
var t = $(this);
t.attr("src", function(index, attr){
var src = t.attr("src");
return attr.replace(src, "https://dl.dropboxusercontent.com/s/3o4xrlvax9b08u4/svghover.svg");
});
}
}, "img.svghover");
我刚刚碰到你的问题,我不知道这对你是否还重要,但是…
我遇到了类似的情况。我不是基于鼠标悬停来替换图像的内容,而是基于其他一些复杂的条件。无论如何,我有同样的问题:图像的大小不正确。
我可以通过不使用img标记,而是使用带有对象的div来解决它。然后当我需要替换SVG时,我替换了整个对象。我不知道这是否适用于您正在尝试做的事情,但它可能值得一试。以下是使用对象嵌入SVG文件的简单示例:
<object data="my_file.svg" type="image/svg+xml"></object>
我所做的是删除图像并重置它。这不是最好的解决方案,但它有效。
var clone = $("img#unique").clone();
clone.attr("src", "newSrc");
$("img#unique").remove();
clone.appendTo($("img#unique").parent());