【小程序】小程序组件-2

目录

一. 滚轮选框

二. 音频组件


一. 滚轮选框

说真的,感谢微信开发者工具,让我这种笨比能够轻松学会这种看起来相当复杂的组件

picker组件的mode有几种模式,region啦,date啦,time啦,可以自行尝试

针对想要自己定义滚轮内容的人来说,可以使用range提交滚轮内容的数组。

和上回说到的checkbox,radio一样,触发函数都可以用bindchange,至于究竟想实现什么功能就十分自由了。

这次为了和手上的项目相配合,修改了box的样式,添加了box-shadow,看起来还不错。

<view class="box">
  <view class="layout">
    <text>姓名</text>
    <input type="text" placeholder="请输入姓名" bindblur="setName"/>
  </view>
  <view class="layout">
    <view>
      性别
    </view>
    <picker range="{{gender}}" bindchange="setSex" >
    <view>
      {{sex}}
    </view>
    </picker>
  </view>
</view>
<view class="box">
  <view class="layout">
    <view>
      籍贯
    </view>
    <picker mode="region" bindchange="setPlace">
      {{regions}}
    </picker>
  </view>
  <view class="layout">
    <view>
      生日
    </view>
    <picker mode="date" start="1800-01-01" end="2023-04-13" bindchange="setDate">
      {{dates}}
    </picker>
  </view>
</view>
<button type="default" bindtap="touchOut">提交</button>
<view hidden="{{flag}}">
  <view>请核对信息</view>
  <view>姓名:{{my_name}}</view>
  <view>
    性别:{{sex}}
  </view>
  <view>
    籍贯:{{regions}}
  </view>
  <view>
    生日:{{dates}}
  </view>
</view>
const app=getApp()
var C;
Page({

  /**
   * 页面的初始数据
   */
  data: {
    gender:['男','女'],
    sex:'男',
    my_name:'',
    flag:true,
    regions:'北京市,北京市,东城区',
    dates:'2021-01-01'
  },
  setName:function(e){
    this.setData({
      my_name:e.detail.value
    })
  },
  setSex:function(e){
    this.setData({
      sex:this.data.gender[e.detail.value]
    })
  },
  setPlace:function(e){
    this.setData({
      regions:e.detail.value
    })
  },
  setDate:function(e){
    this.setData({
      dates:e.detail.value
    })
  },
  touchOut:function(e){
    this.setData({
      flag:false
    })
  }
})

二. 音频组件

audio有几个特别的属性:poster,放图片/海报;src,音频来源;name,音频名字;author,作者。

 设置完会如上图所示

代码如下所示。

<view class="box">
  <view class="title">
    音频展示
  </view>
  <audio src="{{src}}" id="myAudio" poster="{{poster}}" name="{{name}}" author="{{author}}" controls="true" loop="false" ></audio>
  <view class="bytlayout">
    <button bindtap="audioplay">播放</button>
    <button bindtap="audiopause">暂停</button>
    <button bindtap="audiojump">跳到第十四秒</button>
    <button bindtap="audioreturn">回到开头</button>
  </view>
</view>
const app=getApp()
var C;
Page({

  /**
   * 页面的初始数据
   */
  data: {
    src:"/ryqq/js/runtime~Page.99a0ad98b11e707c3e7e.js?max_age=2592000",
    poster:"https://y.qq.com/music/photo_new/T002R300x300M000004FKCj71O4Hhz_1.jpg?max_age=2592000",
    name:"在你的身边",
    author:"盛伦"
  },
  onLoad:function(options){
    this.audioCtx=wx.createAudioContext('myAudio')
  },
  audioplay:function(e){
    this.audioCtx.play();
  },
  audiopause:function(e){
    this.audioCtx.pause();
  },
  audiojump:function(e){
    this.audioCtx.seek(14);
  },
  audioreturn:function(e){
    this.audioCtx.seek(0);
  }
})

onLoad之前我们讲过,是页面加载时的渲染函数(其实我还没弄明白究竟有什么用)

三. 结合之前的组件做一个练习

1. 题目

设计一个应用,要求包含两个页面,index页面中,用户可以填写邮箱(按格式),密码和确认密码(要求相同),全部填完后点击提交可跳转到第二个页面。第二个页面中用户需要填写姓名,学号,并从picker选框中选取数值,点击提交后会显示是否确认的信息,点击确认后显示提交成功的提示。

主要样例如下:

index页面主要内容:

 第二个页面如图 

 

 2. 解析与代码

 index页面        

(1)邮箱需要一个正则表达式判断

var str=/^.   $/

str.test(my_email)

(2)确认密码bindblur判断是否和输入的密码相同,否则清空

(3)如果之前很不幸在app文件中设置了tarbar,这个页面将不能被用于navigateTo,真的很鸡肋。。

<image src="../image/banner.png" mode="aspectFill" style="height: 100px;" />
<view class="box">
  <view class="title">
    考生登录
  </view>
  <view class="hr"></view>
  <form bindsubmit="">
    <view class="bytlayout">
      <text>输入邮箱</text>
      <input type="text" value="{{email}}" bindblur="emailblur"/>
    </view>
    <view hidden="{{flagemail}}" style="color: red;text-align: center;">无效邮箱!</view>
    <view class="bytlayout">
      <text>输入密码</text>
      <input type="password" value="{{psd}}" bindblur="psdblur" />
    </view>
    <view class="bytlayout">
      <text>确认密码</text>
      <input type="password" value="{{newpsd}}" bindblur="newpsdblur"/>
    </view>
    <view hidden="{{flagpsd}}" style="color: red;text-align: center;">
      密码不一致!
    </view>
    <button type="primary" form-type="submit" bindtap="tosubmit">登录</button>
  </form>
</view>
const app=getApp()
var C;
Page({

  /**
   * 页面的初始数据
   */
  data: {
    email:'',
    psd:'',
    newpsd:'',
    flagemail:true,
    flagpsd:true,
  },
  emailblur:function(e){
    this.setData({
      email:e.detail.value
    })
    this.testemail(this.data.email);
  },
  testemail:function(email){
    var tst=/^[a-zA-Z0-9]+@[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*\.[a-zA-Z0-9]{2,6}$/
    if(tst.test(email)){
      this.setData({
        flagemail:true
      })
    }
    else{
      this.setData({
        email:'',
        flagemail:false
      })
    }
  },
  psdblur:function(e){
    this.setData({
      psd:e.detail.value
    })
  },
  newpsdblur:function(e){
    this.setData({
      newpsd:e.detail.value
    })
    var ifsame=this.tstpsd(this.data.psd,this.data.newpsd)
    if(ifsame){
      this.setData({
        flagpsd:true
      })
    }
    else{
      this.setData({
        newpsd:'',
        flagpsd:false
      })
    }
  },
  tstpsd:function(psd,newpsd){
    if(psd.length!=newpsd.length){
      return false;
    }
    for(var i=0;i<psd.length;i++){
      if(psd[i]!=newpsd[i]){
        return false;
      }
    }
    return true;
  },
  tosubmit:function(e){
    if(this.data.email==''||this.data.psd==''||this.data.newpsd==''){
      wx.showToast({
        title: '信息不完整',
        icon:'error',
        duration:2000
      });
    }
    else{
      wx.navigateTo({
        url: '../use/use',
      })
    }
  },
})

第二个页面

showModule显示框 vs showToast提示框

<!--pages/use/use.wxml-->
<view class="box">
  <view class="title">
    考试时间段选择
  </view>
  <form bindsubmit="showinfo">
    <view class="layout">
      <text>姓名</text>
      <input type="text" value="{{my_name}}" bindblur="addname"/>
    </view>
    <view class="layout">
      <text>学号</text>
      <input type="text" value="{{my_num}}" bindblur="addnum"/>
    </view>
    <view class="layout">
      <text>选择时间段</text>
      <picker range="{{time_line}}" bindchange="addtime" value="{{index}}" style="border: solid 1px black;">  
        {{my_time}}
      </picker>
    </view>
    <button form-type="submit">提交</button>
  </form>
</view>
// pages/use/use.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    time_line:["第一场:15:30","第二场:16:00","第三场:17:30"],
    my_name:'',
    my_num:'',
    my_time:'第一场:15:30',
  },
  addname:function(e){
    this.setData({
      my_name:e.detail.value
    })
  },
  addnum:function(e){
    this.setData({
      my_num:e.detail.value
    })
  },
  addtime:function(e){
    this.setData({
      my_time:this.data.time_line[e.detail.value]
    })
  },
  showinfo:function(e){
    wx.showModal({
      title: '信息确认',
      content: this.data.my_num+this.data.my_name+"的考试信息为"+this.data.my_time,
      complete: (res) => {
        if (res.cancel) {
          
        }
    
        if (res.confirm) {
          wx.showToast({
            title: '已确认',
            duration:2000
          })       
        }
      }
    })
  }
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值