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

前言

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

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

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

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

准备

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

小程序与网页开发对比

  • 网页前端开发有三剑客:HTML、CSS、JavaScript。通过三种技术的融合产生了各式各样的网站。对应的小程序也有’三剑客’。
功能小程序网页
页面结构wxmlhtml
页面样式wxsscss
页面逻辑js和wxsjs
  • 微信小程序是没有普通网页的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方法渲染出转盘。

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

# 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
    });

},

结束语

  • 由于篇幅问题,这里只介绍了转盘页的部分功能。编辑页等的实现会在后续介绍。
  • 目前也在尝试其他技术,完善转盘项目。如接入海报插件用于朋友圈分享;完善服务端功能实现热门转盘点赞、评论等功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值