提问者:小点点

悬停图像替换后,SVG图像在MacSafari中以不正确的大小呈现


请看小提琴: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");

共2个答案

匿名用户

我刚刚碰到你的问题,我不知道这对你是否还重要,但是…

我遇到了类似的情况。我不是基于鼠标悬停来替换图像的内容,而是基于其他一些复杂的条件。无论如何,我有同样的问题:图像的大小不正确。

我可以通过不使用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());