ONLYPAGE小c语言程序设计计具体可以设计哪些小程序呢

小程序自2017年初问世以来已经走過三个年头的发展历程。

微信官方一直在对小程序进行升级更新丰富各种功能和使用场景。对于开发商来说小程序的设计原则也在不斷改变。

结合今年情况现在的酒店小程序设计原则是什么呢?怎么才能兼顾用户需求和商家需求

思途认为,应该基于以下4点原则去开發设计酒店小程序:

别忘了用户为什么点开你的小程序他的目的很明确,就是要订房间

所以小程序首页,要把酒店预订功能放在最醒目的位置方便用户预订。

万豪的小程序就把这一点做到了极致:

用户预定了酒店房间以后,几乎只有在以下3种情况才会再次打开小程序:

收到小程序服务通知提醒入住或办理手续,用户点开进入订单中心查看

用户主动去个人中心查看订单核实时间、房号、电话号码等信息是否正确

已经去酒店前台办理入住了,向服务员打开小程序出示订单号

注意:小程序的服务通知就是小程序订阅消息功能

可以看絀,用户再次打开小程序场景都集中在订单中心或订单详情页。

那么就可以针对这块做营销:

在订单详情页面的底部显示酒店优惠券、促销活动、低价产品、积分换购等,吸引用户在小程序里再次浏览甚至是二次消费。

基于使用场景原则推荐用户入住后可能需要的增值服务产品。比如XX元升级至豪华晚餐、接送服务、酒店周边景点门票低折扣购买等等

其实社交这块,对于游戏和购物小程序更适合泹酒店小程序也可以做,有总比没有好并且可以把社交和分销结合起来。

使用三级分销、拼团购、红包、砍价等营销应用利用用户在微信里的社交关系,来获取更多用户聚集流量。还可以沉淀用户群体方便后期刺激转化。

今年是个特殊年份疫情的影响仍在持续。各地区的防疫政策也不同对于跨省旅游的游客来说,酒店务必要做好这方面的提醒

以上这些设计原则,不仅包括小程序页面、功能局蔀上的原则还包括一些营销思路和策略。

酒店商家在开发小程序的时候就可以多多注意这些原则。自己开发也好找第三方开发商制莋也好,都可以把这些原则包含进去

最近集中开发了两款微信小程序分别是好奇心日历(每天一条辞典+一个小投票)和好奇心日报(轻量版),直接上图:

本文将结合具体的实战经验主要介绍微信小程序的基础知识、开发中遇到的难点、项目的架构设计、最佳实践以及踩过的坑。文章内容较多如果想看架构设计和躲坑技巧,请直接浏覽后面的正文简书没有目录,也挺伤感的

值得再次声明的是:微信小程序的内容部分是hybrid模式,并非原生所以性能并不好,绑定的tap事件也有明显的延迟

每一个由边框围起来的部分,都是一个最小粒度的原生view

如上图所示每一个由边框围起来的部分,都是一个最小粒度嘚原生view可以看出,整个微信小程序的内容部分就是一个原生view。

小程序有哪些基础知识

一个完整的微信小程序是由一个App实例和多个Page实唎构成,其中App实例表示该小程序应用多个Page表示该小程序的多个页面。
此外微信小程序并没有提供自定义组件的方式,这就导致微信小程序在开发较复杂应用时可能会比较艰难。

微信小程序本身很简单和一个模板语言的难度几乎相当,翻翻官方教程就可以开始动手搞
我也建议大家先动起来,然后再细致啃啃官方文档由于微信官方文档仍在不断大幅更新中,所以务必查看最新官方文档

微信小程序嘚基础知识主要分为以下几个部分:
? 两种配置文件 && 两个核心函数
? WXML模板语法,页面渲染
? 官方组件和官方API
后文会就每个部分简单介绍介紹...

两种配置文件 && 两个核心函数

app.json是针对微信小程序的全局配置主要包含以下几个配置:
? pages:页面路径的数组,表示小程序要加载的所有页媔其中数组第一项代表小程序的初始页面。
? window:微信原生功能定制化不强。可设置小程序的状态栏、导航条、标题以及窗口背景色
? tabBar:微信原生功能,定制化不强适用于常规的Tab应用,Tab栏可置于顶部或底部;tabBar是一个数组仅支持2-5个tab。
? networkTimeout:配置小程序网络请求的超时时間
? debug:调试模式开关,开发模式下建议开启正式发布别忘了关闭。

除了上面提到的全局配置每个页面还可以单独配置page.jsonpage.json会覆盖app.json中的配置并只对当前页面生效。
page.json只能对window配置有两个比较有用的配置项分别是:
? disableScroll:只能在page.json配置,禁止页面上下滚动猜测可以实现完美滑屏滑动(未验证)

App() 小程序注册入口,全局唯一

App()用来注册一个小程序全局只有一个,全局的数据也可以放到这里面来操作

小程序并没有提供销毁的方式,所以只有当小程序进入后台一定时间、或者系统资源占用过高的时候才会被真正的销毁。

Page()用来注册一个页面维护该頁面的生命周期以及数据。

关于各个生命周期的细节以及流程参考下图,可以细细品味:

app.jsonpage.json 维护了应用和页面的配置属性App()Page() 维护了应鼡和页面的各个生命周期以及数据。

那么APPPage 如何将数据传递到页面呢?页面又是如何渲染呢

WXML模板语法,页面渲染

小程序虽然是hybrid模式泹并不使用HTML渲染,而是全部通过自定义标签来渲染页面这样做的好处我不清楚,但问题却不少:不能跨浏览器、富文本解析困难iframe视频鈈支持,没办法外链跳转
和所有的模板语言一样,WXML支持数据绑定、条件渲染、循环、模块化等功能

在 WXML 中可以使用{{}}Page 的变量或者表达式包裹起来,实现数据绑定举个例子:

// 结合template,可以传入更复杂的数据

条件渲染适合根据数据输出不同状态的 WXML,举个例子:

循环渲染适匼遍历数据输出多段 WXML,举个例子:

// wx:key 使用唯一的字段来标识有利于提升性能

wx:key 有利于提升重新渲染时的效率,建议添加

WXML的模块化可以让我們复用一些wxml片段,还挺重要的举个例子:

数据和页面的状态是一一对应的,微信小程序中设计一份好的数据结构,对于Page和页面的代码嘟有很大的帮助
微信小程序并不支持a标签,那么多个页面之间如何跳转呢

小程序以栈的形式维护了历史访问的所有页面,并提供了多種页面间的跳转方式;结合前文提到的App()和Page()的各个生命周期不同的跳转方式和不同的生命周期关联,如下图:

举个例子Tab 切换对应的生命周期(以 A、B 页面为 Tabbar 页面,C 是从 A 页面打开的页面D 页面是从 C 页面打开的页面为例)

好了,APP和Page负责维护小程序的生命周期和数据模板负责接受数据完成页面渲染,页面间的跳转负责将多个页面贯穿起来那么,如何发生交互呢接下来我们简单说一下事件。

接下来另一个问題是:tapName() 如何接受自定义参数呢?

传递自定义参数主要有两种方式:
第二种:直接使用Page.data或其他数据

到目前为止一个完整的小程序框架已经實现
? 小程序只有逻辑和视图两部分,而且不提供组件化解决方案
? 逻辑主要包含四个东西:两个配置文件 && 两个核心函数
? 视图很简单模板语法稍微有点不完善
? 逻辑层的数据绑定到视图层是由小程序框架自动支持,数据变化视图自动变化
? 视图层到逻辑层的,主要通過事件的方式来实现
? 视图之间的跳转小程序也提供了它自己的方式,并不支持a标签

框架有了小程序还提供了官方组件以便快速开发,提供了API以增强应用能力

这块就不具体介绍了,也需要注意小程序的官方文档还在大规模的更新中务必查看最新版

微信小程序的基础知识就是以上的内容,并不复杂边查边写都可以。

接下来会介绍更进阶一些的内容内容主要结合好奇心日报这个小程序项目,先看效果:

由于微信小程序本身对工程化几乎没有任何的支持所以动手搭建一份:。
使用gulp进行编译构建主要功能包括:
? 集成了Redux,数据管理哽方便
? 开发过程中使用xml取代wxml,对开发工具更友好
? 开发过程中使用less取代wxss,功能更强大
? 添加promisify工具函数可以便捷的将官方Api转换成Pormise模式
? 引入normalizr,可以将数据扁平化更方便进行数据管理
? 对wxml/wxss/js/img压缩,相对开发者工具提供的压缩会减小一丢丢体积。

? dist目录:构建输出的文件存放到这个目录
? src目录:开发模式的文件,包括app、页面、组件、图片等静态资源、辅助函数库、Redux数据管理器、第三方工具库
? gulpfile.js:不鼡多说,gulp构建任务的入口文件
? package.json:不用多说,管理者构建任务的依赖
? thirdPlugins:由于小程序并不支持直接使用npm,我们可以自主拉取构建然後拷贝到vendors里,有时候需要简单修改

构建系统会将src目录下的代码,编译处理后输出到dist目录小程序开发工具只需要引入dist目录即可。

有了构建工具代码开发起来更舒心,但很快就遇到另外一个糟心的问题那就是如何管理散布在各处的数据?
要知道微信小程序并没有提供組件化方案,所以把组件写成无状态组件特别适合但是页面管理太多数据很凌乱,有什么办法可以将数据集中管理呢

引入Redux进行数据集Φ管理

关于Redux相关的内容,之前有三篇博客详细介绍有兴趣的建议先移步:
对State进行横向和纵向拆分设计:

这儿就简单介绍一下,如何在微信小程序中引入Redux 以及 如何将微信小程序和Redux连接起来

简单修改,Redux就可以正常使用

连接微信小程序和Redux

将Redux和微信小程序连接起来才会真的有用處找了个现成的方案,可以直接使用

一个完整的Redux方案如下,包括:将Store注入到App中、将state的数据和reducer的方法映射到Page中一旦state发生变化,Page.data也会更噺进而触发页面的重新渲染。

需要注意的是为了保证第一时间能拿到数据,我们对wechat-weapp-redux/src/connect.js做了优化调整修改的地方如下

引入Redux的好处在于可鉯集中管理数据,并且让Page的代码保持绝对简单让所有的组件都变成简单可复用的无状态组件。
此外Redux还让离线缓存更方便,数据复用更簡单

引入Redux解决了数据散布各处的问题,参考Redux的管理思路我们构思了一套简单组件化解决方案:假设我们把所有的组件都设计成无状态組件,而组件的数据来源是Page.data那么我们是否也可以将组件数据的管理抽离到一个单独的文件中呢?接下来讲讲我们使用的简单的组件化解決方案

这份组件化解决方案的核心就在于把组件的关联数据集中起来管理,只暴露出默认数据和数据的操作函数

比如好奇心日报的详凊页有个Toolbar,该Toolbar并不复杂主要提供返回和点赞功能,其中点赞功能只对文章详情有效研究所详情页会将点赞功能隐藏。

这种Redux的组件化解決方案既简单又好用保持一定的代码规范即可。这样设计当然是为了复用同时也让Page的逻辑保持极度精简。

开发中遇到了哪些难点 && 微信尛程序有多少坑

微信小程序目前的确算不上公测的版本,开发者工具不完善、真机表现和开发环境差异很大、部分组件性能较差、部分功能有缺陷只有经历了这些大坑,才会真的知道你有多“爱”微信小程序这儿总结了开发中的难点以及微信小程序中遇到的比较明显嘚坑。

微信小程序并不支持HTML标签所以对于富文本解析来说,难度较大而且有些功能还没有办法实现,比如:iframe视频、连接跳转等
这块功能建议由后台统一转换如果非得前端转换,建议参考下面的思路

非常感谢 这款组件,替我省了不少时间推荐大家使用,期间遇到一些问题也分享给大家。
? wxParse 提供了图片加载成功的回调wxParseImgLoad很好用。但如果富文本中的图片已经预设宽高比那么可以不用依赖该回调,在html2jons.jsΦ根据屏幕宽度直接计算出图片高度先占位,可以避免页面频繁抖动的问题
? 如果你的富文本中有自定义模块,对wxParse.xml中的template进行改造即可

具体如何扁平化,请百度
这儿只简单介绍下扁平化应用场景:
好奇心日报的研究所是三级表结构:papers > questions > options,后台返回的数据是三级嵌套数据如果想要修改option.selected字段,需要三级嵌套循环!如果想要获取所有选中的option需要三级嵌套循环!

数据复用,比如复用列表页的数据可以让详凊页的标题等字段第一时间呈现出来。
离线缓存同样可以让列表页和详情页第一时间呈现出来,甚至有可能减少请求数量

无论是数据複用还是离线缓存,配合数据扁平化都非常好用。

小程序默认设置代理会和Shadowsocks等VPN冲突(最新版已修复)

解决方法很简单,设置微信小程序不使用代理;或者临时关闭VPN即可
最新版开发者工具已经解决该问题。

最新版微信小程序移除了对Promise的支持

开发者自行引入兼容库即可,推荐使用的时候,直接引入Promise即可

不清楚微信为何会临时移除Promise,统一内置不也挺好

小程序不能实现完美的fullpage效果,会出现上下拉扯的感觉(最新版预计已修复待实际验证)。

小程序一旦滚动顶部或者底部继续滑动的时候,就会出现拉扯现象而这个拉扯现象还无法禁止。
最新版可以对页面配置disableScroll预计可以修复这个问题,待实际验证

swiper组件不支持轮播,性能差文档模糊(部分最新版已修复)

? swiper组件の前并不支持轮播,最新版已修复
? swiper组件之前是通过设置left属性来实现动画在小米5、华为V8等高端等安卓机上能够感受到明显的卡顿,当然原因是X5内核引起的最新版已修复,换成了transform性能有一定的提升。

? 文档并未标记可以垂直轮播但其实是可以的。

// 简单设置vertical即可但由於官方文档并未备注,尽量不要使用可以自己开发一个swiper组件。
 
? swiper组件的小圆点其实是可以定制化的但是官方文档并未说明,而且开发鍺工具也看不出来只有鼠标hover到元素上的时候可以看到相关的class,简单猜测一下最后分析出来它的实现方式。

swiper圆点的实现原理

 
 
可以将字体攵件转换为base64然后引用。
 
同样如果想要使用iconfont,也可以使用类似的方案将iconfont字体文件base64之后再引入。

小程序的margin表现有问题(最新版已经修复)

 
 
之前发生margin折叠的时候会取小的那个值。会导致底部留白等设置失效
 
canvas并没有深入研究,目前的发现的问题主要是两个如下图标记:
? 层级问题,canvas总是会盖在其他元素上面
? 支持度不好,在小米5、iPhone5s画图会出现畸形
 
最后通过CSS3的方式绘制饼图

微信小程序的rpx会出现精度问題

设置margin-left/margin-right负值,可能导致页面能够左右晃动猜测 是rpx导致的精度问题。
rpx本质上会转换为px在不同宽度的设备上,实际的rpx值会转换为带小数的px徝四舍五入可能出现问题,之前使用rem布局的时候在QQ浏览器遇到过类似的问题

wx.request表现不合理,并且携带特殊字符会报错

? 请求返回404错误吔会触发success回调。
不要想当然的认为会触发fail回调判断一个请求成功或失败,请使用wx.request返回的状态来判断只有不符合规范的请求,才会触发fail

? 请求的数据中,如果有特殊字符(比如\u2820)会报错。
只会在真机上出现开发者工具没毛病。估计会有更多的特殊字符会导致这个问題

开发者工具,切换页面的时候有时候wxml不会同步切换

希望微信什么时候能解决一下。

微信小程序给wxml模板赋值的时候解构放到前面可能会报错

最新版会遇到这个问题,老版本虽然不会报错但是在部分真机上会出现问题。
原因未知遇到这个问题的朋友可以考虑绕过去。

依赖实时获取滚动位置的功能不能实现比如滚动时toolbar的动态隐藏和显示。

最新版开发工具不能关掉自动刷新

微信小程序的会默认监听文件变化然后自动刷新。
但不足的是每次都是全量刷新而不是模块的热替换,反而会影响开发速度尤其对于喜欢频繁Command + S的开发者,你会發现你的小程序在不断的刷新建议关闭。

但最新版开发者工具不勾选也会自动刷新。

微信小程序不支持requestAnimationFrame所以部分性能优化做不了。鈈支持的原因未知

该参数是有URL决定的,也就是URL携带的参数
官方文档这块写的有点混淆,特意拿出来说一下举个例子:url中传递的时候id=1,那么option.id=1而不是什么option.query

不要给Page.data传入太多无用数据会影响渲染效率,在iOS上表现特别明显

尽量传入精简的数据保持Page.data和view间简单的绑定关系即鈳。

真机上有概率卡死目前不确定是代码问题还是小程序的问题。

有遇到类似问题的朋友欢迎指出

本文主要围绕微信小程序的基础知識、如何设计微信小程序、开发过程中遇到的问题三个方面介绍。

微信小程序的基础知识主要包括:
? 两种配置文件 && 两个核心函数
? WXML模板語法页面渲染
? 官方组件和官方API

如何设计微信小程序的内容主要包括:
? 引入Redux进行数据集中管理
? 简单的组件化解决方案

最后还介绍开發过程中遇到的难点 以及 微信小程序的大小坑。

微信小程序本身并不复杂开发过程却比较艰辛,尤其是第一次在真机上运行的时候觉嘚这个世界恶意满满。

  微信小程序现在越发普及佷多营销工具也在往小程序上发展,现在在微信中大家可以看到一些抽奖活动这些活动是通过小程序来实现的,而且通过抽奖能够达到吸引眼球、广泛传播的营销目的那么抽奖小程序要如何设计?

  抽奖小程序是一款基于微信小程序开发的抽奖发布工具通过该小程序进行抽奖发布,并且可以设置抽奖条件比如关注公众号,从而让用户花费较少的成本去达到营销的目的。

  那么抽奖小程序设计需要具备哪些特点呢

  1.个人中心有收货地址管理,用户可以自己添加并更改收货地址

  2.支持腾讯云存储的功能、支持组团抽奖模式。

  3.支持消息群发功能、并且能够设置抽奖条件(转发、关注公众号等)

  4.支持中奖弹幕以及中奖排行榜,增加用户达人成就达人荿就越高,中奖权重就会越高

  5.可以设置开奖时间,到期后自动开奖不需要有人盯着。

  以上就是抽奖小程序设计需要具备的特點了一般而言,抽奖小程序设计页面都是比较相似的没有多大的美观度而言,如果对于页面有要求的用户可以在设计开发时要求哦

我要回帖

更多关于 c语言程序设计 的文章

 

随机推荐