restart ,支持的参数有always、whenNotActive、never。always是默认值,表示每点一次重新执行动画;whenNotActive表示动画正在进行的时候不能重启动画;never表示动画仅执行一次。
begin ,延迟时间,上面已讲过,这里补充下click,表示点击后立即触发, click+2表示点击后2秒触发。
现在我们已经实现了点击爆竹后升天的效果,但是愿望牌还处于不可见状态。这里就用到“click+时间”的玩法。
5.2 愿望牌显示
在愿望牌的 内加入,由于爆竹升天动画是0.5s,所以click+0.5正好是爆竹动画结束后显示愿望牌。
<svg version="1.1" viewBox="0 0 640 800" xmlns="http://www.w3.org/2000/svg"> <g> 文字代码(略) </g> <g> <animateTransform attributeName="transform" type="translate" values="0 0;0 -350" repeatCount="1" fill="freeze" begin="click" dur="0.5s" restart="never"></animateTransform> <g> 爆竹矢量代码(略) </g> <g> + <animate attributeName="opacity" begin="click+0.5" dur="0.1s" values="0;1" fill="freeze" restart="never"></animate> 愿望牌矢量代码(略) </g> </g> </svg>
※注:请注意设置begin=click的元素和设置begin=click+0.5的元素的层级关系。首先,click元素和click+0.5元素要处于同一个 <g> 内;其次,click+0.5元素层级要比click元素的层级更深,所以能够正确的对应同一个click事件。
5.3 完成剩余爆竹
剩下两个爆竹,只需按照以上步骤,替换愿望牌的图片,然后调整元素位置即可,不再赘述。
6 导入微信公众号
6.1 上传背景图素材
以上代码中的背景图我们用的是本地的路径,需要上传至微信后台,获取线上地址。 进入微信公众平台,点击左边的素材管理->图片->上传:
上传成功后,打开图片,获取图片的线上地址:
6.2 导入微信文章正文
新建图文消息,先输入好标题、作者,上传好封面图。 然后在正文区域输入两行文字(微信要求正文必须含有文字)。
打开chrome调试工具,定位到第二行文字:
在第二行文字代码处,右击鼠标选择Edit as HTML:
替换为我们的SVG代码:
然后随便点击下其他元素的代码,有时可能会自动撤销,如果出现这种情况,再重新粘贴一次就行。
完成后,就可以发布预览啦。
6.3 注意事项
微信编辑器有很多默认的“潜规则”,可能会拒绝我们嵌入的代码,如果被拒,我们嵌入的代码将会被删除或者替换成其他的标签。这里列出我摸索出来的“潜规则”。
标签里的background的url()里,地址不能加引号,单引号双引号都不行,否则会被微信编辑器过滤掉。
标签里不能有id
不能有<style><script><a>标签。
后续有新的发现会继续更新。
6.4 奇葩BUG及技巧经验
微信Android客户端的公众号正文页里点击元素,进行移动动画后,元素可能会出现奇怪的边框。需要给涉及到的元素的 <g> 设置style="outline:none",包括 <g> 内的所有子 <g> 。
SVG图片的圆心
在用AI设计SVG的时候,最好把元素的圆心设置在SVG的中点,否则在实现rotate动画时,圆心偏离将导致元素旋转出现问题。虽然可以通过from和to的后面两个参数调节圆心位置,但是非常难手动找到精确的位置。
<animateTransform attributeName="transform" type="rotate" from="0 41.5 43" to="360 41.5 43" dur="3s" repeatCount="indefinite">
6.5 参考文献
张鑫旭的博客《超级强大的SVG SMIL animation动画详解》
https://www.zhangxinxu.com/wordpress/2014/08/so-powerful-svg-smil-animation/
SVG参考
https://www.runoob.com/svg/svg-reference.html
6.6 完整HTML代码
请前往我的github查看: https://github.com/Yuezi32/weixin_svg_demo