小程序自学之路--可配置转盘

前言

  • 前段时间大火的微信小程序'羊了个羊',让我对微信小程序充满了好奇,萌发自学微信小程序的冲动。YY一下自己是不是也可以做出一个啥子小程序呢。

  • 经过两个星期的努力,终于完成了个初版的可配置转盘小程序,也算完成了一次学习闭环。这里记录一下学习过程,分享给同样对小程序感兴趣的萌新们。

  • 代码已在github开源:https://github.com/Spute/fun-turntable/tree/main

  • 可扫码试用小程序,查看效果:


    image.png

准备

  • 先看官方文档,简单了解一下微信小程序的开发流程。依葫芦画瓢地注册了个小程序账号,下载微信开发者工具。
  • 为了更好了解小程序开发的特点,可以将其与网页开发对比。

小程序与网页开发对比

  • 网页前端开发有三剑客:HTML、CSS、JavaScript。通过三种技术的融合产生了各式各样的网站。对应的小程序也有'三剑客'。
功能 小程序 网页
页面结构 wxml html
页面样式 wxss css
页面逻辑 js和wxs js
  • 微信小程序是没有普通网页的DOM API和BOM API,因此为了实现页面结构的动态渲染,只能通过wxml的列表渲染和条件渲染等功能。

需求

  • 先确认好需要实现的功能,以及每个功能的入口,所属哪个页面。以下简单列举了三个页面下对应的功能。
页面 功能点
转盘页 1. 转盘;2.查看&清除结果;3.分享功能
选择转盘页 1. 热门转盘,支持新增、编辑选项;2. 个人转盘,保存自定义的转盘;
设置页 1. 可配置功能(开关音乐,是否重复,设置旋转时间)

项目结构

  • 创建一个项目,查看项目结构,了解每个文件的作用后,对项目就会有个整体的认知,知道将代码写到哪合适比知道怎么写代码更重要
│  .eslintrc.js   # eslint规范配置文件
│  .gitignore     # 告诉Git要忽略项目中的哪些文件
│  app.js  # 小程序逻辑文件
│  app.json  # 小程序公共配置
│  app.wxss  # 小程序公共样式
│  project.config.json # 项目公共配置文件
│  project.private.config.json  # 项目私有配置文件
│  sitemap.json  # 用来配置小程序及其页面是否允许被微信索引
│
├─image # 用于放置资源图片
│      drop.png
│      icon-HL.png
│      icon.png
│
├─pages # page页目录
│  ├─config # 配置page页
│  │      config.js    # 页面逻辑
│  │      config.json  # 页面配置
│  │      config.wxml  # 页面结构
│  │      config.wxss  # 页面样式
│  │
│  ├─index # 首页page(转盘页)
│  │      index.js
│  │      index.json
│  │      index.wxml
│  │      index.wxss
│  │
│  ├─logs # 日志page
│  │      logs.js
│  │      logs.json
│  │      logs.wxml
│  │      logs.wxss
│  │
│  ├─select # 转盘选择page
│  │      select.js
│  │      select.json
│  │      select.wxml
│  │      select.wxss
│  │
│  └─select-edit # 转盘编辑page(二级页面)
│          select-edit.js
│          select-edit.json
│          select-edit.wxml
│          select-edit.wxss
│
└─utils # 工具文件夹,存放一些通用的脚手架
        util.js

功能分析

  • 确定好项目结构后,接下来就是根据需求制定好实施方案。

转盘实现

  • 参照效果图,可以拆分成可旋转的盘和固定的指针盘两部分组成。

    • 转盘是由9个选项文字和9条分隔线组成,选项文字和分隔线都经过一定角度的旋转
    • 中间的指针盘,是由一个圆形上面叠一个等腰三角形构成
  • 每次加载转盘页时(在onLoad方法中实现),通过奖项列表计算各选项文字和分隔线的旋转值,然后通过setData方法渲染出转盘。


    image.png
  • 以下是页面结构定义代码

# pages/index/index.wxml

<view class="canvas-container">
        <view animation="{{animationData}}" class="canvas-content">

                <view class="canvas-line">
                        <view class="canvas-litem" wx:for="{{awardsList}}" wx:key="unique" style="-webkit-transform: rotate({{item.lineTurn}});transform: rotate({{item.lineTurn}})"></view>
                </view>

                <view class="canvas-list">
                        <view class="canvas-item" wx:for="{{awardsList}}" wx:key="unique">
                                <view class="canvas-item-text" style="-webkit-transform: rotate({{item.turn}});transform: rotate({{item.turn}})">{{item.award}}</view>
                        </view>
                </view>


        </view>

        <view bindtap="getLottery" class="canvas-btn {{btnDisabled}}">开始</view>
</view>
  • 渲染转盘方法
# pages/index/index.js
drawTruntable() {
    var awardsConfig = app.awardsConfig.awards,
        len = awardsConfig.length,
        awardsList = [],
        turnNum = 1 / len
    for (var i = 0; i < len; i++) {
        // 奖项列表
        awardsList.push({
            turn: i * turnNum + 'turn',  // 文字旋转turn 值
            lineTurn: i * turnNum + turnNum / 2 + 'turn', // 线条旋转turn 值
            award: awardsConfig[i].name  // 文字
        });
    }
    this.setData({
        awardsList: awardsList
    });

},

结束语

  • 由于篇幅问题,这里只介绍了转盘页的部分功能。编辑页等的实现会在后续介绍。
  • 目前也在尝试其他技术,完善转盘项目。如接入海报插件用于朋友圈分享;完善服务端功能实现热门转盘点赞、评论等功能。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容