小程序初体验

要求实现一个日签功能,提供一个背景图片集合,文案集合,点击按钮可随机组合,形成一张海报,可支持下载。

功能点:

  1. 点击换个背景按钮,随机替换图片
  2. 点击换个灵感按钮,随机替换文案
  3. 右下角logo可以由用户选择上传,并需要裁剪,裁剪宽高比1:1
  4. 点击下载海报,将图片生成保存到相册

第一次接触小程序,花了将近一周的时间写出了两个页面,一个是首页,一个是预览海报页面,如下图。还包括上面提到的一些功能实现。

首页

点击预览,跳转到预览页面
预览页

页面搭建没太多要说的,只要能够灵活使用定位,浮动和层级这些,很快就能把样式搭出来。我们来着重说下功能。
功能描述

当点击换个背景时,中间区域的图片会随机更换,点击换个背景时,图片下方的文字也会随机更换,这两个功能其实是一个功能,实现方式一样,就是随机获取data中的图片数组和文字数组的下标,再渲染到页面上,我是这么实现的
data:

imgUrls: [

      'http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg',
      'http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg',
      'http://img06.tooopen.com/images/20160818/tooopen_sy_175833047715.jpg'],
    imgIndex:0,   
    texts:[
        '早上叫我起床的不是贫穷而是闹钟',
        '人所缺乏的不是才干而是志向。',
        '勇敢坚毅真正之才智乃刚毅之志向。',
      ],
    textIndex:0,

函数实现

//实现换个背景功能
  changeBg:function(e){
  
    var imgIndex=Math.floor(Math.random() * this.data.imgUrls.length)
    
    console.log('图片选择改变,携带值为',this.data.imgIndex=imgIndex,this.data.imgUrls[imgIndex])
    this.setData({
      imgIndex:imgIndex
    })
    console.log(this.data.imgIndex);
  },
//实现换个灵感功能
  changeMind:function(e){
    
    var textIndex=Math.floor(Math.random() * 3)
    
    console.log('文字选择改变,携带值为',this.data.textIndex=textIndex)
    this.setData({
      textIndex:this.data.textIndex
    })
  },

在index.wxml页面通过bindtap='函数名'来调用函数
在前端页面是这样取到js获得的数据


                      
                          
                             
                           
                      
                               
            
            
                    
                          
                           {{texts[textIndex]}}
                          
                     
            

好啦,这样就实现了两个功能!
在开始第三个功能时,我发现文字左下角还要获取当天的日期,毕竟是日签嘛。
在小程序中,新建项目时,就会有一个utils.js文件,就是获取日期和时间的
但这里只要日期,于是我修改了一下
util.js

const formatTime = date => {
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hour = date.getHours()
  const minute = date.getMinutes()
  const second = date.getSeconds()

  return [month, day].map(formatNumber).join('-')
}

const formatNumber = n => {
  n = n.toString()
  return n[1] ? n : '0' + n
}

module.exports = {
  formatTime: formatTime
}

在index.js的onload函数里

 var time = util.formatTime(new Date());
    this.setData({
      time:time
    });

index.wxml

{{time}}

改一改样式,就可以在自己想要的位置显示日期啦~
实现第三个函数时,在右下角logo那里绑定一个点击事件,调用上传函数
index.wxml


index.js

//从本地上传图片
  upload () {
    wx.chooseImage({
      count: 1, // 默认9
      sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
      sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
      success (res) {
        const src = res.tempFilePaths[0]

        wx.redirectTo({
          url: `../upload/upload?src=${src}`//将该图片的临时路径传到upload.js里
        })
      }
    })
  },

利用wx.redirectTo重定向到upload页面


upload.png

upload.wxml