开发流程

在开发前,首先要有原型图和UI视觉图。
原型图通常是由产品经理使用Axure 绘制,原型图会用简单的图形和文字展示页面功能,比如页面元素的布局和交互逻辑。
UI视觉图就是基于原型图的页面布局出的最终视觉效果图。
当然,若页面不复杂,原型图和UI 视觉图也可能都画在一起。

我们开发者要做的,就是基于UI的视觉效果和原型图的交互逻辑开发小程序。
我们可以按照以下三步走:

  1. WXML+WXSS还原设计稿。
  2. 按照页面交互,梳理出每个页面的data部分,填充WXML的模板语法。
  3. 完成JS逻辑部分。

注意:高效的开发流程有很多种方式,具体还得看团队的工作节奏,我们刚才说的只是最常规的。
比如,若产品交互体验还不明确,我们可以先完成一些局部功能,比如与后端数据的对接,并且做好测试。

flex 布局

微信小程序里的flex 布局和网页开发中的flex 布局是一样的。
flex 布局可以实现一些灵活的比较高的效果,比如:信息列表中,要求文字在内容高度不确定下保持垂直居中。

flex 的概念

container:容器,采用flex布局的元素
item:项目,容器内的元素

容器的属性

  • display:flex;
  • flex-direction 主轴的方向 : row(默认值) | row-reverse | column |column-reverse
  • flex-wrap 换行方式: nowrap(默认值) | wrap | wrap-reverse
  • justify-content 主轴上的对齐方式 : flex-start(默认值) | flex-end | center |space-between | space-around | space-evenly
  • align-items 交叉轴上的对齐方式 : stretch(默认值) | center | flex-end | baseline | flex-start
  • align-content 多行排列时,设置行在交叉轴方向上的对齐方式,以及分配行之间及其周围多余的空间:stretch(默认值) | flex-- start | center |flex-end | space-between | space-around | space-evenly

项目的属性

  • order 项目的排列顺序 :0(默认值) |
  • flex-shrink 项目的缩小比例 :1(默认值) |
  • flex-grow 项目的放大比例 :0(默认值) |
  • flex-basis 项目的缩放基准:auto(默认值) |
  • flex 简写flex-grow+flex-shrink+flex-basis:none | auto | @flex-grow @flex-shrink @flex-basis
  • align-self 单个项目的对齐方式 :auto(默认值) | flex-start | flex-end |center | baseline| stretch

界面常见的交互反馈

用户在小程序上进行交互的时候,某些操作可能比较耗时,需要我们予以及时的反馈,去舒缓用户等待的不良情绪,这样的反馈就是交互反馈 。

常见的交互反馈有:

  • 触摸反馈
  • Toast和模态对话框
  • 界面滚动

触摸反馈

通常页面会摆放一些button按钮或者view区域,用户触摸按钮之后会给按钮换个颜色。如果此按钮是加载数据的,要显示一个loading的状态。

  • 用户触摸后的样式设置可用通过组件的hover-class属性实现,如:
.hover{background-color: #00acec;}
<button hover-class="hover"> hover</button>
  • 按钮loading 状态的显示,可以通过 组件的loading 属性实现:
<button loading="{{loading}}"  bindtap="tap">hover</button>
Page({data: { loading: false },tap: function() {// 把按钮的loading状态显示出来this.setData({loading: true})// 接着做耗时的操作}
})

Toast提示

在某个操作成功之后,我们希望提示用户这次操作成功,并且不打断用户接下来的操作。这就需要使用弹出式提示Toast,Toast提示默认1.5秒后自动消失。更多

// 显示Toast
wx.showToast({ title: '已发送',icon: 'success',duration: 1500
})
// 隐藏Toast
wx.hideToast()

模态框

在做错误提示的时候,Toast 是不合适的,因为错误提示需要明确告知用户具体原因,因此不适合一闪而过的Toast。
错误提示需要使用模态框,模态框可以让用户明确知晓自己的操作结果,同时附带下一步操作的指引。更多

wx.showModal({title: '标题',content: '告知当前状态,信息和解决方法',confirmText: '主操作',cancelText: '次要操作',success: function(res) {if (res.confirm) {console.log('用户点击主操作')} else if (res.cancel) {console.log('用户点击次要操作')}}
})

界面滚动

往往手机屏幕是承载不了所有信息的,所以就有里界面滚动。
常见的界面滚动有:下拉刷新、上拉加载。
下拉刷新:用户下拉整个界面时,可以刷新当前页面。
上拉加载:用户上拉整个界面,触底时,加载更多信息。这种交互操作叫为上拉触底。
注:scroll-view 滚动视图组件,提供了提供了丰富的滚动 回调触发事件,可以实现界面中某一区域的滚动。

HTTPS 网络通信

  1. wx.request() 的作用:往服务器传递数据,从服务器拉取信息。
  2. request() 有两种方法把数据传递到服务器:
    • get请求:通过url传递参数,如 url:‘https://test.com/getinfo?id=1&version=1.0.0’
    • post 请求:通过data传递参数,如:data: { id:1, version:'1.0.0’ },
  3. 建议使用data 传递数据,因为url 的最大长度是1024字节,url上的参数需要拼接到字符串里,参数的值还要urlEncode。
  4. 开发中的小程序的request 请求可以任意写,而正式版的小程序则必须遵循以下条件:
    • 遵循https 协议。

    • 了。

示例:
1.使用id 请求新闻内容

url:http://localhost:9000/getNews?id=1
method:’GET’

2.使用id 请求用户名

url:http://localhost:9000/getUserName
method:'POST’
data:{id:2}

微信登陆

常见的登录的问题:

  • 怎么获取用户在微信的信息
  • 怎么获取小程序用户的唯一身份标准

比如,李伟进入一个电商小程序的时候,做个判断:
如果李伟是新用户,小程序显示“李伟您好,欢迎新用户光临本店!”
如果李伟是老用户,小程序显示“李伟您好,欢迎老用户光临本店!”
在这里面,“小黑”这个昵称,我们可以通过获取用户信息的方法来得到。
然而,昵称并不能用来判断用户的唯一性,因为叫李伟的肯定有很多。我们要用openid 来判断用户的唯一性。

openid的获取方法

  1. wx.login() 方法可以获取微信登录凭证code
  2. 使用code 可以向微信服务器换取微信用户的唯一识别标志openid
  • 微信服务器提供的接口地址:https://api.weixin.qq.com/sns/jscode2session?appid=&secret=&js_code=&grant_type=authorization_code
  • AppId和AppSecret 是为了确保用code换openid的人是当前小程序的开发者

注意:
AppId 是公开信息,泄露AppId不会带来安全风险
AppSecret 是小程序秘钥,不能泄露,如果发现泄露需要到小程序管理平台进行重置。

本地数据缓存

本地数据缓存:就是将小程序的数据存储在当前设备硬盘上。
本地数据缓存的作用:

  • 存储用户在小程序上产生的操作,在用户关闭小程序重新打开时可以恢复之前的状态。
  • 缓存一些服务端非实时的数据,从而提高小程序获取数据的速度。

读取缓存

异步读取:


wx.getStorage({key: 'key1',success: function(res) {// 异步接口在success回调才能拿到返回值var value1 = res.data},fail: function() {console.log('读取key1发生错误')}
})

同步读取

try{// 同步接口立即返回值var value2 = wx.getStorageSync('key2')
}catch (e) {console.log('读取key2发生错误')
}

写入缓存

异步写入:

wx.setStorage({key:"key",data:"value1"success: function() {console.log('写入value1成功')},fail: function() {console.log('写入value1发生错误')}
})

同步写入:

try{wx.setStorageSync('key', 'value2')console.log('写入value2成功')
}catch (e) {console.log('写入value2发生错误')
}

有些商城页面一开始加载数据的时候,就会先把本地缓存的数据显示出来。等新的数据加载完成之后,就再用新的数据更新视图。
这种方式适用于对数据实时性/一致性要求不高的页面。

设备能力

小程序的宿主环境提供了很多的操作设备的能力,可以让我们提供开发效率,增强用户体验。
常见的设备能力:

  • 扫码
  • 拍照
  • 操控蓝牙
  • 获取设备网络状态
  • 调整屏幕亮度
    ……
    微信扫码能力
    wx.scanCode() :开启微信到扫码功能。
    把复杂的信息编码成一个二维码,让用户去扫,可以减少用户输入。
    如:餐厅点餐的小程序,我们给餐厅中每个餐桌编号,然后把编号到二维码中,扫码获得编号之后,就可以知道是哪一桌点了什么菜,从而大大提高了用户点餐的体验度。
  // 点击“扫码点餐”的按钮,触发tapScan回调tapScan: function() {// 调用wx.login获取微信登录凭证wx.scanCode({success: function(res) {var num = res.result // 获取到的num就是餐桌的编号}})}

微信小程序的应用场景相关推荐

  1. 微信小程序想通过场景化缩短路径

    场景化的最短路径 脱离场景讲缩短路径是耍流氓,不妨举几个例子. 6.1 线下场景 一个小程序能生成 10000 个带参数二维码,用户通过不同的二维码可以进入同一个小程序不同的页面. 拿前面公交车的例子 ...

  2. 微信小程序多音频场景处理 - 背景音频

    微信小程序多音频场景处理 - 背景音频 提到音频播放控制,不得不提背景音频这个方法wx.getBackgroundAudioManager 很不幸,这个有坑.当使用场景为单音频播放或者不需要记录每个音 ...

  3. 微信小程序适合哪些场景

    2017年1月9号,微信小程序经历一年多时间正式发布公测,张小龙发布会上再一次阐述微信推出小程序的初衷:让信息触手可及,改变应用程序需要下载.安装的繁琐过程. 这也确定可小程序的定位:无须安装.触手可 ...

  4. 微信小程序-3D地图场景+定位导航-法院3D室内导航系统-为群众提供诉讼全流程导航服务

    随着互联网信息的快速发展,我国的信息化水平也得到了全面的提升.尤其近几年在疫情的影响下,微信的小程序应用已经渗入生活的方方面面,无论是日常出行的健康码还是线上商城的购物,小程序以其轻便.响应速度快.不 ...

  5. 微信小程序的使用场景介绍

    微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 使用场景主要包括: 商城小程序:微信使用人数多,流量大,方便和快速支付,非常适合在上面开发商城. ...

  6. 微信小程序的所有场景值

    场景值ID 说明 1001 发现栏小程序主入口 1005 顶部搜索框的搜索结果页 1006 发现栏小程序主入口搜索框的搜索结果页 1007 单人聊天会话中的小程序消息卡片 1008 群聊会话中的小程序 ...

  7. 微信小程序想要最短服务路径

    微信试图用小程序来重新定义服务路径的长度.过去几个月,业界一直在讨论微信对小程序的定义:即用即走.触手可及.这一度让开发者疑惑,因为如果微信你期待我做的产品是即用即走的,那为什么我要开发小程序?难道产 ...

  8. 腾讯位置服务+微信小程序,一文告诉你程序员为什么不会坐过站!

    引言 1.1「腾讯位置服务」是什么? 立足生态,连接未来 腾讯位置服务平台依托庞大的数据生态,以定位.地图展示.地点搜索.路线规划.导航.室内图.海外图等位置服务能力和LBS大数据能力为基础,面向开发 ...

  9. 微信小程序怎么添加到主屏幕将微信小程序放到手机桌面?

    微信小程序在一些场景下使用还是非常方便,如果遇到需要经常使用的微信小程序,将该微信小程序添加到手机桌面上,下次直接点击打开将更方便. 例如:草柴微信小程序很多人每天都在用免费领取美团外卖红包优惠券.饿 ...

最新文章

  1. 我人生的第一个博客,真正的博客。
  2. 正则表达式手机固话php,手机和固话正则的记忆方法
  3. Java程序编译和运行的过程
  4. 【mysq】远程访问权限(允许远程连接)
  5. Linux打tar包排除目录中的某个目录
  6. 芯明天debug assertion failed_YJLV铝芯电力电缆的基本介绍
  7. 3+1保障:高可用系统稳定性是如何炼成的?
  8. C++ 静态成员函数
  9. SAP 函数积累(转
  10. python中pep8规范_Python PEP8规范
  11. bzoj 1655: [Usaco2006 Jan] Dollar Dayz 奶牛商店(高精度完全背包)
  12. 伯克利的云计算报告(中)
  13. vfp 生成html,vfp教程之用FoxPro生成HTML文件
  14. udev介绍及两个小场景应用
  15. 经典特别好用的局域网传输文件聊天工具飞秋和飞鸽传书
  16. C# OpenCV OpenCVSharp应用实例--LCD屏幕脏污检测
  17. package ‘gdm‘ has no installation candidate
  18. jdjjsjsjhfshafhiehf
  19. VM虚拟机Ubuntu设置静态IP方法
  20. Excel小技巧:合并单元格且不丢失数据

热门文章

  1. JSP+ssm计算机毕业设计企业订单网站b2wcu【源码、数据库、LW、部署】
  2. 【AD封装】插件压敏电阻封装(带3D)
  3. 《集体智慧编程》读书笔记4
  4. 试验数据管理系统-海岸TDM关键技术分析
  5. noip2012提高组模拟题樱桃庄园
  6. Linux 日常应用的一些小笔记
  7. ubuntu18.04安装ROS melodic
  8. 理解矩阵一、二, 三(转自孟岩blog)
  9. 对于苹果手机(ios)微信浏览器 ajax请求无法响应问题
  10. 判断今天是不是本月最后一天