总结微信小程序中的一些知识

902 阅读3分钟

一、微信小程序中的单位rpx

注:开发微信小程序时设计师可以用iPhone6作为设计稿的标准。

建议:设计稿使用设备宽度750px,比较容易计算,750px的设计稿,1rpx=1px,这样的话,设计稿上量出来的尺寸是多少px就是多少rpx,至于在不同的设备上实际上要换算成多少个rem就交给小程序自己换算了。

二、微信小程序页面跳转的几种方法

1、wx.navigateTo(object) 保留当前页面,跳转到应用内的某个页面。

 wx.navigateTo({
   url: '/pages/budget/budget?id=' + id,
 })
注:小程序中左上角有一个返回箭头,可返回上一个页面,也可以通过方法 wx.navigateBack 返回原页面

2、wx.redirectTo(object) 关闭当前页面,跳转到应用内的某个页面。

wx.redirectTo({
   url: '/pages/budget/budget?id=' + id,
 })
注:小程序左上角没有返回箭头,不能返回上一个页面

3、wx.switchTab(object) 跳转到 tabBar 页面,并关闭其他非 tabBar 页面

{
  "tabBar": {
    "list": [{
      "pagePath": "index",
      "text": "首页"
    },{
      "pagePath": "other",
      "text": "其他"
    }]
  }
}
wx.switchTab({
  url: '/index'
})
注:wx.navigateTo 和 wx.redirectTo 不允许跳转到 tabBar 页面,只能用 wx.switchTab 跳转到 tabBar 页面

4、wx.reLaunch(object) 关闭所有页面,打开到应用内的某个页面。

wx.reLaunch({
  url: 'test?id=1'
})
注:跟wx.redirectTo一样左上角不会出现返回箭头,但两者却不完全相同

区别:

(1)在wx.navigateTo中,每跳转一个新的页面,其原始页面就会被加入堆栈,通过调用wx.navigateBack(object),可通过获取堆栈中保存的页面,返回上一级或多级页面;
(2)wx.redirectTo方法则不会被加入堆栈,但仍可通过wx.navigateBack(object)方法返回之前堆栈中的页面
(3)wx.reLaunch方法则会清空当前的堆栈。

三、小程序实现多button单选/多选

1、wxml 样式选中改变是通过三元运算符实现的

<!--pages/button-select/button-select.wxml-->
<view class='button_container'>
  <block wx:for="{{buttons}}" wx:key="buttons">
  <button class='{{item.checked?"checked_button":"normal_button"}}' data-id='{{item.id}}' bindtap='radioButtonTap'>{{item.name}}</button>
  </block>
</view>

2、在Page({...})中填充数据

data: {
    buttons: [{ id: 1, name: '银色' }, { id: 2, name: '白色' }, { id: 3, name: '黑色' }],
  },

3、默认第一个按钮被选中

onLoad: function (options) {
    this.data.buttons[0].checked = true;
    this.setData({
      buttons: this.data.buttons,
    })
  },

4、在Page({...})中添加事件监听方法(单选)

/**
 * 事件监听,实现单选效果
 * e是获取e.currentTarget.dataset.id所以是必备的,跟前端的data-id获取的方式差不多
 */
radioButtonTap: function (e) {
    console.log(e)
    let id = e.currentTarget.dataset.id
    console.log(id)
    for (let i = 0; i < this.data.buttons.length; i++) {
      if (this.data.buttons[i].id == id) {
        //当前点击的位置为true即选中
        this.data.buttons[i].checked = true;
      }
      else {
        //其他的位置为false
        this.data.buttons[i].checked = false;
      }
    }
    this.setData({
      buttons: this.data.buttons,
    })
  },

5、在Page({...})中添加事件监听方法(多选)

注:记得在wxml中修改绑定方法bindtap='radioButtonTap'
checkButtonTap:function(e){
    console.log(e)
    let id = e.currentTarget.dataset.id
    console.log(id)
    for (let i = 0; i < this.data.buttons.length; i++) {
      if (this.data.buttons[i].id == id) {
        if (this.data.buttons[i].checked == true) {
          this.data.buttons[i].checked = false;
         
        } else {
          this.data.buttons[i].checked = true;
          
        }
      }
    }
   this.setData({
     buttons: this.data.buttons,
    })
    
  }

四、微信小程序显示与隐藏hidden

1、wxml

<view bindtap='clickMe'>点击</view>
//这是显示隐藏的部分
<view hidden="{{hiddenName}}">隐藏显示部分</view>

2、js

page({
    data:{
        hiddenName:true  //默认隐藏
    },
    clickMe:function(e){
        this.setData({
            hiddenName:(!this.data.hiddenName)
        })
    }
})

五、微信小程序实现tab选项卡

1、wxml

<!--pages/detail/detail.wxml-->
<view class="swiper-tab">
    <view class="swiper-tab-item {{currentTab==0?'active':''}}" data-current="0" bindtap="clickTab">全部</view>
    <view class="swiper-tab-item {{currentTab==1?'active':''}}" data-current="1" bindtap="clickTab">提现中</view>
    <view class="swiper-tab-item {{currentTab==2?'active':''}}" data-current="2" bindtap="clickTab">已提现</view>
</view>

<swiper current="{{currentTab}}" duration="300"  bindchange="swiperTab">
    <swiper-item ><view>全部</view></swiper-item>
    <swiper-item><view>提现中</view></swiper-item>
    <swiper-item><view>已提现</view></swiper-item>
</swiper>

2、js

// pages/detail/detail.js
var app = getApp()
Page({
  data: {
    currentTab: 0
  },
  onLoad: function (options) {
    // 页面初始化 options为页面跳转所带来的参数

  },
  //滑动切换
  swiperTab: function (e) {
    var that = this;
    that.setData({
      currentTab: e.detail.current
    });
  },
  //点击切换
  clickTab: function (e) {
    var that = this;
    if (this.data.currentTab === e.target.dataset.current) {
      return false;
    } else {
      that.setData({
        currentTab: e.target.dataset.current
      })
    }
  }
})

链接

微信公众平台

微信官方文档

小程序开发总结

小程序实时聊天socket