今天,小程序正式支持SVG

  

今天,小程序正式支持SVG

  

写在前面

  

经过腾讯Omi团队的努力,今天你可以在小程序中使用Cax引擎高性能渲染SVG !

  

SVG是可缩放矢量图形(可伸缩向量图形),基于可扩展标记语言,用于描述二维矢量图形的一种图形格式。它由万维网联盟制定,是一个开放标准. SVG的优势有很多:

  
      <李> SVG使用XML格式定义图形,可通过文本编辑器来创建和修改李   <李> SVG图像可被搜索,索,引脚本化或压缩李   <李> SVG是可伸缩的,且放大图片质量不下降李   <李> SVG图像可在任何的分辨率下被高质量地打印   <李> SVG可被非常多的工具读取和修改(比如记事本)   <李> SVG与JPEG和GIF图像比起来,尺寸更小,且可压缩性,可编程星更强李   <李> SVG完全支持DOM编程,具有交互性和动态性李   
  

而支持上面这些优秀特性的前提是,需要支持SVG标签。比如在小程序中直接写:

        & lt; svg宽度==?50”“300”高度比;   & lt;矩形   bindtap=" tapHandler "高度=" 100 "宽度=" 100 "   比;   & lt;/rect>   & lt;/svg>   之前      

上面定义了SVG的结构,样式和点击行为。但是小程序目前不支持SVG标签,仅仅支持加载SVG之后作为背景图像进行展示,如背景图片:url(“数据:图像/SVG + xml .......),或者base64后作为背景图像的url。

  

那么怎么办呢?有没有办法让小程序支持svg # 63;答案是有的!需要下面这些东西(站在巨人的肩膀上):

  
      <李> SX,史上最强UI表达式,支持书写XML-Hyperscript互转的JS语言李   <李>小程序内置帆布渲染器李   <李> Cax最新渲染引擎李   <李> HTM, Hyperscript标记的标记,可能是JSX的替代品或者另一种选择,使用西文标准的模板语法实现的Hyperscript运行时/编译时生成,提前作者(也是谷歌工程师)打造李   
  

这里稍微解释下Hyperscript:

  

比如JSX中的

        & lt; div>   你好{this.props.name}   & lt;/div>      

或者js中的htm:

        html的& lt; div>   你好{this.props.name}   & lt;/div>      

最后都会被编译成:

        h (   " div ",   空,   “你好”,   this.props.name   );      

嵌套的div也会变编译成h嵌套h,比如

        & lt; div>   & lt; div> abc
  & lt;/div>      

编译后:

        h (   " div ",   空,   h (   " div ",   空,   “abc”   )   )      

而h函数的定义也是相当简洁:

        函数h(类型、道具…孩子){   返回{类型、道具、儿童}   }      

通过h的执行可以js中拿到结构化的数据,也就是所谓的虚拟dom。需要注意的是htm有轻微的运行时开销,jsx没有。

  

一句话总结:

  

使用小程序内置的帆布渲染器,在Cax中实现SVG标准的子集,使用JSX或者HTM描述SVG结构行为表现

  

直接看在小程序种使用案例:

        从“进口{html, renderSVG} . ./. ./cax/cax '      页面({   身高=" 220 "比;   & lt;矩形bindtap=" tapHandler "   身高=" 110 "宽度=" 110 "      变换="翻译(100 50)旋转(45 50 50)”在   & lt;/rect>   & lt;/svg>”、“svg-a”,这个)      },      tapHandler:函数(){   控制台。日志(“你点击了矩形”)   }   })      之前      

其中的svg-a对应着wxml里cax-element的id:

        & lt;视图类=叭萜鳌北?   & lt; cax-element id=" svg-c "祝辞& lt;/cax-element>   & lt;/view>      

声明组件依赖

        {   " usingComponents ": {   “cax-element”:“. ./. ./cax/指数”   }   }      

小程序中显示效果:

  

今天,小程序正式支持SVG

  

可以使用宽度,高度,bounds-x和bounds-y设置绑定事件的范围,比如:

        & lt;路径宽度==" 100 " bounds-x=" 100 "高度" 50 " bounds-y=" 50 "/祝辞

今天,小程序正式支持SVG