我正在处理的Web应用程序的一项功能允许使用精确复制品替换DIV内的图像作为SVG。这是使用Raphael.js库完成的。
Bellow是包含图像的此类HTML元素的示例:
<div id="ow-0" reference="0" class="object-wrapper" style="z-index: 3; width: 231px; left: 116px; top: 217px; outline: rgb(0, 0, 0) solid 1px; ">
<img id="o-0" reference="0" class="object image" src="image-gallery/intermediate/3295094303_2b50e5fe03_z.jpg" />
</div>
当调用名为addSVG()
的方法时,图像父div
被设置为Raphael对象paper
,并且在隐藏原始图像之后添加了图像的SVG :
// Create the SVG and add it to the Viewport
this.addSVG = function(){
// Hide the HTML element before replacing it with the SVG
$("#o-"+this.ref).hide();
// Create the "paper" (svg canvas) before embedding the actual SVG
this.canvas = new Raphael(document.getElementById("ow-"+this.ref), this.width, this.height);
if (this.type=="image" || this.type=="QR"){
this.svg = this.canvas.image(this.src,0,0,this.width,this.height);
}
else {
}
}
几乎所有东西都是完美的,除了svg的定位,左边是-0.5px(当然这很烦人)。 Bellow是操作后产生的HTML代码:
<div id="ow-0" reference="0" class="object-wrapper" style="z-index: 3; width: 231px; left: 116px; top: 217px; outline: rgb(0, 0, 0) solid 1px; ">
<svg style="overflow: hidden; position: relative; left: -0.5px; " height="170" version="1.1" width="231" xmlns="http://www.w3.org/2000/svg">
<desc style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); ">Created with Raphaël 2.1.0</desc>
<defs style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); "></defs>
<image style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0); " x="0" y="0" width="231" height="170" preserveAspectRatio="none" xlink:href="image-gallery/intermediate/3295094303_2b50e5fe03_z.jpg"></image>
</svg>
<img id="o-0" reference="0" class="object image" src="image-gallery/intermediate/3295094303_2b50e5fe03_z.jpg" style="display: none; ">
</div>
为什么添加了-0.5px,如何防止它发生? 顺便说一句,我调整了浏览器窗口的大小,作为一个实验,并且不再添加-0.5px ......
答案 0 :(得分:5)
我找到解决此问题的唯一解决方案是将SVG的top
和left
属性(使用CSS)显式设置为0,并将CSS规则标记为{{1} }。
!important
然而,我仍然不知道问题的原因,所以如果有人有答案,请与我们分享。
答案 1 :(得分:1)
您需要调用Paper.renderfix()才能在IE9和Firefox中解决此问题。
http://raphaeljs.com/reference.html#Paper.renderfix
Paper.renderfix()
修复了关于子像素渲染的Firefox和IE9的问题。如果 回流后纸张可能会转移一半,这取决于其他元素 导致线条失去清晰度的像素。这种方法修复了 这个问题。