• 初学微信小程序


    首先登陆微信公众平台:https://mp.weixin.qq.com/

    注册一个账号,注册成功后可以获取到一个appId,这个appId就是开发者的唯一标识;

    微信开发者工具下载:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html       (不用特意去记,在微信公众平台翻翻就能找到)

     小程序文档地址:https://developers.weixin.qq.com/miniprogram/dev/framework/config.html

    普通web和微信小程序的区别

     新建项目

    我们可以打开微信开发者工具,点击项目选项,新建一个项目,然后设置项目名称,指定项目文件地址,输入appId,即可新建一个小程序项目;

    小程序目录结构

    新建成功后会有这样的一个目录结构:

     pages里面是放页面的,里面会有两个预制的页面

     index是首页,logs是显示日志的页面

    我们可以看到每个页面都有4个部分构成,.js,.json,.wxml,.wxss,分别代表js文件、页面配置文件、'html'页面、'css'页面;

    utils文件中放着一些公共的方法

    app.js是整个小程序的入口文件

    app.json是控制整个小程序大体接口的文件,比如页面数量配置,导航条默认标题,导航条背景明暗设置,导航条字体颜色设置;

    app.wxss是默认全局的样式

    project.config.json是项目配置文件,对应到开发者工具中详情按钮的内容,我们可以在开发者工具里用图形化的形式进行操作;可以配置项目名称、appid等信息;

     小程序配置介绍

    一个小程序应用会包括最基本的两种配置文件,一种是全局的app.json和页面自己的page.json

    全局配置app.json:

    app.json是当前小程序的全局配置,包括了小程序的所有页面路径、页面表现、网络超时时间、底部tab等;

    小程序中如何新增页面呢?我们第一种想法可能是,按照结构目录一个一个新建页面,但是这种方式在小程序中显得繁琐,我们可以在app.json中的pages想汇总新增一个页面路径,小程序自动会为我们建立页面里对应的文件的!!

     如上,新增页面路径后,ctrl+s保存一下,小程序就会自动建立对应的页面了;

    另外有一个需要注意,pages中哪个路径在最前面,小程序启动的时候,默认页面就是谁!!!

    小程序文档地址:https://developers.weixin.qq.com/miniprogram/dev/framework/config.html

    如何添加底部/顶部tab栏?

    同样在app.json中配置:(yabBar要求至少两个,最多5个,否则会报错),其它配置看文档

    "tabBar": {
        "list": [{
          "pagePath": "pages/index/index",//对应的页面路径
          "text": "首页",//tab名称
          "iconPath": "images/tabbar/home.png",//默认图标
          "selectedIconPath": "images/tabbar/activeHome.png",//被选择是的图标
        },
        {
          "pagePath": "pages/logs/logs",
          "text": "日志",
          "iconPath": "images/tabbar/log.png",
          "selectedIconPath": "images/tabbar/activeLog.png"
        }]
      }

    小程序汇总页面配置

    进入某一个页面的xxxx.json(具体参考文档)

    {
      "usingComponents": {},
      "navigationBarBackgroundColor":"#00b26a",//配置导航栏背景色
      "navigationBarTitleText":"页面2",//配置导航栏文字内容
    }

     视图层wxml

    <text>:类似于web中的span标签,是行内元素

    <view>:类似于web中的div标签,是块级元素

    <block>:用于包括含有多个节点的代码片段,相当于一个容器,也是块级元素

    数据绑定(类似vue中的双向绑定):

    在某个页面的xxx.js中定义几个变量:

    data: {
        msg:"hello world 1",
        person:{
          name:"小明",
          height:185
        },
        title:"这是一个标题"
      },

    在xxx.wxml中绑定这些变量:(可以绑定普通值,也可以绑定属性,需要注意的是,绑定布尔值时要加上双括号,否则会报错或不生效)

    <view>
      {{ msg }}
      <view>
      {{person.name}}--{{person.height}}
      </view>
      <view data-id="{{title}}">title</view>
      <view>
        <checkbox checked="{{false}}"></checkbox>
      </view>
    </view>

     列表渲染

    wx:for        (既可以循环数组也可以循环对象)

    项的变量名默认为item,wx:for-item可以指定数组当前元素的变量名

    下标变量名默认为index,wx:for-index可以指定数组当前下标的变量名

    xxx.js:

    data: {
        arr:["苹果","香蕉","西瓜"],
        person:{
          name:"小明",
          height:180
        }
      },

    xxx.wxml:

    <view>
      <view wx:for="{{arr}}" wx:key="{{index}}">
        {{index}}:{{item}}
      </view>
    
      <view wx:for="{{arr}}" wx:for-item="aa" wx:for-index="bb" wx:key="{{aa}}">
        {{bb}}:{{aa}}
      </view>
    
      <view wx:for="{{[1,2,3,4,5]}}" wx:key="*this">
        {{item}}
      </view>
    
      <view wx:for="{{person}}" wx:for-item="val" wx:for-index="key" wx:key="*this">
        {{key}}:{{val}}
      </view>
    </view>

     wxss

    wxss相当于web中的css,只不过新增了尺寸单位rpx,和样式导入

    rpx可以根据屏幕的宽度进行自适应,规定屏幕宽度为750rpx,如在iphone6上,屏幕宽度为375px,共有750个物理像素,则750rpx=375px=750物理像素,1rpx=0.5px=1物理像素;可以理解为1rpx是屏幕宽度的1/750;

    xxx.wxss:

    .box1{
      width:50rpx;
      height:50rpx;
      background-color: aqua;
    }

    样式导入

    @import语句可以导入外联样式表, @import后跟需要导入的外联样式表的相对路径,用;表示语句结束。

    例子:

    我们在根目录下建立一个stylues文件夹,里面建立一个box.wxss文件

    box.wxss

    .lg_box{
      width:200rpx;
      height:200rpx;
      background-color: aqua;
    }

    之后在某个页面的xxx.wxss中引入这个样式表:

    @import "../../stylues/box.wxss";

    样式表中的注释是/**/这样的

    基础组件

    <view>组件:类似于web中的div标签,不过在小程序汇总它有个hover-class等属性,当标签被点击时会触发这个样式;

    <view hover-class='lg_box'>dasd</view>

    <text>组件:类似于span标签,不过在小程序汇总也添加了其它属性,比如selectable,指定文本是否可选,默认值为false

    decode属性用来指定是否解码text标签中的内容,如果为false,在标签中的&emsp;这些空格会鸳鸯展示出来

    <text selectable='{{true}}' decode>dsadaa&emsp;sdassa</text>

     <image>组件:

    文档地址:https://developers.weixin.qq.com/miniprogram/dev/component/image.html

    小程序中的image标签和web中的img标签存在很大区别:

    image组件默认宽度300px、高度240px,

    小程序中不存在背景图片的说法,image标签是背景图片和img标签的结合体

    src属性还是指的图片路径,

    mode属性表示图片裁剪缩放的方式:

    默认值是scaleToFill:缩放模式,不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素

    mode 的合法值

    说明最低版本
    scaleToFill 缩放模式,不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素  
    aspectFit 缩放模式,保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。  
    aspectFill 缩放模式,保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。  
    widthFix 缩放模式,宽度不变,高度自动变化,保持原图宽高比不变  
    top 裁剪模式,不缩放图片,只显示图片的顶部区域  
    bottom 裁剪模式,不缩放图片,只显示图片的底部区域  
    center 裁剪模式,不缩放图片,只显示图片的中间区域  
    left 裁剪模式,不缩放图片,只显示图片的左边区域  
    right 裁剪模式,不缩放图片,只显示图片的右边区域  
    top left 裁剪模式,不缩放图片,只显示图片的左上边区域  
    top right 裁剪模式,不缩放图片,只显示图片的右上边区域  
    bottom left 裁剪模式,不缩放图片,只显示图片的左下边区域  
    bottom right 裁剪模式,不缩放图片,只显示图片的右下边区域  

     lazy-load:图片是否懒加载 默认值是false

    show-menu-by-longpress:开启长按图片显示识别小程序码菜单  默认值false

    binderror:加载发生错误时触发,值是事件

    bindload:加载完成时触发,值是事件

    <view>
      <image src='../../images/bigImg.png' mode='widthFix'></image>
    </view>

    <swiper>:轮播组件

    <swiper>滑块视图容器,默认宽度100%,高度150px。其中只可放置swiper-item组件,否则会导致未定义的行为。<swiper-item>默认宽度高度都是100%;

    swiper的属性:

    属性类型默认值必填说明最低版本
    indicator-dots boolean false 是否显示面板指示点 1.0.0
    indicator-color color rgba(0, 0, 0, .3) 指示点颜色 1.1.0
    indicator-active-color color #000000 当前选中的指示点颜色 1.1.0
    autoplay boolean false 是否自动切换 1.0.0
    current number 0 当前所在滑块的 index 1.0.0
    interval number 5000 自动切换时间间隔 1.0.0
    duration number 500 滑动动画时长 1.0.0
    circular boolean false 是否采用衔接滑动 1.0.0
    vertical boolean false 滑动方向是否为纵向 1.0.0
    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
    easing-function string "default" 指定 swiper 切换缓动动画类型 2.6.5
    bindchange eventhandle   current 改变时会触发 change 事件,event.detail = {current, source} 1.0.0
    bindtransition eventhandle   swiper-item 的位置发生改变时会触发 transition 事件,event.detail = {dx: dx, dy: dy} 2.4.3
    bindanimationfinish eventhandle   动画结束时会触发 animationfinish 事件,event.detail 同上 1.9.0

    easing-function 的合法值

    说明最低版本
    default 默认缓动函数  
    linear 线性动画  
    easeInCubic 缓入动画  
    easeOutCubic 缓出动画  
    easeInOutCubic 缓入缓出动画  

     示例

    <swiper autoplay indicator-dots indicator-color='rgba(0,0,0,.3)' indicator-active-color='rgba(0,100,100,1)' current='0' interval='5000'
    duration='500' circular vertical previous-margin='20px' next-margin='20px' display-multiple-items='1' skip-hidden-item-layout>
      <swiper-item>
        <image src='../../images/bigImg.png' mode='aspectFit'></image>
      </swiper-item>
      <swiper-item>
        <image src='../../images/bigImg.png' mode='aspectFit'></image>
      </swiper-item>
      <swiper-item>
        <image src='../../images/bigImg.png' mode='aspectFit'></image>
      </swiper-item>
    </swiper>

     <navigator>:导航组件,类似于web中的a标签

    属性类型默认值必填说明最低版本
    target string self 在哪个目标上发生跳转,默认当前小程序 2.0.7
    url string   当前小程序内的跳转链接 1.0.0
    open-type string navigate 跳转方式 1.0.0
    delta number 1 当 open-type 为 'navigateBack' 时有效,表示回退的层数 1.0.0
    app-id string   target="miniProgram"时有效,要打开的小程序 appId 2.0.7
    path string   target="miniProgram"时有效,打开的页面路径,如果为空则打开首页 2.0.7
    extra-data object   target="miniProgram"时有效,需要传递给目标小程序的数据,目标小程序可在 App.onLaunch()App.onShow() 中获取到这份数据。详情 2.0.7
    version string release target="miniProgram"时有效,要打开的小程序版本 2.0.7
    hover-class string navigator-hover 指定点击时的样式类,当hover-class="none"时,没有点击态效果 1.0.0
    hover-stop-propagation boolean false 指定是否阻止本节点的祖先节点出现点击态 1.5.0
    hover-start-time number 50 按住后多久出现点击态,单位毫秒 1.0.0
    hover-stay-time number 600 手指松开后点击态保留时间,单位毫秒 1.0.0
    bindsuccess string   target="miniProgram"时有效,跳转小程序成功 2.0.7
    bindfail string   target="miniProgram"时有效,跳转小程序失败 2.0.7
    bindcomplete string   target="miniProgram"时有效,跳转小程序完成 2.0.7

    target属性:默认值是self,跳转到当前小程序的页面,miniProgram:跳转到其它小程序

    url:指定跳转到当前小程序的链接地址

    open-type:跳转方式

    open-type 的合法值

    说明最低版本
    navigate 对应 wx.navigateTowx.navigateToMiniProgram 的功能,但不能跳到tabBar页面  
    redirect 对应 wx.redirectTo 的功能,但不能重定向到tabbar页面  
    switchTab 对应 wx.switchTab 的功能,跳转到tabbar页面,并且关闭所有非tabbar页面  
    reLaunch 对应 wx.reLaunch 的功能,关闭所有页面,跳转到指定的所有类型页面,包括tabbar页面 1.1.0
    navigateBack 对应 wx.navigateBack 的功能 1.1.0
    exit 退出小程序,target="miniProgram"时生效 2.1.0

    示例:

    <!-- navigate -->
    <navigator url='../index2/index2' open-type='navigate'>跳转到页面2</navigator>
    <!-- redirect  无历史记录-->
    <navigator url='../index2/index2' open-type='redirect'>重定向到页面2</navigator>
    <!-- switchTab -->
    <navigator url='../index/index' open-type='switchTab'>跳转到tabbar页面,并且关闭非tabbar页面</navigator>
    <!-- reLaunch -->
    <navigator url='../index/index' open-type='reLaunch'>关闭所有页面,可以跳转到包括tabbar内的所有页面</navigator>

     <vedio>:视频组件(更多用法查看文档)

    属性类型默认值必填说明最低版本
    src string   要播放视频的资源地址,支持云文件ID(2.3.0 1.0.0
    duration number   指定视频时长 1.1.0
    controls boolean true 是否显示默认播放控件(播放/暂停按钮、播放进度、时间) 1.0.0
    danmu-list Array.<object>   弹幕列表 1.0.0
    danmu-btn boolean false 是否显示弹幕按钮,只在初始化时有效,不能动态变更 1.0.0
    enable-danmu boolean false 是否展示弹幕,只在初始化时有效,不能动态变更 1.0.0
    autoplay boolean false 是否自动播放 1.0.0
    loop boolean false 是否循环播放 1.4.0
    muted boolean false 是否静音播放 1.4.0
    initial-time number 0 指定视频初始播放位置 1.6.0
    page-gesture boolean false 在非全屏模式下,是否开启亮度与音量调节手势(废弃,见 vslide-gesture) 1.6.0
    direction number   设置全屏时视频的方向,不指定则根据宽高比自动判断 1.7.0
    show-progress boolean true 若不设置,宽度大于240时才会显示 1.9.0
    show-fullscreen-btn boolean true 是否显示全屏按钮 1.9.0
    show-play-btn boolean true 是否显示视频底部控制栏的播放按钮 1.9.0
    show-center-play-btn boolean true 是否显示视频中间的播放按钮 1.9.0
    enable-progress-gesture boolean true 是否开启控制进度的手势 1.9.0
    object-fit string contain 当视频大小与 video 容器大小不一致时,视频的表现形式 1.0.0
    poster string   视频封面的图片网络资源地址或云文件ID(2.3.0)。若 controls 属性值为 false 则设置 poster 无效 1.0.0
    show-mute-btn boolean false 是否显示静音按钮 2.4.0
    title string   视频的标题,全屏时在顶部展示 2.4.0
    play-btn-position string bottom 播放按钮的位置 2.4.0
    enable-play-gesture boolean false 是否开启播放手势,即双击切换播放/暂停 2.4.0
    auto-pause-if-navigate boolean true 当跳转到其它小程序页面时,是否自动暂停本页面的视频 2.5.0
    auto-pause-if-open-native boolean true 当跳转到其它微信原生页面时,是否自动暂停本页面的视频 2.5.0
    vslide-gesture boolean false 在非全屏模式下,是否开启亮度与音量调节手势(同 page-gesture) 2.6.2
    vslide-gesture-in-fullscreen boolean true 在全屏模式下,是否开启亮度与音量调节手势 2.6.2
    ad-unit-id string   视频前贴广告单元ID,更多详情可参考开放能力视频前贴广告 2.8.1
    bindplay eventhandle   当开始/继续播放时触发play事件 1.0.0
    bindpause eventhandle   当暂停播放时触发 pause 事件 1.0.0
    bindended eventhandle   当播放到末尾时触发 ended 事件 1.0.0
    bindtimeupdate eventhandle   播放进度变化时触发,event.detail = {currentTime, duration} 。触发频率 250ms 一次 1.0.0
    bindfullscreenchange eventhandle   视频进入和退出全屏时触发,event.detail = {fullScreen, direction},direction 有效值为 vertical 或 horizontal 1.4.0
    bindwaiting eventhandle   视频出现缓冲时触发 1.7.0
    binderror eventhandle   视频播放出错时触发 1.7.0
    bindprogress eventhandle   加载进度变化时触发,只支持一段加载。event.detail = {buffered},百分比 2.4.0

    示例:

    <view>
      <video style='100%;' src='http://47.90.213.237/youtube/JU3AL8S3zyE.mp4' controls duration='60' autoplay></video>
    </view>

     自定义组件:相当于vue中的组件

    新建自定义组件:在跟文件下建立一个components文件夹,里面建一个MyHeader文件夹,然后再右键这个文件新建component,开发者工具会帮我们新建4个文件,很方便

     xxx.json文件中有一句:"component": true,,是声明这是一个组件

    xxx.wxml中写点内容:slot是插槽,可以将父组件里的内容插进去

    <view class='myheader'>
      {{cData}}
      <view>
        <slot></slot>
      </view>
    </view>

    xxx.wxss中可以写点简单的样式:

    .myheader{
      font-size: 50px;
      background-color: yellow;
    }

    xxx.js中可以定义组件自身的属性(cData)

    Component({
      /**
       * 组件的属性列表
       */
      properties: {
        cData:{
          value:"组件的默认值",
          type:String
        }
      },
    
      /**
       * 组件的初始数据
       */
      data: {
    
      },
    
      /**
       * 组件的方法列表
       */
      methods: {
    
      }
    })

    以上是简单的定义了一个组件,那么如何在页面内引用呢?

    在要引用此组件的页面的json文件汇总这样设置:

    {
      "usingComponents": {
        "MyHeader":"../../components/MyHeader/MyHeader"
      },
      "navigationBarBackgroundColor": "#00b26a",
      "navigationBarTitleText": "页面3"
    
    }

    在这个页面中记得使用MyHeader组件

    <view>
      <MyHeader cData="我是父组件传给子组件的值">我是自定义组件的插槽内容</MyHeader>
    </view>
  • 相关阅读:
    [转载]宇宙文明等级的划分标准
    常用的AJAX框架
    常用的AJAX框架
    【★】路由环路大总结!
    分销商城

    如何开始做外贸
    时间管理模型
    吕广渝:上帝视角看公司运营
    Java面试必问
  • 原文地址:https://www.cnblogs.com/fqh123/p/11621660.html
Copyright © 2020-2023  润新知