当前位置:   article > 正文

微信小程序(原生)_原生小程序官网

原生小程序官网

1.小程序注册及开发工具的使用

第一步: 注册 ,点击下方连接前往注册页面

小程序

主要为了拿到AppID(小程序ID)

第二步: 开发工具下载

稳定版 Stable Build | 微信开放文档

下载微信开发者工具(安装一直下一步即可)

创建项目:

 

.json 是配置信息 

        pages 为页面 ,windows为配置属性信息,tabbar配置导航条

.wxml 是html结构

.wxss 是css样式

.js 是逻辑 

2.项目介绍

珠峰课堂

3.导航条配置

小程序配置官方文档:全局配置 | 微信开放文档

app.json中的配置信息:

  1. {
  2. "pages": [
  3. "pages/index/index",
  4. "pages/logs/logs"
  5. ],
  6. "window": {
  7. "backgroundTextStyle": "light",
  8. "navigationBarBackgroundColor": "#fff",
  9. "navigationBarTitleText": "123",
  10. "navigationBarTextStyle": "black"
  11. },
  12. "tabBar": {
  13. "color": "#333",
  14. "selectedColor": "#71d4cb",
  15. "borderStyle": "black",
  16. "list": [{
  17. "pagePath": "pages/index/index",
  18. "text": "首页",
  19. "iconPath": "img/爱心.png",
  20. "selectedIconPath": "img/成功.png"
  21. },
  22. {
  23. "pagePath": "pages/logs/logs",
  24. "text": "日志",
  25. "iconPath": "img/爱心.png",
  26. "selectedIconPath": "img/成功.png"
  27. }
  28. ]
  29. },
  30. "style": "v2",
  31. "sitemapLocation": "sitemap.json"
  32. }

 4.小程序钩子函数

App(Object object) | 微信开放文档

框架->框架接口->小程序->App

小程序生命周期钩子函数
属性类型默认值必填说明
onLaunchfunction生命周期回调——监听小程序初始化。
onShowfunction生命周期回调——监听小程序启动或切前台。
onHidefunction生命周期回调——监听小程序切后台。
onErrorfunction错误监听函数。
onPageNotFoundfunction页面不存在监听函数。1.9.90
onUnhandledRejectionfunction未处理的 Promise 拒绝事件监听函数。2.10.0
onThemeChangefunction监听系统主题变化2.11.0
其他any开发者可以添加任意的函数或数据变量到 Object 参数中,用 this 可以访问

框架->框架接口->小程序->getApp

getApp可以拿到实例

5.基本组件

组件官方文档 视图容器 | 微信开放文档

<view> 相当于 <div>

在小程序中单位使用rpx,1 rpx相当于1 px的一半

6.基本用法

基础语法官方文档:数据绑定 | 微信开放文档

7.事件

bind存在事件冒泡, catch不存在事件冒泡

 8.常用全局函数及ajax请求

路由官方链接:

wx.navigateTo(Object object) | 微信开放文档

 全局事件:

API->界面

wx.showModal(Object object) | 微信开放文档

 

参考:在定义的方法中粘贴过来官网复制的代码 

 

小程序接口(ajax):

wx:request

API->网络 

ajax请求官方文档地址:

 RequestTask | 微信开放文档

 自己编写的后台

 

 小程序:

 

 返回结果:

 刘琪老师

小程序基本配置及常用组件

基础 | 微信开放文档 (qq.com)

自定义组件及传参

组件注册(这里已demo举例): 

第一步:在component 里新建demo组件 ,demo.json中的component为true

 第二步: 在index.json中使用,usingComponents demo为自定义的名字 值为路径

 第三步: 最后在index.wxml中当标签使用:

 父传子,传参举例(和vue类似)

第一步: 这里给demo 组件传递一个a 的值是123

  <demo a='123'></demo>

 第二步:在demo.js中的 properties 对象中 设置传递过来的a 的类型(type)和默认值(value)

 第三步:在demo.wxml中用 双大括号语法使用a

子组件给父组件传参:

第一步:自定义方法,使用bind绑定一个自定义的方法值为在js文件中定义的方法(这里是father),并且可以接受子组件传过来的参数(这里为b)

第二步:在子组件中编写一个方法来触发父组件传递过来的方法

使用 this.gritterEvent方法来接收自定义事件,和向父组件传参 

 

 生命周期

触发顺序:先触发 onLaunch ->onShow-> oninit->onLoad->onShow->onReady

 监听事件的生命周期

 

 常用API:

setData

  1. this.setData({
  2. 'xxx':值,
  3. 'xxx':值,
  4. })

 getApp

  1. 拿到实例
  2. const app = this.getApp()

页面跳转:

 request请求:

wx:request(类似于jquery的写法)

 简单封装:

 消息提示框: 

小程序里的数据缓存: 

 从手机相册中上传视频或图片:

wx.chooseMedia(Object object) | 微信开放文档 (qq.com)

  1. wx.chooseMedia({
  2. count: 9,
  3. mediaType: ['image','video'],
  4. sourceType: ['album', 'camera'],
  5. maxDuration: 30,
  6. camera: 'back',
  7. success(res) {
  8. console.log(res.tempFiles.tempFilePath)
  9. console.log(res.tempFiles.size)
  10. }
  11. })

 在小程序中获取元素:

SelectorQuery | 微信开放文档 (qq.com)

wx.createSelectorQuery()

 小米有品项目实战:

向程序常用框架: 

创建项目: 

尚硅谷(微信小程序)

一、小程序

2017年1月9日0点小程序发布 。( 作者: 张小龙

小程序刚发布体积不能超过1M,2017年4月做了改进,1M变为2M

二、小程序的作用

1.同App进行互补,提供同app类型的功能,比app使用方便简介

2.通过扫一扫或者在微信搜索即可下载

3. 用户频率不高,但又不得不用的功能软件,目前看来小程序是首选

4.连接线上线下

5.开发门槛低, 成本低

三、小程序开发资料

1.官方网站:https://developers.weixin.qq.com/miniprogram/dev/framework/

2.微信开发工具:稳定版 Stable Build 更新日志 | 微信开放文档

3.小程序注册,在官方注册:小程序

 小程序发布

四、小程序知识储备

1.flex布局

flex 布局的基本概念 - CSS(层叠样式表) | MDN

2.移动端相关知识

物理像素:屏幕的分辨率

设备独立像素&css独立像素: 虚拟像素,比方说css像素

dpr比&DPI&PPI: 

        dpr:设备像素比,物理像素 / 设备独立像素 = dpr, 一般以iPhone的dpr为准 dpr=2

        PPI:一英寸显示屏上的像素点个数

        DPI:最早指的是打印机在单位面积上打印的墨点数,墨点越多越清晰

3.移动端适配

 viewport适配

        1. 为什么做viewport适配

            手机厂商在生产手机的时候大部分手机默认页面宽度为980px

            手机实际视口宽度都要小于980px, 如:iPhone6为365px

             开发需求:需要将980的页面完全显示在手机屏幕上且没有滚动条

        2. 实现:

       <meta name="viewport" content="width=device-width,initial-scale=1.0">

rem适配

        1. 为什么做rem适配

            机型太多,不同机型屏幕大小不一致

            需求:一套设计稿的内容在不同的机型上呈现的效果一致,根据屏幕大小不同的变化,页面中的内容也相应的变化

        2.实现:
function remRefresh () {

    let clientWidth= document.documentElement.clientWidth
    
    // 将屏幕等分10份
    let rem = clientWidth / 10;
    document.documentElement.style.fontSize= rem + 'px'
    document.body.style.fontSize='12px'
    

}

window.addEventListener('pageshow',() => {

    remRefresh()
})

// 函数防抖

let timeoutId
window.addEventListener('resize',()=>{
    timeoutId &&clearTimeout( timeoutId )
    timeoutId = setTImeout(()=>{
        remRefresh()
},300)
})

        3. 第三方库

        lib-flexible + px2rem-loader

        4. 扩展内容

视网膜屏幕是分辨率超过人眼识别极限的高分辨率屏幕,由苹果公司在2010年在iPhone4发布会上首次退出营销术语

        IPhone4的dpr =2 ;人类肉眼分辨率的极限

        问题: iPhone6 的dpr为多少? iPhone6Pluse 比 iPhone显示图像清晰吗?

五、小程序配置 

5.1.小程序特点概述

1. 没有DOM(什么是DOM,为什么要有DOM,DOM作用是什么?)

2.组件化开发

3.体积小,单个压缩包体积不能超过2M,否则无法上线

4.小程序的四个重要的文件(每个页面都有)   

        *.js

        *.wxml --> view结构 --> html

        *.wxss --> view样式 --> css

        *.json --> view数据 -->json文件 --主要是做配置

5. 小程序适配方案:rpx(responseve pixel响应式像素单位) width:2rpx = 1px

        小程序适配单位: rpx

        规定屏幕宽度为 750rpx

        iPhone6 下:1rpx = 1物理像素 =0.5css

 5.2 小程序配置

全局配置:    app.json

页面配置: 页面名称.json

// Page(对象)   Page--函数  ---函数调用  Page--函数对象

// Page(配置对象) 调用表示的是什么意思

// 注册小程序中的一个页面。接受一个 Object 类型参数,其指定页面的初始数据、生命周期回调、事件处理函数等

// 产生了一个页面的实例对象,

 

  // onLoad: function (options) {

  // 想要访问msg属性的值

  // this----当前这个页面的实例对象

  // 因为this中没有msg,js本身一门动态类型的语言,对象中没有这个属性,点了,该对象中就有了msg这个属性,但是msg从来赋值,又根据原型的技术,来进行查找,仍然没有找到,所以结果是undefined

  // console.log(this.msg) // undefined

  // console.log(this.data.msg) // 有结果

  // 结论:小程序中没有数据代理,vue中有数据代理

数据代理:通过一个对象访问另一个对象的数据 

 

  1. // 通过手写代码的方式实现数据代理?
  2. myProxyData() {
  3. // 目标对象
  4. const myData = {
  5. name: '佐助',
  6. age: 20
  7. }
  8. // 代理对象
  9. const myProxy = {}
  10. for (let key in myData) {
  11. // 把key中存储的属性添加到代理对象上
  12. Object.defineProperty(myProxy, key, {
  13. get() {
  14. console.log('get执行了')
  15. return myData[key]
  16. },
  17. set(val) {
  18. console.log('set执行了')
  19. myData[key] = val
  20. }
  21. })
  22. }
  23. // 通过代理对象可以访问或者设置目标对象中的属性,即可---实现了数据代理
  24. // console.log(myProxy.name)
  25. myProxy.name = '鸣人'
  26. console.log(myProxy.name)

小程序中的事件:

冒泡事件和非冒泡事件

事件 | 微信开放文档

 wx.navigateTo(Object object) | 微信开放文档

 路由跳转↑

  1. // 保留当前页面,跳转到应用内的某个页面
  2. wx.navigateTo({
  3. url:'/pages/log/log'
  4. })
  5. // 关闭当前页面,跳转到应用内的某个页面。
  6. // wx.redirectTo({
  7. // url:'/pages/log/log'
  8. // })
  9. // 关闭所有页面,打开到应用内的某个页面
  10. // wx.reLaunch({
  11. // url:'/pages/log/log'
  12. // })

页面的生命周期

生命周期 | 微信开放文档

    页面的生命周期 5个

    onLoad  监听页面加载--页面创建的时候触发

    onShow  监听页面显示 --页面出现在前台时触发        默认会执行一次, 页面由隐藏到显示的时候

    onReady 监听页面初次渲染完成--页面已经画完了


 

    onHide                      如果页面隐藏

    onUnload                      页面卸载

  1. /**
  2. * 生命周期函数--监听页面加载
  3. */
  4. onLoad: function (options) {
  5. console.log('onLoad======监听页面加载')
  6. },
  7. /**
  8. * 生命周期函数--监听页面初次渲染完成
  9. */
  10. onReady: function () {
  11. console.log('onReady======监听页面初次渲染完成')
  12. },
  13. /**
  14. * 生命周期函数--监听页面显示
  15. */
  16. onShow: function () {
  17. console.log('onShow======监听页面显示')
  18. },
  19. /**
  20. * 生命周期函数--监听页面隐藏
  21. */
  22. onHide: function () {
  23. console.log('onHide======监听页面隐藏')
  24. },
  25. /**
  26. * 生命周期函数--监听页面卸载
  27. */
  28. onUnload: function () {
  29. console.log('onUnload======监听页面卸载')
  30. },
  31. /**
  32. * 页面相关事件处理函数--监听用户下拉动作
  33. */
  34. onPullDownRefresh: function () {
  35. },
  36. /**
  37. * 页面上拉触底事件的处理函数
  38. */
  39. onReachBottom: function () {
  40. },
  41. /**
  42. * 用户点击右上角分享
  43. */
  44. onShareAppMessage: function () {
  45. }

获取用户信息

wx.getUserProfile()

wx.getUserProfile(Object object) | 微信开放文档

 <!-- 头像 -->

  <image class="avatarUrl" src="{{userInfo.avatarUrl?userInfo.avatarUrl:'../../static/images/lyml.jpg'}}" mode="scaleToFill"></image>

  <button class="btn" bindtap="getUserInfo"> 获取信息 </button>

  <!-- 昵称 -->

  <text class="userName">{{userInfo.nickName?userInfo.nickName:'年少不知富婆好'}}</text>

  1. data: {
  2. msg:'123',
  3. userInfo: {} // 存储用户信息
  4. },
  5. getUserInfo() {
  6. wx.getUserProfile({
  7. desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  8. success: (res) => {
  9. const userInfo = res.userInfo
  10. console.log(res);
  11. this.setData({
  12. userInfo
  13. })
  14. }
  15. })
  16. },

网易云项目(小程序)

单行文本溢出和多行文本溢出

  1. /* 单行文本溢出,使用省略号 */
  2. font-size: 26rpx;
  3. /* white-space: nowrap;
  4. display: block;
  5. text-overflow: ellipsis; */
  6. /* 多行文本溢出,使用省略号 */
  7. overflow: hidden;
  8. text-overflow: ellipsis;
  9. display: -webkit-box;
  10. -webkit-box-orient: vertical; /* 设置纵向对齐方式 */
  11. -webkit-line-clamp: 2;

小程序中封装组件:

自定义组件 | 微信开放文档

缓动效果:

操作css样式,使用js表达式的形式在data中定义,在事件中执行

 js部分

  1. let startY = 0
  2. // 移动的纵坐标
  3. let moveY = 0
  4. // 移动的距离
  5. let distanceY = 0
  6. Page({
  7. // 手指按下事件
  8. handlerStart(e) {
  9. // 获取按下的坐标点
  10. startY = e.touches[0].clientY
  11. this.setData({
  12. convertTransition: ''
  13. })
  14. },
  15. // 手指移动事件
  16. handlerMove(e) {
  17. // 获取移动中的坐标点
  18. moveY = e.touches[0].clientY
  19. distanceY = moveY - startY
  20. // 限制最小和最大的移动距离
  21. if (distanceY < 0) {
  22. distanceY = 0
  23. return
  24. }
  25. if (distanceY >= 80) {
  26. distanceY = 80
  27. }
  28. this.setData({
  29. covertTransform: `translateY(${distanceY}rpx)`
  30. })
  31. },
  32. // 手指离开事件
  33. handlerEnd() {
  34. this.setData({
  35. covertTransform: `translateY(0rpx)`,
  36. convertTransition: 'transform 1s linear'
  37. })
  38. },
  39. data: {
  40. // JS表达式的形式
  41. covertTransform: `translateY(0rpx)`,
  42. convertTransition: ''
  43. },

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/583832
推荐阅读
相关标签
  

闽ICP备14008679号