IE8展示SVG图像问题处理

问题背景如下:

系统采用dorado5。只能支持在IE8以下内核版本才能稳定运行。但在IE8-以及Android 2.3默认浏览器是不支持SVG的。

有一个功能需要使用svg矢量图,但是直接用矢量图的js插件画图形太多复杂,因此想将画完的svg文件直接显示,或者转成js代码来显示。同事交接给我时,原来使用的是Raphael插件raphael-svg-import.js,该插件会自动将字符串形式传入的svg代码转为vml代码,同样也是会出现部分图形无法展示的问题。


首先简单了解一下Raphael:

Raphael是以SVG和VML(在IE5-8支持的格式)为基础的。如果想在IE5-8显示矢量图形,必须使用Raphael库。Raphael的API和SVG和jquery一样属于独立的API.Raphael并非是作为图像格式使用的,需要通过Javascript绘制。

而SVG在是刚刚在IE9当中支持的。不是任何浏览器中都能支持的。

以上转自博客:http://blog.csdn.net/baohanqing/article/details/17688385。



先后对比了其他的几个矢量图形的js插件,如echar,highchar,D3等,发现对于IE8以下的浏览器兼容性最好的其实还是Raphael。

然后偶然间找到一个国外的网站http://readysetraphael.com/可以提供将svg文件转为Raphael代码。转换效果比raphael-svg-import.js好得多。


以下为Raphael在IE8以下操作svg图形的解决方案:

1、http://readysetraphael.com/转换工具只支持以下格式的svg元素转换,无法展示虚线。

注:线条用矩形代替

2、通过AI画好的图形建议都添加轮廓,保证转换后的代码不会发生位移。后续可能需要在代码中做操作的数据部分用文本表示,在画完AI后置顶到最上层,方便在生成的raphael代码中找到对应的文本对象。

3、通过readysetraphael转换的文本代码,位置有所偏移x:+12,y:-7(向右偏移12像素,向上7像素)。需要修改转换后文本对象的位置代码。

4、在jsp中通过js操作svg的元素对象可先在IE内核下进行debug,选中要操作的图形,找到对象的raphaelid。在使用raphael的getById(num)方法获取到对象。
 

示例代码:

var rsr;
var text_eo = 0.5;
var text_ep = 1;

function Init(){
    rsr = Raphael(10, 10, 1000, 1500);
    
    //......
    var text_ep = rsr.text(0, 0, '1.0');
    text_ep.attr({"font-family": 'MicrosoftYaHei',"font-size": '18','stroke-width': '0','stroke-opacity': '1','fill': '#000000'});
    text_ep.transform("m1 0 0 1 314.252 317.8833").data('id', 'text_ep');
    var text_eq = rsr.text(0, 0, '0.2');
    text_eq.attr({"font-family": 'MicrosoftYaHei',"font-size": '18','stroke-width': '0','stroke-opacity': '1','fill': '#000000'});
    text_eq.transform("m1 0 0 1 326.6104 154.6362").data('id', 'text_eq');
    //......

}

function Init1(){
    text_eo += 0.5;
    text_ep += 1;
    
    //在ie内核下调试,获取要修改的svg图像的raphaelid
    rsr.getById(106).attr('text',text_ep);
    rsr.getById(107).attr('text',text_eq);
    
    rsr.getById(0).attr('fill','#'+text_ep+text_ep+text_ep+text_ep+text_ep+text_ep);
}

window.onload = Init;//页面加载完毕后执行初始化方法init    







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值