首页 网站首页 软件开发 公众号开发 查看内容

详细教你微信公众号正文页SVG交互开发

全网营销 2022-8-22 09:14 13461人围观 公众号开发

现在很多公众号都间接在正文页经过SVG交互动画增加文章的阅读交互体验,而不再跳转H5。连系这一需求,本期分享的内容是若何开辟交互式SVG,并嵌入微信公众号正文页。设想师和前端开辟同学都可以来参考。学会了可以接这方面的私活了,短平快地赚小钱钱。

先看下终极SVG交互结果:



1 为什么公众号需要交互SVG

技术要有落地的利用处景才能发挥实效。为什么很多公众号起头做SVG交互而放弃H5呢?

首要缘由有两点:

  1. H5建造本钱高,需要一定的开辟周期和办事器支持。
  2. 从正文页跳转H5页面多了一个步调,轻易形成用户流失。

固然,对于需要复杂交互,大概更多功用的话,还是需要零丁开辟H5。

SVG虽然只能实现简单的交互,但既能增加交互体验又不会太分离用户对内容的关注点,在很多场景下还是很有需求的。

2 利用处景

SVG交互本质还是基于SVG SMIL animation,配合SVG的click事务,实现很是简单的交互。

虽然实现的结果很有限,但还是有很多发挥空间的,比如以下利用处景:

  1. 汽车宣传】点击车子后,车子移动,经过某个位置显现某个特征或地址称号文案
  2. 【心理测试】点击某个选项后,出现挑选成果。
  3. 【拆红包】一层一层拆掉红包,显现最里面内容。
  4. 【密码解锁】点击指定的几个数字后,显现解锁内容。
  5. 【猜灯谜】点击后显现内容,类似翻牌。

下面起头讲授本期Demo的建造全进程。

3 素材建造

3.1 布景图片

利用PS等软件设想SVG的布景图,倡议宽度为640px~750px,也可以更高,但文件巨细也会增加。本例建造了 640px x 800px 的jpg布景图:



3.2 SVG素材

可以去阿里巴巴矢量图库(https://www.iconfont.cn/)网站下载。也可以自行利用AI建造。但需要留意控制好SVG的图片尺寸。SVG的图片的尺寸即点击地区,所以控制好图片中空余的留白地区。

本Demo从阿里矢量库中下载了爆竹SVG,下载后用AI翻开,缩小图片的尺寸:



3.3 导出SVG

由于微信编辑器不答应嵌入 <style><script>标签,所以经过AI导出SVG的时辰要停止一下设备:



把Styling挑选为Presentation Attributes,这样导出的SVG就不含有 <style>,而且元素的款式也会经过标签属性停止设备,而不利用style内联css。

4 构建SVG

4.1 SVG根基结构

<svg style="display: inline-block;width: 100%;background-image:url(bg.jpg);background-size: 100%,100%;background-repeat: no-repeat;" version="1.1" viewBox="0 0 640 800" xmlns="http://www.w3.org/2000/svg"></svg>

这里的style均为根本的CSS,就不再详述了。

首要说下viewBox属性:

viewBox="x, y, width, height"

x、y 控制SVG内一切元素的位移(不影响SVG的布景图)。

width、height 并不是SVG的现实宽高,而是SVG内的“分辨率”。width、height越大,SVG内的元素越小,反之,元素则越大(不影响SVG的布景图)。

倡议viewBox的x、y设备为0,width、height设备为布景图的尺寸。

4.2 放入笔墨

先利用 <text>加入笔墨:

<svg style="display: inline-block;width: 100%;background-image:url(bg.jpg);background-size: 100%,100%;background-repeat: no-repeat;" version="1.1" viewBox="0 0 640 800" xmlns="http://www.w3.org/2000/svg">
+ <text x="200" y="540" fill="#fff" style="font-size: 30px">点击爆竹放飞胡想</text>
</svg>

经过调剂x、y把位置调好,fill为笔墨色彩,style设备字号。



4.3 加入笔墨动效

现在实现笔墨的闪灼结果。这里需要利用 <animate><g>标签。

<svg style="display: inline-block;width: 100%;background-image:url(bg.jpg);background-size: 100%,100%;background-repeat: no-repeat;" version="1.1" viewBox="0 0 640 800" xmlns="http://www.w3.org/2000/svg">
+ <g>
+ <animate attributeName="opacity" begin="0s" dur="1s" values="1;0;1" repeatCount="indefinite"></animate>
<text x="200" y="540" fill="#fff" style="font-size: 30px">点击爆竹放飞胡想</text>
+ </g>
</svg

先容下 <animate>

attributeName,为动画控制的属性,这里为opacity通明度。

begin,为动画起头时候,可以了解为提早时候。0s暗示立即起头动画。也可以是分号分隔的一组值,例如beigin="3s;5s",暗示的是3s以后动画起头,6s时辰动画再重新起头(假如之前动画没走完,会立即停止重新起头)。

dur,为动画时候,dur越小,动画越快。

values,暗示attributeName指定属性的值变化,可所以一个值,也可以是用分号分隔的多个值,这里的"1;0;1"暗示“不通明->通明->不通明”,即闪灼结果。

repeatCount,暗示动画反复次数,indefinite=无数次

<g>标签很简单,就是把包起来的元素打成组合,这样animate就只针对<g>内的元素履行动画了。

结果以下:



4.4 从SVG提取爆竹代码

翻开AI天生的SVG文件,只取爆竹的矢量途径代码:



4.5 加入爆竹

加入爆竹代码,利用停止包裹,然后经过调理的translate调理位置。

<svg style="display: inline-block;width: 100%;background-image:url(bg.jpg);background-size: 100%,100%;background-repeat: no-repeat;" version="1.1" viewBox="0 0 640 800" xmlns="http://www.w3.org/2000/svg">
<g>
笔墨代码(略)
</g>
+ <g style="transform: translate(140px, 580px);">
+ <path d="M37.1,124.13v3.45a20.83,20.83,0,0,1-3.36,12.28,21.27,21.27,0,0,0-3.54,11.86,3.45,3.45,0,0,0,3.45,3.45h0a3.45,3.45,0,0,0,3.45-3.45h0c0-3.88,1.1-5.78,2.62-8.41A27.61,27.61,0,0,0,44,127.58v-3.45H37.1Z" transform="translate(-16.4 0)" fill="#c83741" />
+ <path d="M50.9,124.13v72.42A3.45,3.45,0,0,0,54.34,200h0a3.45,3.45,0,0,0,3.45-3.45h0V124.13H50.9Z" transform="translate(-16.4 0)" fill="#963737" />
+ <path d="M26.76,37.91v86.22a3.45,3.45,0,0,0,3.45,3.45H57.8a3.45,3.45,0,0,0,3.45-3.45V37.91Z" transform="translate(-16.4 0)" fill="#ff4b4b" />
+ <path d="M26.76,37.91H61.24V51.71H26.76Z" transform="translate(-16.4 0)" fill="#c83741" />
+ <path d="M17.08,36.27A365.1,365.1,0,0,0,40.89,1.75a3.64,3.64,0,0,1,6.23,0,365,365,0,0,0,23.8,34.51,3.14,3.14,0,0,1-2.46,5.09H19.55A3.14,3.14,0,0,1,17.08,36.27Z" transform="translate(-16.4 0)" fill="#ff4b4b" />
+ <path d="M61.24,58.6,26.76,68.95V55.15L61.24,44.81Zm0,27.59L26.76,96.54V82.74L61.24,72.4Zm0,27.59L26.76,124.13V110.33L61.24,100Z" transform="translate(-16.4 0)" fill="#ffcf65" />
+ <path d="M61.24,51.7v-6.9l-23,6.9Z" transform="translate(-16.4 0)" fill="#ffb450" />
+ </g>
</svg>

4.6 建造愿望牌SVG

经过AI建造愿望牌SVG,记得经过Command+Shift+O,把笔墨转化为矢量。然后依照3.3章节导出SVG。



4.7 加入愿望牌

愿望牌是在爆竹升天后显现的,现实上是盖在了爆竹前面,爆竹并没有消失。所以愿望牌的代码应当写在爆竹代码的前面。从SVG提取愿望牌代码参照4.4章节,并调理位置,加入后的代码以下:

<svg style="display: inline-block;width: 100%;background-image:url(bg.jpg);background-size: 100%,100%;background-repeat: no-repeat;" version="1.1" viewBox="0 0 640 800" xmlns="http://www.w3.org/2000/svg">
<g>
笔墨代码(略)
</g>
<g style="transform: translate(140px, 580px);">
爆竹矢量代码(略)
</g>
+ <g style="transform: translate(120px, 560px);">
+ 愿望牌矢量代码(略)
+ </g>
</svg>

结果以下,愿望牌完全盖住了爆竹:



4.8 设备愿望牌初始属性

由于愿望牌初始状态未不偏见,所以将opacity设为0。

<svg style="display: inline-block;width: 100%;background-image:url(bg.jpg);background-size: 100%,100%;background-repeat: no-repeat;" version="1.1" viewBox="0 0 640 800" xmlns="http://www.w3.org/2000/svg">
<g>
笔墨代码(略)
</g>
<g style="transform: translate(140px, 580px);">
爆竹矢量代码(略)
</g>
M <g style="transform: translate(120px, 560px);opacity: 0;">
愿望牌矢量代码(略)
</g>
</svg>

5 SVG点击交互

5.1 爆竹升天

我们要实现的是经过“一次点击”,爆竹上天,然后愿望牌出现。爆竹和愿望牌要打成组。

接下来,利用实现click触策动画。

<svg style="display: inline-block;width: 100%;background-image:url(bg.jpg);background-size: 100%,100%;background-repeat: no-repeat;" 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 style="transform: translate(140px, 580px);">
爆竹矢量代码(略)
</g>
<g style="transform: translate(120px, 560px);opacity: 0;">
愿望牌矢量代码(略)
</g>
+ </g>
</svg>

关键属性讲授:

type, attributeName="transform"的值,可所以 translate、scale、rotate、skewX、skewY。

fill,动画间隙的添补方式。支持参数有:freeze、remove。remove是默许值,暗示动画竣事间接回到起头的地方。freeze暗示动画保持竣事后的状态。

restart,支持的参数有always、whenNotActive、never。always是默许值,暗示每点一次重新履行动画;whenNotActive暗示动画正在停止的时辰不能重启动画;never暗示动画仅履行一次。

begin,提早时候,上面已讲过,这里补充下click,暗示点击后立即触发,click+2暗示点击后2秒触发。

现在我们已经实现了点击爆竹后升天的结果,可是愿望牌还处于不偏见状态。这里就用到“click+时候”的玩法。

5.2 愿望牌显现

在愿望牌的内加入,由于爆竹升天动画是0.5s,所以click+0.5恰好是爆竹动画竣事后显现愿望牌。

<svg style="display: inline-block;width: 100%;background-image:url(bg.jpg);background-size: 100%,100%;background-repeat: no-repeat;" 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 style="transform: translate(140px, 580px);">
爆竹矢量代码(略)
</g>
<g style="transform: translate(120px, 560px);opacity: 0;">
+ <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元素要处于同一个内;其次,click+0.5元素层级要比click元素的层级更深,所以可以正确的对应同一个click事务。

5.3 完成残剩爆竹

剩下两个爆竹,只需依照以上步调,替换愿望牌的图片,然后调剂元素位置即可,不再赘述。

6 导入微信公众号

6.1 上传布景图素材

以上代码中的布景图我们用的是当地的途径,需要上传至微信背景,获得线上地址。进入微信公众平台,点击左侧的素材治理->图片->上传:



上传成功后,翻开图片,获得图片的线上地址:



6.2 导入微信文章正文

新建图文消息,先输入好题目、作者,上传好封面图。然后在正文地区输入两行笔墨(微信要求正文必须含有笔墨)。

翻开chrome调试工具,定位到第二行笔墨:



在第二行笔墨代码处,右击鼠标挑选Edit as HTML:



替换为我们的SVG代码:



然后随意点击下其他元素的代码,偶然能够会自动撤消,假如出现这类情况,再重新粘贴一次就行。

完成后,便可以公布预览啦。

6.3 留意事项

微信编辑器有很多默许的“潜法则”,能够会拒绝我们嵌入的代码,假如被拒,我们嵌入的代码将会被删除大概替换成其他的标签。这里列出我试探出来的“潜法则”。

  1. 标签里的 background的url()里,地址不能加引号,单引号双引号都不可,否则会被微信编辑器过滤掉。
  2. 标签里不能有id
  3. 不能有 <style><script><a>标签。

后续有新的发现会继续更新。

6.4 奇葩BUG及技能经历

  1. 微信Android客户真个公众号正文页里点击元素,停止移动动画后,元素能够会出现希奇的边框。需要给触及到的元素的<g>设备style="outline:none",包括<g>内的一切子<g>


2. 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/2022/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

本文在同步公布在“掘金”和“简书”。

掘金:https://juejin.im/post/5d37e1fce51d455d88219fca

简书:https://www.jianshu.com/p/8c2e4fc26e8a

以上就是本期的分享内容,感激旁观。实时获得最新出色文章,接待关注我的小我公众号^_^

http://weixin.qq.com/r/JzpyaiDEpH3brWQJ9281 (二维码自动识别)

高端人脉微信群

高端人脉微信群

人脉=钱脉,我们相信天下没有聚不拢的人脉,扫码进群找到你所需的人脉,对接你所需的资源。

商业合作微信

公众号开发合作

本站创始人微信,13年互联网营销经验,擅长引流裂变、商业模式、私域流量,高端人脉资源丰富。

精彩点评
  • 极品小处男处v 2022-8-22 09:25
    大神,我面临一个问题就是点击a选项展开相应的图片,点击b选项展开关于b的图片。我应该如何判断点击的是a还是b,就是类似于https://mp.weixin.qq.com/s?__biz=MjM5MDA1ODAzMg==&amp;mid=2651171056&amp;idx=1&amp;sn=810c1fb324989ec570b622eb255223d5&amp;scene=21#wechat_redirect这个链接上的公众号文章的效果
  • 白云追月素 2022-8-22 09:24
    这是什么良心文章
    吃惊
  • 永远爱你冰塘 2022-8-22 09:24
    你好,请问一下怎样避免script标签被微信拒绝啊
  • 胡胡胡美丽_ss 2022-8-22 09:23
    非常非常感谢!!希望作者时不时更新一点,已经在认真研读背诵指令了
  • 潘金麟 2022-8-22 09:22
    提个问题:想要设置爆竹升空时消失,在爆竹的g标签中增加了amimate设置opacity变化,但是运行时无法与祝福语的动画同时进行。这是为什么呢?
  • 王建新1 2022-8-22 09:22
    woc 简直保姆级教程 我哭了

查看全部评论>>

相关推荐

从零开始 Python 微信公众号开发

从零开始 Python 微信公众号开发

前些日子在知乎上看到了一篇文章 Python公众号开发部分代码开源 - 学习编程 - 知乎专

新手如何开通一个属于自己的公众号(教程)

新手如何开通一个属于自己的公众号(教程)

▼纯教程,并没有多少技术含量▼在16年的时候,我就开始弄公众号了,断断续续到现在也

详细教你微信公众号正文页SVG交互开发

详细教你微信公众号正文页SVG交互开发

现在很多公众号都直接在正文页通过SVG交互动画增加文章的阅读交互体验,而不再跳转H5

Windows 11 运行安卓子系统安装教程

Windows 11 运行安卓子系统安装教程

Windows 11在发布初期,微软就画了个大饼,表示将提供WSA,一个可以在PC上运行Android

玩转公众号自定义菜单的6个方法(基础篇+开发篇)

玩转公众号自定义菜单的6个方法(基础篇+开发篇)

​公众号运营系列 NO.3:自定义菜单关键词:公众号菜单怎么设置 公众号自定义菜单 公

基于Spring Boot的注解驱动式公众号极速开发框架FastBootWeixin

基于Spring Boot的注解驱动式公众号极速开发框架FastBootWeixin

本框架基于Spring Boot实现,使用注解完成快速开发,可以快速的完成一个微信公众号,

情侣天气推送(微信公众号)

情侣天气推送(微信公众号)

一、简介最近抖音上面有个很火的天气推送的公众号,可以给自己爱的人进行定时推送。效

如何建立一个微信公众号(个人)

如何建立一个微信公众号(个人)

如何建立一个微信公众号一、定位首先要对公众号有一个定位,比如说美妆、时尚、校园生

Python微信公众号开发—小白篇(一)

Python微信公众号开发—小白篇(一)

本文面向想通过Python学习公众号开发的同学。一站式解决新手开发微信公众号遇到的所有

我的公众号开发(第一步)简单功能实现

我的公众号开发(第一步)简单功能实现

作者:JiawuZhang 出品:JiawuLab(ID:jiawulab) 实验记录系列是JiawuLab原创栏目,

几分钟内上线一个网站,GitHub 又一低代码神器,开源了 ...

几分钟内上线一个网站,GitHub 又一低代码神器,开源了 ...

众所周知,每家公司在发展过程中都需要构建大量的内部系统, 比如运营使用的用户管理

手把手教你快速搭建一个属于自己的微信公众号服务平台

手把手教你快速搭建一个属于自己的微信公众号服务平台

今天给大家分享一下如何快速搭建一个公众号服务平台。基本服务端的搭建1、首先搭建最

只要三分钟,创建一个属于你的微信公众号

只要三分钟,创建一个属于你的微信公众号

最近有许多人在问怎么注册微信公众号,今天我就给大家做一个注册微信公众号的教程。微

会布局的才是运营高手!3200字教会你如何搭建公众号矩阵

会布局的才是运营高手!3200字教会你如何搭建公众号矩阵

编辑导语:如何搭建微信公众号矩阵?首先,你需要了解微信公众号矩阵是什么、建立微信

手把手教你搭建公式识别公众号

手把手教你搭建公式识别公众号

上次弄了个公式识别的公众号,有人问如何实现,今天趁着周末把整个流程讲下。其实我对

微信公众号开发 腾讯云 Python

微信公众号开发 腾讯云 Python

最近申请了个微信公众号,发现其提供的基础功能只有一个——向用户推送图文消息,其他

9个公众号排版编辑网站,有3个是完全免费的!

9个公众号排版编辑网站,有3个是完全免费的!

大家好,我是番喜,今天给大家分享9个自媒体排版编辑网站,这年头谁还没有个公众号鸭

用 Python 进行微信公众号开发

用 Python 进行微信公众号开发

今天看到篇教程,是用python开发微信公众号的,觉得有意思,就敲代码实现了一下,成功

我开发了一款插件,Notion Converter帮你实现Notion一键 ...

我开发了一款插件,Notion Converter帮你实现Notion一键 ...

2023.1.2更新:当前产品已经发布上线你好呀,我是盾宇,我是一名测试开发工程师,最近

JavaScript——记一次微信公众号开发过程

JavaScript——记一次微信公众号开发过程

微信公众号是社交平台上一个不错的选择,构建与读者之间良好的互动,但对于开发者来说

商业洽谈 文章投递 寻求报道
电话咨询: 15924191378
关注微信