微信小程序课程学习笔记

  • 聚客宝
  • 2021-08-06 15:38:42


(1)页面切换操作


1)wxml的页面标签添加事件跟踪

<view bindTap='onTap'></view>

事件名称前加bind绑定;


2)js文件添加跟踪事件函数


onTap=function(){

//转到带返回的子页面

wx.navagateTo({

url:"../post/post"

})

//转到不带返回的页面

wx.redirectTo({

url:"../post/post"

})

}


(2)空白文件调试错误的处理


1)空白json文件,添加 {},可以避免调试报错;


2)空白js文件,添加Page{},可以避免调试报错;

Page{}的第一字母要大写,否则会报错;


3)app.js,空白文件不要添加page{},否则会报错

如果在app.js中加入Page({}),就会出现上面的报错,所以要,app.js文件不许加入。

错误提示如下:Please do not register multiple Pages in undefined.js


(3)数据捆绑问题

数据从wxml文件分离到js文件中


1)js文件data提供数据

var local_datas=[

{

"url":[

"www.tiantuo.net",

"www.jukebao.com",

"www.exsky.net"

],

"myname":"echo",

"school":"HIT"

},{

"url":[

"www.tiantuo.net",

"www.jukebao.com",

"www.exsky.net"

],

"myname":"echo",

"school":"HIT"

}

]

//导入数据

module.exports = {

  postlist: local_data

}


2)页面js文件导入


var postdatas=require('data.js');


onload:function(options){

this.setData=({

postlist2: postdatas

})

}


3)wxml捆绑数据


{{ postlist2.postlist[0].url[0] }}




(4)页面传递参数


1)页面元素捆绑事件,及传递参数

bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。

传递是采用标签内添加属性 “data-传递变量名”,传递变量名最好采用小写,如果用连字符“-”,第一个字母会转为大写,连字符省略。

<view bindtap='onTap' data-postid='1'></view>


2)js文件添加事件函数


onTap:function(event){

var postid=event.currentTarget.dataset.postid;

wx.navigaterTo({

url:"../post/post?id="+postid;

})

}


(5)tabbar底部(顶部)标签菜单


1)需要在app.json中设置

"tabbar":{

list:[{

"pagepath":"post/post",

"text":"首页"

},{

"pagepath":"wellcom/wellcom",

"text":"页面"


}]

}



2)添加首页后,其他页面都会出现


(6)导入样式表

@import "pages/style/weui.wxss"



(7)页面布局flexbox


在定义子元素<view>的时候,不要再单独定义class值来设定循环主参数,直接定义标签,否则垂直方向的效果(align-items,align-content)不起作用,单个循环元素可以定义class来处理


<view class='container'>

<view class='sp1'></view>

<view class='sp2'></view>

</view>


.container{

display: flex;

flex-flow: row wray;


}


.container view{

width:150rpx;

height:500rpx;


}


1)display

display: flex | inline-flex


flex 用于产生块级伸缩容器,

inline-flext 用于产生行内级伸缩容器


在flex-wrap:nowrap时,

flex状态下子元素会自动缩小把所有元素都显示

inline-flex状态下,子元素大小不变,超出的部分会自动剪切掉。


在flex-wrap:wrap时,两者没有看出有什么区别。


2)flex-direction

flex-direction: row  | row-reverse  | column  | column-reverse


row 水平方向从左向右

row-reverse 水平方向从右向左

column 伸缩容器为垂直方向,伸缩项目的排版方式为从上到下

column-reverse 伸缩容器为垂直,伸缩项目为从下到上


3)flex-wrap

该属性用来指定伸缩容器的主轴线方向空间不足的情况下,是否换行以及该如何换行

flex-wrap: nowrap | wrap  | wrap-reverse 


nowrap 空间不足是也不换行

wrap 空间不足可以换行

wrap-reverse 空间不足可以换行,若主轴为水平轴,则换行的方向为从下到上,和wrap相反


4)flex-flow

该属性是flex-direction和flex-wrap属性的缩写版本,它同时指定了伸缩容器的主轴和侧轴,其默认属性为row nowrap

flex-flow: flex-direction | flex-wrap


5)justify-content

该属性用来定义伸缩项目沿主轴线的对齐方式

justify-content: flex-start | flex-end | center | space-between | space-around


flex-start flex-start伸缩项目向主轴线的起始位置靠齐

flex-end 伸缩项目向主轴线的结束位置对齐

center 缩项目向主轴线的中间位置靠齐

space-between 伸缩项目会平均的分布在主轴线里,两端保留一半的空间

space-around 伸缩项目会平分在主轴线里,第一个伸缩项目在主轴线的开始位置,最后一个伸缩项目在主轴线的终点位置


6)align-items

该属性用来定义伸缩项目在伸缩容器的交叉轴上的对齐方式

align-items: flex-start | flex-end | center | baseline |  stretch;


flex-start 伸缩项目沿交叉轴的起始位置对齐

flex-end 沿交叉轴的结束位置对齐

center 伸缩项目沿交叉轴的中间位置靠齐

baseline 伸缩项目根据它们的基线对齐

stretch 伸缩项目在交叉轴方向拉伸填充整个伸缩容器


7)align-content

用来调整伸缩项目出现换行后在交叉轴上的对齐方式,类似于伸缩项目在主轴上使用justify-content

align-content: flex-start | flex-end | center | space-between | space-around | stretch


flex-start 伸缩项目向交叉的起始位置靠齐

flex-end 伸缩项目向交叉轴的起始位置靠齐

center 伸缩项目向交叉轴的中间位置靠齐

space-between 伸缩项目在交叉轴中平均分布(顶部底部不留空隙,元素垂直方向有空隙)

space-arround 伸缩项目在交叉轴平均分布,且两边各有一半空间(顶部底部留出空隙,元素处置方向有空隙)

stretch 伸缩项目将会在交叉轴上伸展以占用剩余空间


8)order

用于定义排列顺序,数值越小,排列越靠前,默认值为0


9)flex-grow

用于定义伸缩项目的放大比例,默认值0,即如果存在剩余空间,也不放大;

如果所有伸缩项目的flex-grow设置为1,那么每个伸缩项目将设置为大小相等的剩余空间,

如果你将其中一个flex-frow伸缩项设置为2,那么这个伸缩项目所占剩余空间是其他伸缩项目所占胜于空间的两倍


10)flex-shrink

该属性用来定义伸缩项目的收缩能力


11)flex-basis

该属性用来设置伸缩项目的基准值,剩余空间按比率进行伸缩


12)flex

该属性是flex-grow ,flex-shrink,flex-basis属性的缩写

flex: none | flex-grow flex-shrink flex-basis

其中第二个参数和第三个参数(flex-shrink,flex-basis)是可选参数,默认为0 1 auto


13)align-self

用于设置单独的伸缩项目在交叉轴上的对齐方式,会覆盖默认的对齐方式

align-self: auto | flex-start | flex-end | center | baseline | stretch


auto

flex-start 沿交叉轴开始位置对齐

flex-end 交叉轴结束位置对齐

center 沿交叉轴中心位置对齐

baseline 沿交叉轴的基线对齐

stretch 沿交叉轴方向占满伸缩容器


(8)组件image

注:image组件默认宽度300px、高度225px


1)属性值

src String 图片资源地址

mode String 'scaleToFill' 图片裁剪、缩放的模式

lazy-load Boolean false 图片懒加载。只针对page与scroll-view下的image有效1.5.0


binderror HandleEvent 当错误发生时,发布到 AppService 的事件名,事件对象event.detail = {errMsg: 'something wrong'}


bindload HandleEvent 当图片载入完毕时,发布到 AppService 的事件名,事件对象event.detail = {height:'图片高度px', width:'图片宽度px'}


2)mode 有效值:

mode 有 13 种模式,其中 4 种是缩放模式,9 种是裁剪模式。


缩放 scaleToFill 不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素

缩放 aspectFit 保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。


缩放 aspectFill 保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。


缩放 widthFix 宽度不变,高度自动变化,保持原图宽高比不变

裁剪 top 不缩放图片,只显示图片的顶部区域

裁剪 bottom 不缩放图片,只显示图片的底部区域

裁剪 center 不缩放图片,只显示图片的中间区域

裁剪 left 不缩放图片,只显示图片的左边区域

裁剪 right 不缩放图片,只显示图片的右边区域

裁剪 top left 不缩放图片,只显示图片的左上边区域

裁剪 top right 不缩放图片,只显示图片的右上边区域

裁剪 bottom left 不缩放图片,只显示图片的左下边区域

裁剪 bottom right 不缩放图片,只显示图片的右下边区域


3)重点使用的mode数值,按照原图比例缩放,按短边显示缩放,或按长边显示缩放,或宽度不变高度变化

mode="aspectFill | aspectFit | widthFix"


4)注意的一个问题,image排列的时候,底部出现空白间隙的解决办法:需要父元素采用flexbox

<view>

<image></image>

<image></image>

</view>


view{

  display: flex;

  flex-direction: column;

}


(9)文本组件text

设置宽度、高度及居中显示时,需要通过设置 display:block;line-height:60rpx;



(10)滑块swiper


1)属性值

indicator-dots Boolean false 是否显示面板指示点

indicator-color Color rgba(0, 0, 0, .3) 指示点颜色 1.1.0

indicator-active-color Color #000000 当前选中的指示点颜色 1.1.0

autoplay Boolean false 是否自动切换

current Number 0 当前所在滑块的 index

current-item-id String "" 当前所在滑块的 item-id ,不能与 current 被同时指定 1.9.0

interval Number 5000 自动切换时间间隔

duration Number 500 滑动动画时长

circular Boolean false 是否采用衔接滑动

vertical Boolean false 滑动方向是否为纵向

previous-margin String "0px" 前边距,可用于露出前一项的一小部分,接受 px 和 rpx 值 1.9.0

next-margin String "0px" 后边距,可用于露出后一项的一小部分,接受 px 和 rpx 值 1.9.0

display-multiple-items Number 1 同时显示的滑块数量 1.9.0

skip-hidden-item-layout Boolean false 是否跳过未显示的滑块布局,设为 true 可优化复杂情况下的滑动性能,但会丢失隐藏状态滑块的布局信息 1.9.0

bindchange EventHandle current 改变时会触发 change 事件,event.detail = {current: current, source: source}

bindanimationfinish EventHandle 动画结束时会触发 animationfinish 事件,event.detail 同上 1.9.0


2)swiper-item

仅可放置在<swiper/>组件中,宽高自动设置为100%。


(11)tabbar组件

注意一个问题,在组件中参数list中列出来的页面,在使用navigateTo跳转时会失灵,需要引起注意;


(12)微信小程序wx:for循环的数量问题

1)你可以新建一个变量,将数组列表的前5个赋值给这个变量,然后列表循环时使用这个变量

2)直接在模板页循环时控制index

<view wx:for="{{yourList}}" wx:if="{{index<5}}>

    ***

</view>


(13)动态设置页面的标题

wx.setNavigationBarTitle({

      title : "标题名称" 

    })


(14)页面分享功能


 //页面分享

  onShareAppMessage: function (res) {

    if (res.from === 'button') {

      // 来自页面内转发按钮

      console.log(res.target)

    }


    return {

      title: "标题",

      path: '/index/index',

      success: function (res) {

        // 转发成功

      },

      fail: function (res) {

        // 转发失败

      }

    }

  }


(15)js页面方法间数据的交换方法


js页面方法之间的数据交换,可以通过data{}设置的数据,这个data既可以用来渲染view页面,也可以在js的方法之间来交换或者更新


1)可以直接定义data项目

//index.js

Page({

  data: {

    text: 'init data',

    num: 0,

    array: [{text: 'init data'}],

    object: {

      text: 'init data'

    }

  },

  changeText: function() {

    // this.data.text = 'changed data'  // bad, it can not work

    this.setData({

      text: 'changed data'

    })

  },

  changeNum: function() {

    this.data.num = 1

    this.setData({

      num: this.data.num

    })

  }

})


2)可以隐形定义data


onLoad: function (options) {

    var localDatas = getApp().globalData.localDatas;

    var title = localDatas.localData.aboutus[0].title;


    this.setData({

      title:title

    })


  },


//页面分享

  onShareAppMessage: function (res) {

    if (res.from === 'button') {

      // 来自页面内转发按钮

      console.log(res.target)

    }


    var title = this.data.title;


    return {

      title: title,

      path: '/weixin/weixin',

      success: function (res) {

        // 转发成功

      },

      fail: function (res) {

        // 转发失败

      }

    }

  }