• 微信小程序的学习和应用


    天网恢恢,疏而不漏!一代混吃等死大魔王突然幡然醒悟,决心拿起教程开始学习微信小程序的开发,这!究竟是道德的沦丧,还是老板的变态,她的学习又将为我们带来什么意料之外的收获?

    本期【只要框架换的快,精髓就追不上我】为您精彩演绎!

    我是本期内容唯一讲师  ---- 绿叉基巴教授!

    老板:活着不好吗?别让我有一天知道你账号!

    绿叉基巴教授:领导是吧?给我打!!!

    以下内容过于正经,未成年人请在成年人伴同下开车离开!这座山头不适合你···

    今天可是星期六,有什么学习是周一不能开始的?所以,今天只有前言!哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈···

    ok!今天是周一,学习的好日子。有请绿叉基巴教授···

    好的,欢迎各位阿斯加德的仙女们,我们今天开始学习微信小程序,第一课 --- 什么是小程序?

    小程序就是微信里面的app,励志要取代APP,但本教授觉着这是它这辈子就算是拜了杨超越都不可能实现的奢求!

    小程序的开发思想借鉴的是react.js,不过和vue也有着千丝万缕的关系。

    创建一个新的项目:

    这里注意,我们选择“项目目录”的时候,一定要是空的,比如我要在D盘吓得wx文件夹里面创建一个新的项目,就要事先在文件夹里创建另一个文件夹:wxDemo0827,然后再在微信开发工具里面创建新项目,目录选择:D:wxwxDemo0827,这样底下才会出现那句【建立产检快速启动模板】,否则下面是不会出现的!

    我们选择的时候,要选择建立普通快速启动模板,也就是那个quick start!

    我这里用的是我公号的公众号。记住,别老是打开自己的私号,找半天找不到还以为闹鬼了!

    结构:

     

    看上面,我们首先看到左边是我们的目录,右边是我们的app.json,其中建立项目啥的这里就不说了,简单来讲就是打开微信开发工具,然后选择新建,找到自己的appID,填进去之后就行了,目录啥的要填上。

    如果我们想要新建一个文件,比如cart,如果在左边新建,就很麻烦,所以简单的方法就是直接在右边的

    "pages":[
    "pages/index/index",
    "pages/addCgi/addCgi",
    "pages/liulu/addPage"
    ],
    这里,添加上我们的cart,变成:
    "pages":[
    "pages/index/index",
    "pages/addCgi/addCgi",
    "pages/liulu/addPage",
    "pages/carts/cart"
    ],
     
     
    然后看这里:
    对应:

    接下来设置tabBar,也就是我们的顶部或者底部的tab栏。

     

    确实不怎么好看,好在好用!我的图标是从阿里巴巴图标库下载的,选择下载素材,而不是下载代码!

    然后要记住,凡是在底部导航栏涉及到的文件,都是不能跳转的,比如我们知道,如果在index文件里面写上:

    <nevigator url = '../kinds/kind'>跳转到分类页面</nevigator>

    这种情况下是不行的,因为kind文件属于底部导航栏,但是如果我们新建一个文件叫其他,也就是在page里面添加:

    "pages/other/other",
     
    之后,在index文件里面添加:

     <nevigator url = '../other/other'>跳转到其他页面</nevigator>

    这样是完全没有问题哒!

    rpx

    rpx单位是微信小程序中css的尺寸单位,rpx可以根据屏幕宽度进行自适应,规定屏幕宽度为750rpx。如在iphone6上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。

    设备rpx换算px(屏幕宽度/750)px 换算 rpx(750/屏幕宽度)

    iphone5 1rpx = 0.24px     1px = 2.34rpx;

    iphone6 1rpx = 0.5px     1px = 2rpx;

    iphone5 1rpx = 0.552px     1px = 1.81rpx;

    APP.js

     app.js是负责整个app的配置,是公共配置!配置好了那就是全都生效的!里面涉及一个函数:app();

    至于另一个重要的函数page(),是负责每个页面的,这个要注意!

    绑定:{{}}

    绑定其实很简单,就是现在wxml里面用:{{msg}},然后去她的js文件里面的page函数里面的data里面,加上“msg”:“我是中国人!”;

    如果是把他当做组件属性使用,那就要保证她在双引号或者单引号里面,一般我习惯用单引号,除非有别的因素影响才用双引号。

    举个大荔枝:

    <view id = 'item-{{id}}'>我是组件属性</view>

     控制属性也要用引号引起来,否则不生效:

    <!-- 表演一个遍历,记住要把wx:key给用上,否则就会有警告 index 和 item是默认的,不能修改 -->
    <!-- 如果你想要修改人家的index的话,就用wx:for-index="i" -->
     
    <view wx:for="{{list}}" wx:key="{{index}}">{{index}}---{{item}}</view>

    <view wx:for="{{list2}}" wx:key="{{index}}" wx:for-index="i">{{i}}---{{item}}</view>

    模板:template-----is

    啊上面要注意一下data呢,啊如果不注意就可能不出现msg1的信息呢,啊组件的应用是is呢,啊你记住了吗?

    事件绑定:bindtap  和 catchtap

    首先我们要知道,bindtap是冒泡事件,如果父元素和子元素嵌套,两个都会触发:

    当我们改成catchtap之后:

    接下来写一个较为高深的,大概是大班的水平了!那就是动态添加,遍历数组

    以上就是一个动态添加了,并且带了一个删除的按钮,这里删除还没有绑定事件。

    注意的就是,我们在动态生成的时候,是把input框里面的数据都添加给一个数组,这个数组要在一开始就设定好,并且为空,当且按照需求也可以给他事先添加一下数据,添加的函数是:push(),以及我们绑定的 val  也是要事先在data里面初始化一下的!

     我们在得到input的框里面的数据之后,直接就把他添加给了getLish数组,添加之后,再把它清空,并且时时遍历。

    我还做了一个判断,如果你什么玩楞都不填,就不会添加上。有需要了还可以做一个提示,提示那厮没有填东西就点添加按钮了····

    然后继续删除按钮:

    ok!经历了大班水平的考验,是不是觉着自己武力值满满,已经可以身披金甲战衣,脚踏七彩祥云,去当你的盖世英雄了?

    NO NO NO ! 人间不值得,你还是会阿斯加德造作吧!

    继续我们的学前班教学 --- 组件

     我们首先学的就是轮播,先来一个属性表:

    然后举一个竖向的栗子先:

    这里注意,我们只是给了一个竖向滚动的大框,里面的每一个图都没有高度,要去index.wxss设置:

    ok,我们就可以看到动了!

    接下来再看横向的,这个比较常用!

    我们要知道,浮动这玩楞,好用是好用,但是在我们微信小程序里,是用不了的!人家有自己的玩楞,叫:white-space:nowrap;

    我们设置一下css:

    这里注意,我只是改了scroll-view-item,加上了宽度,和设置她是inline-block,这里是固定的!

    下面开始大家最爱的轮播!直接套用人家api的栗子是很重要的!

    地址:https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html

    下面设置了,不显示指示点,不让她自动轮播;如果自动轮播,每次间隔时间为5秒,没次滑动需要的时间为1秒;

     注意上下对应!

    比如间隔时间啊,比如修改函数啊等等;

    <!-- 下面是进度条 -->
    <progress percent="80" active show-info/>

    其他的比如图片啥的,就自己看着瞎Jb搞吧···

    接下来是API的学习:

    首先我们要发起请求,他就相当于是js里面的ajax请求,只是这是微信的底盘:

     打电话 wx.makePhoneCall(OBJECT)

    <button bindtap='onCall'>打电话</button>

     

    地图:

    <map id="map" longitude="{{longitude}}" latitude="{{latitude}}" scale="{{scale}}" controls="{{controls}}" bindcontroltap="controltap" markers="{{markers}}" circles="{{circles}}" bindmarkertap="markertap" polyline="{{polyline}}" bindregionchange="regionchange" show-location style=" 100%; height: {{view.Height}}px;"></map>
     
    data: {
      Height: 0,
      scale: 13,
      latitude: "",
      longitude: "",
      markers: [],
      controls: [{
        id: 1,
        iconPath: '../../image/jian.png',
        position: {
          left: 320,
          top: 100 - 50,
           20,
          height: 20
        },
        clickable: true
      },
      {
      id: 2,
      iconPath: '../../image/add.png',
      position: {
        left: 340,
        top: 100 - 50,
         20,
        height: 20
      },
      clickable: true
      }],
      circles: []
    },

    regionchange(e) {
      console.log("regionchange===" + e.type)
    },
    //点击merkers
    markertap(e) {
      console.log(e.markerId)

      wx.showActionSheet({
      itemList: ["A"],
      success: function (res) {
      console.log(res.tapIndex)
    },
    fail: function (res) {
      console.log(res.errMsg)
    }
    })
    },
    //点击缩放按钮动态请求数据
    controltap(e) {
      var that = this;
      console.log("scale===" + this.data.scale)
      if (e.controlId === 1) {
        // if (this.data.scale === 13) {
        that.setData({
          scale: --this.data.scale
        })
      // }
      } else {
        // if (this.data.scale !== 13) {
        that.setData({
        scale: ++this.data.scale
        })
      // }
    }
    },

    /**
    * 生命周期函数--监听页面加载
    */
    onLoad: function (options) {
      var _this = this;
      wx.getSystemInfo({
      success: function (res) {
        //设置map高度,根据当前设备宽高满屏显示
        _this.setData({
          view: {
            Height: res.windowHeight
          }
        })
      }
    })
    wx.getLocation({
      type: 'wgs84', // 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标
      success: function (res) {

        _this.setData({
          latitude: res.latitude,
          longitude: res.longitude,
          markers: [{
            id: "1",
            latitude: res.latitude,
            longitude: res.longitude,
             50,
            height: 50,
            iconPath: "../../image/map.png",
            title: "哪里"

          }],
        polyline: [{
          points: [{
            longitude: res.longitude,
            latitude: res.latitude
          }, {
            longitude: 113.324520,
            latitude: 23.21229
          }],
          color: "#FF0000DD",
           2,
          dottedLine: true
        }],
        circles: [{
          latitude: res.latitude,
          longitude: res.longitude,
          color: '#FF0000DD',
          fillColor: '#7cb5ec88',
          radius: 3000,
          strokeWidth: 1
        }]
     })
    }
    })
    },
     
    二维码图片:wx.scanCode(OBJECT)
    这里就很经典了,只怪API介绍的不清不楚啊,说的是二维码,教授我以为就是扫描,然后可以出来文件啥的!原来不是这样,他只是说,让你想要展示出来的图片,提前用【草料二维码】{其他的软件也可以,啥方便啥来!}把地址生成二维码图片,保存在某个文件夹里,然后点击扫码的时候,去找到那个路径,这个时候,函数就会自动查找相应的地址,从而找到图片。

    就像上面的,5.jpg是我想要的图片,是这样的:

    它的地址就是:../../image/5.jpg;

    这个时候,我拿着这个字符串,去【草料二维码】生成二维码图片:

    我给他起个名字叫“ls.png”,没错就是梁山图片。最近教授嗑沙海,萌梁山好汉和赛会主义姐弟情···【废话就到这了!】

     然后,我点击扫码的时候,,去选择这个‘ls.png’图片,他就会自动识别,找到我们的“../../image/5.jpg”图片,这样配合我们其他的代码,就完成啦!

    动画wx.createAnimation(OBJECT):

    这里也有很多坑啊!

    其中最坑的就是计时器后面要绑定this,以及动画最好在页面渲染完成后就先创建一个。

    然后去上面data处,设置一个空的动画:

    然后设置各种事件:

    这里注意,如果我们在第一个动画,也就是先放大旋转,然后一秒之后再放大旋转的地方,那个定时器一定要.bind(this)一下,否则就会报错,报的错就是:

    看到没看到没?说没有这个属性啊,说回调函数中这个玩楞他没有定义啊!

     所以记得一定要加上~

     下面是wxml:

    获取电话授权:getPhoneNumber(OBJECT)

     

    注意上面说的,想要电话,就先获取登录信息,所以我们要先去app.js里面找到:

    然后去请求授权的页面写上:

    接下来去js里面写上函数:

  • 相关阅读:
    [IOI2014] 假期
    [SPOJ22343] Norma
    [APC001] D Forest
    [POI2004] SZN
    [JZOJ5837] Omeed
    [JZOJ5836] Sequence
    【题解】[CH弱省胡策R2]TATT
    【题解】简单题
    【题解】巧克力王国
    【题解】[SDOI2010]捉迷藏
  • 原文地址:https://www.cnblogs.com/yimei/p/9534765.html
Copyright © 2020-2023  润新知