做个新年签彻底弄懂SVG随机图文原理(抽签,盲盒一网打尽)
转眼就快到年底了,各大广告主都在策划圣诞和新年的营销活动,这时在公众号图文中最常见就是抽签,盲盒等随机图文效果。
这次我们用一个新年签的案例,带领大家彻底弄懂随机图文的实现原理。
相信通过这篇教程再结合自己的创意,你一定能做出更有趣的随机图文效果!
SVG随机图文原理
说了你也许会惊讶,要实现这种随机图文效果其实很简单,简单到只要用一个animateTransform标签就能搞定。
假设我们有4张新年签的图片,我们用帧模式快速的移动这4张图片,产生序列帧的效果。
当用户点击的时候,立刻暂定序列帧的播放,这时候动画会停止在用户点击时那帧图片,达到了随机抽签的效果。
代码实现很简单,注意这里要设置动画的calcMode模式为帧模式discrete,并设置动画在用户点击时停止end=”click”。
<g>
<g>
<foreignObject x="0" y="0">
<!-- 图片1 -->
</foreignObject>
</g>
<g>
<foreignObject x="1000" y="0">
<!-- 图片2 -->
</foreignObject>
</g>
<g>
<foreignObject x="2000" y="0">
<!-- 图片3 -->
</foreignObject>
</g>
<g>
<foreignObject x="3000" y="0">
<!-- 图片4 -->
</foreignObject>
</g>
<animateTransform
attributeName="transform"
type="translate"
values="0 0;-1000 0;-2000 0;-3000 0;0 0"
calcMode="discrete"
fill="freeze"
repeatCount="indefinite"
dur="0.3s"
end="click">
</animateTransform>
<g>
用事件穿透做双重触发
作为额外的福利,在这里我们讲一下事件双重触发的小技巧。
在我们的新年签案例中,当用户点击“抽一签”按钮时,触发了两组事件。
第一组事件触发了抽签动画,第二组事件使隐藏在后面的随机图文停止播放。
当touchstart事件触发时马上移除触发区域,利用click事件在移动设备上的300ms延迟,穿透到下面一层触发随机图文层的click事件。
<g>
<!-- 随机图文 -->
<g>
<animateTransform
attributeName="transform"
type="translate"
values="0 0;-1000 0;-2000 0;-3000 0;0 0"
calcMode="discrete"
fill="freeze"
repeatCount="indefinite"
dur="0.1s"
end="click">
</animateTransform>
</g>
<!-- 抽签动画 -->
<g>
<animateTransform
attributeName="transform"
type="rotate" values="-15;0;10;0;-15"
keyTimes="0;0.2;0.6;0.9;1"
calcMode="spline"
keySplines="0.5 0 0.5 1;0.5 0 0.5 1;0.5 0 0.5 1;0 0 1 1"
dur="1s"
repeatCount="3"
fill="remove"
restart="never"
begin="touchstart"
additive="sum">
</animateTransform>
</g>
</g>
总结
随机图文的原理是不是很简单!现在抽签和盲盒这些效果对你来说已经是小菜一碟,快去试试吧!