微信小程序学习记录

本来js跟h5也就能看懂的水平,不会写,本以为小程序很难,最近接触了下,记录记录。

自己做的功能如下:1,登录界面  2,网络请求   3,列表展示  4,item点击   5,图片加载    6,下拉刷新数据   7,上拉加载数据   8,验证码功能   9,底部弹窗列表item点击选择     10,页面跳转和传值  

看看界面吧,挺丑的,反正自己玩的没有设计图,只看功能就好……

 

 1,登录界面   样式自己随便写    布局有row和column    就是Android中LinnerLayout的横向和纵向 

<view class="itemview">

      <text>姓名:</text>

      <input class="inputText" name="username" placeholder="请输入姓名" bindinput="inputusername" maxlength="6" />

    </view>

    <view class="itemview">

      <text>密码:</text>

      <input class="inputText" name="userpassword" placeholder="请输入密码" bindinput="inputuserpassword" maxlength="6" />

    </view>

通过这个属性bindinput  可以在js中获取到输入的内容    如下

  inputusername: function (e) {

    //将输入的用户名称的值赋给全局的data中的username   然后在点击login按钮的时候取全局data中的username   密码同理

    this.setData({

      username: e.detail.value

    })

  },

2,网络请求和根据键取值(这里请求的https://www.weather.com,都需要去后台的开发设置--接口设置添加,跳转到小程序的web-view中的url也需要添加配置,tip:跳转web-view这个url配置了偶尔也会失灵....)

 

var that = this;

wx.request({

 

        url: 'https://www.weather.com.cn/data/sk/101010100.html',

        data: {},

        // method: "POST",

        header: {

          'content-type': 'json' // 默认值

          // 'content-type':'application/x-www-form-urlencoded'

        },

        success: function (res) {

          console.log(res.data.weatherinfo.sm)  //取那个就.那个就行了

        }

      })

  },

 

3,列表展示

<view class="itemscroll" wx:for="{{listData}}" wx:key="index" style="display:flex;flex-direction:column"  bindtap="clickItem"   data-bean="{{index}}">

    <text class="name">{{item.name}}</text>

    <image class="img" src="{{item.img}}" mode="scaleToFill"></image>

    <text class="info">{{item.info}}</text>

    <view class="linered"></view>

</view>

wx:for就是渲染成列表的关键

4,item点击和传值   上面注册的点击事件bindtap="clickItem"    跟点击要获得的index关键是    data-bean="{{index}}" ,然后

//获取点击的index

 clickItem: function(e){

        var that = this;

        var index = e.currentTarget.dataset.bean;

    },

//把某个参数(例url)传递到下个页面

url: '../webview/webview?url='+that.data.listData[index].url,

5,图片加载   我这里说的是使用本地的图片

在你要使用该图片的page下  新建image文件夹   把图片放进去  ,然后在wxml中这么使用就行了

<view>

    <image src='image/bg.png' class="imagetset"></image>

  </view>

 

6,下拉刷新数据

在要添加下拉刷新的page的json文件中新增"enablePullDownRefresh": true   如下

 "usingComponents": {},

  "enablePullDownRefresh": true 

然后在

  /**

     * 页面相关事件处理函数--监听用户下拉动作

     */

    onPullDownRefresh: function () {

        wx.showNavigationBarLoading() //在标题栏中显示加载

        //模拟3s下拉刷新的异步操作 完成后停止这个下拉刷新

        this.setData({

//不展示正在请求数据和没有更多数据了的底部添加

            showloading:false,  

            showloaded:false,

        })

        this.jishiqi()  //倒计时模仿异步请求接口的操作    jishiqi这个函数需要写在这个函数的上面

    },

 

jishiqi : function (){

        var that = this;

        var num = 3;

        // var datanews = [];

        var addData = [{name:"我就是我",img:"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1607331222108&di=2ce09338277db412ca8950ee82ed5ea9&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201810%2F08%2F20181008185834_sgnqc.jpg",info:"画大象的小新",url:"https://lol.qq.com/guides/detail.shtml?ADTAG=cooperation.glzx.web&name=Annie&line=mid"}];

        var timer = setInterval(function () {

            num--;

            if (num <= 0) {

            console.log("加载完了");

            clearInterval(timer);

            wx.hideNavigationBarLoading() //完成停止加载

            wx.stopPullDownRefresh();

                

            // datanews.concat(addData);

            that.setData({

                // listData:that.data.listData.concat(addData)

                listData:addData,

            })        

            } 

        }, 1000)

    },

 

7,上拉加载数据 

/**

     * 页面上拉触底事件的处理函数

     */

    onReachBottom: function () {

//上拉加载三次后  模拟分页加载已经完成  不再请求

        if(this.data.addcount >= 3){   

            this.setData({

                showloading:false,

                showloaded:true,

            });

            return;

        }

 

  1.  

        var addData = [{name:"我就是我123456",img:"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1607331222108&di=2ce09338277db412ca8950ee82ed5ea9&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201810%2F08%2F20181008185834_sgnqc.jpg",info:"画大象的小新123456",url:"https://lol.qq.com/guides/detail.shtml?ADTAG=cooperation.glzx.web&name=Annie&line=mid"}];

        var that = this;

        var num = 3;

        var timer = setInterval(function () {

            num--;

            if (num <= 0) {

            console.log("加载完了");

            clearInterval(timer);

            wx.hideNavigationBarLoading() //完成停止加载

            wx.stopPullDownRefresh();

                

            that.setData({

                listData:that.data.listData.concat(addData),

                showloading:true,

                showloaded:false,

                addcount:that.data.addcount+1,

            })  

            } 

        }, 1000)

    },

 

8,验证码功能,因为我用的text显示的验证码 不能使用button的disable功能   所以用全局变量disabled控制该text是否能点击。。。

getyzm: function () {

    var _this = this;

    var num = 61;

 

    if (!_this.data.disabled) {

      var timer = setInterval(function () {

        num--;

        if (num <= 0) {

          clearInterval(timer);

          _this.setData({

            codename: '重新发送',

            disabled: false,

            fontcolor: '#f00'

          })

 

        } else {

          _this.setData({

            codename: num + "s",

            disabled: true,

            fontcolor: '#00f'

          })

        }

      }, 1000)

    } 

  },

 

9,底部弹窗列表item点击选择

   wx.showActionSheet({

        //写一个底部弹窗和点击事件

        itemList: ['haha', 'baba'],

        itemColor: '#f00',

        success: function (res) {

          if (res.tapIndex === 0) {

            wx.showToast({

              title: 'haha',

              icon: "none",

            })

          } else if (res.tapIndex === 1) {

            wx.showToast({

              title: 'baba',

              icon: "none",

            })

          }

        },

        fail: function (res) {

 

        }

      }),

 

10,页面跳转和传值    我现在也只学了最基础的  即通过跳转的url传值

  toPageTest: function () {

    //写一个跳转到listView界面   

    wx.navigateTo({ // navigateTo相当于android  startActivity中的activity标准模式    

      url: '../listpage/listpage?name=123&pwd=123456',

    })

  },

然后再listpage界面的onload有参函数获取

  /**

     * 生命周期函数--监听页面加载

     */

    onLoad: function (options) {

        var op = options;

        console.log(op.name +'is'+ op.pwd)// raymond is male

        //模拟请求第一页的数据

        this.getFirstDataNetWork();

    },

 

tip:函数里回调中(网络请求/倒计时等),都需要先把this转换才能使用,即var  thst = this; 否则无法访问和赋值全局变量。

 

2020-12-16 ADD:

11.全局变量定义和使用

在项目的app.js里面新加如下:

 globalData: {

    userInfo: null,

    hasLogin: "false",

    opnid: null

  },  

在page里面使用的时候在最上面(page花括号外面)写:

const app = getApp()

然后使用的时候这样就行了 用app代替this

app.globalData.userInfo

12.底部切换tab使用(必须大于等于2个  小于等于5个)

在项目的app.json里添加如下,配置页面  来回切换的icon 、字体颜色和tab对应的page

"tabBar": {  

            "color": "#a9b7b7",  

            "selectedColor": "#f00",  

            "borderStyle": "black" ,

            "list": [{  

              "selectedIconPath": "imgages/bg.png",  

              "iconPath": "imgages/bg.png",  

              "pagePath": "pages/index/index",  

              "text": "首页"  

            }, {  

              "selectedIconPath": "imgages/bg.png",  

              "iconPath": "imgages/bg.png",  

              "pagePath": "pages/listpage/listpage",  

              "text": "列表"  

            },{  

              "selectedIconPath": "imgages/bg.png",  

              "iconPath": "imgages/bg.png",  

              "pagePath": "pages/bannerpage/bannerpage",  

              "text": "轮播图"  

            }

            ]  

          }

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值