首页 > 编程语言 >小程序中的事件处理

小程序中的事件处理

时间:2024-06-11 21:32:38浏览次数:14  
标签:事件处理 console log 程序 事件 wx data 页面

事件处理

一个应用仅仅只有界面展示是不够的,还需要和用户做交互,例如:响应用户的点击、获取用户输入的值等等,在小程序里边,我们就通过编写 JS 脚本文件来处理用户的操作

1. 事件绑定和事件对象

小程序中绑定事件与在网页开发中绑定事件几乎一致,只不过在小程序不能通过 on 的方式绑定事件,也没有 click 等事件,小程序中绑定事件使用 bind 方法,click 事件也需要使用 tap 事件来进行代替,绑定事件的方式有两种:

第一种方式:bind:事件名,bind 后面需要跟上冒号,冒号后面跟上事件名

<button bind:tap="handler">按钮</button>

第二种方式:bind事件名,bind 后面直接跟上事件名

<button bindtap="handler">按钮</button>

事件处理函数需要写到 .js 文件中,在 .js 文件中需要调用小程序提供的 Page 方法来注册小程序的页面,我们可以直接在 Page 方法中创建事件处理函数。例如:

// pages/home/home.js
Page({
  // 页面的初始数据
  data: {},

  // 事件处理程序
  handler () {
    console.log('我被执行啦~~~')
  }
    
  // 其他 coding...
})

当组件触发事件时,绑定的事件的处理函数会收到一个事件对象,用来记录事件发生时的相关信息。在触发事件时,事件处理程序会主动的给我们传入一个参数 —— event(事件对象)

// pages/home/home.js
Page({
  // 页面的初始数据
  data: {},

  // 事件处理程序
  handler (event) {
    // console.log('我被触发了~~~')
    console.log(event)
  }
    
  // 其他 coding...
})

2. 小程序中的事件

https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html 事件系统

事件绑定

bind事件名 tap移动端事件

bindtap=“事件名字”

catchtap=“阻止事件冒泡”

事件需要在js文件中进行定义即可

事件传递参数

在标签上绑定一个属性data-index=“xxxx”

方法中event.target.dataset获取对象数据内容

<button size="mini" type="primary" data-type="jian" bindtap="changeNum">-</button>
{{num}}
<button size="mini" type="primary" data-type="jia"  bindtap="changeNum">+</button>
Page({
    changeNum(e){
        console.log(e);
        let {type} = e.target.dataset;
        type=='jia'?this.data.num++:this.data.num--;
        this.setData({
          num: this.data.num,
        })
      },
})

条件渲染

wx:if v-if block
 <view wx:if="{{flag}}">Hello wx:if条件渲染的使用</view>
 <view hidden="{{!flag}}">Hello hidden条件渲染的使用</view>

 <button bindtap="toggle">toggle</button>
Page({
    data:{
      flag:true,  
    },
    toggle(){
        console.log(this.data.flag);
        let flag = this.data.flag;
        //修改数据的内容,data中绑定的数据,
        this.setData({
          flag:!flag,
        })
  },
})
hidden
hidden和 wx:if的区别
  1. wx:if控制的区域,框架有一个局部渲染的过程,会根据控制条件的改变, 动态创建或销毁对应的UI结构
  2. wx:if 是惰性的,如果在初始渲染条件为 false,框架什么也不做, 在条件第一次变成真的时候才开始局部渲染
  3. hidden只是 简单的控制组件的显示隐藏,组件始终会被渲染
  4. wx:if 更高的切换消耗hidden 有更高的 初始渲染消耗。因此,如果需要 频繁切换的情景下,用 hidden 更好,如果 运行时条件不大可能改变则 wx:if 较好。

列表渲染

wx:for
  • 在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件
  • 默认数组的当前项的下标变量名默认为index,数组当前项的变量名默认为item
block wx:for
  • 类似 block wx:if,也可以将 wx:for 用在<block></block>标签上,以渲染一个包含多节点的结构块
指定索引与当前项的变量名
  • 使用wx:for-item可以指定数组当前元素的变量名
  • 使用wx:for-index可以指定数组当前下标的变量名
<view wx:for="{{user}}" wx:key="index">
  {{index}} - {{item.name}} - {{item.age}} -{{item.love}}
 </view>
Page({
    data:{
         user:[
          {name:"张三",age:18,love:"抽别人烟"},
          {name:"李四",age:18,love:"摸别人屁股"},
        ]
    }
})

Wxs

什么是wxs
WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。
Wxs如何使用

cate.页面中

<!--pages/cate/index.wxml-->
<wxs module="m1">
var msg = "hello Wxs";
module.exports = {
  msg:msg
}
</wxs>
<view>
{{m1.msg}}
</view>
Wxs的内嵌及引入
  • 直接把wxs引入页面中,内嵌方式
  • 定义wxs的文件,使用引入的方式
<!--pages/cate/index.wxml-->
<wxs module="m1">
var msg = "hello Wxs";
module.exports = {
  msg:msg
}
</wxs>
引入的方式来使用wxs的方法
<wxs module="s1" src="/utils/sum.wxs"></wxs>
<view>
{{m1.msg}}
</view>
<view>
{{s1.getSum(10,20)}}
</view>

utils/sum.wxs

var getSum = function(x1,x2){
  return x1+x2;
}
module.exports = {
  getSum:getSum,
}
Wxs支持的数据类型
Number  String Boolean   Object Array  Date Function  Regexp 

下拉刷新

下拉刷新的概念以及场景
  • 概念:下拉刷新是移动端更新列表数据的交互行为,用户通过手指在屏幕上自上而下的滑动,可以触发页面的下拉刷新,更新列表数据
  • 应用场景:在移动端,数据列表是常见的页面效果,更新列表数据是最基本的页面需求,相比于按钮刷新、定时刷新来说,下拉刷新的用户体验方便友好,已经成为移动端刷新列表数据的最佳解决方案
如何设置下拉刷新
  • 方式一:需要在app.json 的 window 选项中或页面配置中开启enablePullDownRefresh。但是,一般情况下,推 荐在页面配置中为需要的页面单独开启下拉刷新行为

  • 方式二:可以通过wx.startPullDownRefresh()触发下拉刷新,调用后触发下拉刷新动画,效果与用户手动下拉刷新一致

  • 示例代码:

    通过配置enablePullDownRefresh来为页面开启下拉刷新功能

    {
        "enablePullDownRefresh": true
    }
    

    通过wx.startPullDownRefresh()来为页面开启下拉刷新功能

    <button bindtap="refresh">点击刷新页面</button>
    
    Page({
        refresh() {
            console.log(1)
            wx.startPullDownRefresh()
        }
    })
    

    **注意:**即使通过startPullDownRefresh方法实现下拉刷新,也要在页面中配置enablePullDownRefresh属性

设置下拉刷新窗口的样式
  • 需要在app.json 的 window 选项中或页面配置中修改backgroundColor和backgroundTextStyle选项
    • backgroundColor 用来配置下拉刷新窗口的背景颜色,仅支持16进制颜色值
    • backgroundTextStyle 用来配置下拉刷新loading的样式,仅支持 dark 和 light
监听下拉刷新事件
  • 为页面添加onPullDownRefresh()函数,可以监听用户在当前页面的下拉刷新事件

  • 示例代码:

    // 监听下拉刷新的事件
    onPullDownRefresh() {
        console.log('页面刷新了')
        this.setData({
            arr: [1, 2]
        })
    }
    
停止下拉刷新
  • 当通过startPullDownRefresh方法处理完下拉刷新后,下拉刷新的 loading 效果会一直显示,不会主动消失,所以需要手动隐藏下拉刷新的 loading 效果。此时,调用wx.stopPullDownRefresh()可以停止当前页面的下拉刷新
  • //配置操作信息
  1. 如何配置,单页面json文件中开启enablePullDownRefresh:true, 修改窗口的样式信息
  2. onPullDownRefresh中,监听下拉刷新事件,事件中做一下不为认知的事
  3. this.setData({key:value})

上拉加载

使用场景
  • 主要当用户滚动页面的时候加载更多的数据内容,
  • 相当于移动端的分页。刚开始之家在部分数据,页面滚动的时候加载更多的数据,翻页
设置监听的距离

json文件中设置distance,默认是50px 单个页面或者全局

上拉加载

设置触底的距离

不设置默认是50px

生命周期函数

onReachBottom(){

​ 加载更多数据的逻辑操作内容

}

其他事件

页面滚动事件onPageScroll
<wxs module="cate">
  var list = [{id:1,name:"张三"},{id:2,name:"李四"}];
  module.exports = {
    list:list
  }
</wxs>
<wxs src="/utils/cate.wxs" module="cate1"></wxs>
<view>
  <view class="item-{{item.id}}" wx:for="{{cate.list}}" wx:key="index">
    {{item.id}}--{{item.name}}
  </view>

  <view class="item-{{item.id}}" wx:for="{{cate1.list1}}" wx:key="index">
    {{item.id}}--{{item.name}}
  </view>
</view>
 // wx.showToast({
    //   title: '加载中',
    //   icon:"loading"
    // })
    // wx.showLoading({
    //   title:"小二正在努力加载中",
    //   mask:true,
    // })

    // setTimeout(()=>{
    //   wx.hideLoading();
    // },2000);

    // wx.showModal({
    //   title:"删除提示",
    //   content:"确定要删除数据吗",
    //   cancelColor:"#FF0000",
    //   complete:()=>{
    //     wx.showToast({
    //       title: '取消操作',
    //     })
    //   }
    // })

wx.pageScrollTo() 微信自带返回页面的某个滚动的位置,自带动画效果

比如返回顶部的操作效果,

<view class="top" bindtap="toTop">返回</view>
//返回顶部的方法
  toTop(){
    console.log("返回顶部的效果");
    //返回顶部所需要的数据
    wx.pageScrollTo({
      scrollTop:0,//滚动的高度
      duration:1000,//耗费的时间
    })
  },
分享事件onShareAppMessage
  • 监听用户点击页面内转发按钮(<button> 组件 open-type=“share”)或右上角菜单“转发”按钮的行为,并自定义转发内容。其中 Object 参数说明如下
/**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    return {
      title:"丁熙翔于小黑二三事",
      imageUrl:"https://res.wx.qq.com/wxdoc/dist/assets/img/0.4cb08bb4.jpg",
    }
  }

网络数据请求

wx.showToast //信息提示

wx.pageScrollTo() //页面滚动

wx.getStorage

wx.setStorage

wx.request

小程序后台配置
  • 请求合法的域名的,我们还可以在小程序的后台配置信息,
  • 线上需要配置这个信息,
跳过域名检测
  • 跳转域名检测,修改小程序的配置信息
  • 详情中> 本地配置 》 勾选不检验合法域名,https等信息
get请求和post请求简单语法
/**
   * 生命周期函数--监听页面加载
   */
  onl oad: function (options) {
    
    //请求严选商城的Api
    wx.request({
      url: 'https://api.it120.cc/small4/shop/goods/list',
      method:"get",
      data:{
        page:1,
        pageSize:6
      },
      success:(res)=>{
        console.log(res);
      }
    })
  },
const request = (url,method="get",data={}) => {
  return new Promise((resolve, reject) => {
    wx.request({
      url: url || 'https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata',
      data: data ||  {},
      method: method || "GET",
      success: (res) => {
        console.log(res);
        resolve(res);

        wx.hideLoading();
      },
      fail: (err) => {
        console.log(err);
        reject(err);
      }
    })
  })
}

module.exports = {
  request,
}
// pages/home/index.js
const {request} = require("../../utils/request.js");
....

  async getBanner(){
    wx.showLoading({
      title: '努力加载中',
    })

    let res = await request("https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata")

    console.log(res);
    let {message } = res.data;

    this.setData({
      banner:message,
    })
  },

3. 绑定并阻止事件冒泡

事件分为冒泡事件和非冒泡事件:

  1. 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
  2. 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。

使用 bind 绑定的事件,会触发事件冒泡,如果想阻止事件冒泡,可以使用 catch 来绑定事件。

<view bindtap="parentHandler">
  <!-- 使用 bind 绑定的事件,会产生事件冒泡 -->
  <!-- <button bindtap="handler">按钮</button> -->

  <!-- 使用 catcht 绑定的事件,会阻止事件冒泡 -->
  <button catchtap="handler">按钮</button>
</view>

Page({
  // 页面的初始数据
  data: {},

  // 事件处理程序
  handler (event) {
    console.log('我是子绑定的事件 ~~~')
  },
  
  parentHandler () {
    console.log('我是父绑定的事件 ~~~')
  }
    
  // 其他 coding...
})

WXML 中冒泡事件列表如下表:

类型触发条件
touchstart手指触摸动作开始
touchmove手指触摸后移动
touchcancel手指触摸动作被打断,如来电提醒,弹窗
touchend手指触摸动作结束
tap手指触摸后马上离开
longpress手指触摸后,超过350ms再离开,如果指定了事件回调函数并触发了这个事件,tap事件将不被触发
longtap手指触摸后,超过350ms再离开(推荐使用 longpress 事件代替)
transitionend会在 WXSS transition 或 wx.createAnimation 动画结束后触发
animationstart会在一个 WXSS animation 动画开始时触发
animationiteration会在一个 WXSS animation 一次迭代结束时触发
animationend会在一个 WXSS animation 动画完成时触发
touchforcechange在支持 3D Touch 的 iPhone 设备,重按时会触发

标签:事件处理,console,log,程序,事件,wx,data,页面
From: https://blog.csdn.net/A_fork/article/details/139601761

相关文章

  • CH04_程序流程结构
    CH04_程序流程结构程序流程结构C/C++支持最基本的三种程序运行结构:顺序结构:程序按顺序执行,不发生挑战选择结构:依据条件是否满足,有选择的执行相应的功能循环结构:依据条件是否满足,循环多次执行某段代码选择结构if语句作用:执行满足条件的语句单行格式if语句:if(条件){语句......
  • MFC案例:利用SetTimer函数编写一个“计时器”程序
    一、希望达成效果    利用基于对话框的MFC项目,做一个一方面能够显示当前时间;另一方面在点击开始按钮时进行读秒计时,计时结果动态显示,当点击结束时读秒结束并保持最后结果。二、编程步骤及相关代码、注释   1、启动VS->创建新项目->MFC应用-项目名称:MFCtimer->......
  • C#实现应用程序多屏显示(附完整源码)
    C#实现应用程序多屏显示下面是一个简单的C#示例程序,演示如何在多个屏幕上显示窗口。这个示例将创建两个窗体,并将它们分别显示在两个不同的屏幕上。如果你的系统上有多个屏幕,这个程序将会有效。确保你在一个WindowsForms应用程序中使用以下代码。首先,创建一个新的W......
  • 大厂“争招”鸿蒙人才,鸿蒙程序员平均月薪超1万8
    鸿蒙程序员成新宠,大厂“抢人”大战白热化,月薪破万八只是开始?   在科技浪潮的推动下,鸿蒙系统异军突起,成为科技圈的新星。它如同一块肥沃的土地,孕育着无限商机,也滋养着程序员的梦想。如今,鸿蒙程序员已成为市场上的“香饽饽”,一场前所未有的“抢人”大战正在上演。而这一切,都......
  • 期终架构项目,微信小程序前端---------宠物上门喂养
    项目目录架构 所有页面pages1addanimal增加宠物页面页23-------------------------------------------------4wxmly:56<view>7<text>爱宠照片</text>8</view>9<!--头像点击选择按钮-->10<viewstyle="margin-bottom......
  • wimlib API 提供了一系列用于处理 Windows 映像文件(.wim 文件)的函数和数据结构,使开发
    wimlibAPI提供了一系列用于处理Windows映像文件(.wim文件)的函数和数据结构,使开发人员能够在其应用程序中集成对WIM文件的创建、修改和提取功能。以下是一些常见的wimlibAPI:WIM文件的创建和初始化:wimlib_create_new_wim():创建一个新的WIM文件。wimlib_open_wim():......
  • 基于SpringBoot的刷题小程序的设计与实现+附源码+数据库
    摘要:随着互联网技术的快速发展,在线教育平台逐渐成为学生学习和复习的重要工具。为了提高用户在学习过程中的效率和体验,本文提出并实现了一个基于SpringBoot的刷题小程序。该小程序旨在通过高效的题库管理、智能化的刷题功能以及友好的用户界面,帮助用户更好地进行知识点的巩......
  • C程序函数调用&系统调用
    理解程序的执行我们要知道CPU可以自由地访问寄存器、内存。另外,程序是由操作系统执行的,所以操作系统能够控制程序的所有执行情况,限制程序的行为。程序地执行过程:程序是一个二进制文件,包含程序的代码指令、代码中的文本信息等(参考C语言的程序的各种段)执行一个程序后,会将这个二......
  • 淘宝扭蛋机小程序搭建:营销策略的精心布局
    随着移动互联网的快速发展,小程序成为了企业连接用户、提供服务的新桥梁。淘宝扭蛋机小程序作为一种创新的电商营销工具,通过独特的扭蛋机制,为用户带来趣味性和惊喜感。本文将探讨淘宝扭蛋机小程序搭建过程中的营销策略布局。一、明确目标用户群体在搭建淘宝扭蛋机小程序之前,首......
  • Linux系统通过CrossOver运行windows系统exe程序
    1.CrossOver下载下载网址:https://crossover.mairuan.com/?a_planid=462146305&a_unitid=9457631754&a_kw_enc_utf8=crossover+%E4%B8%8B%E8%BD%BD&a_creative=93751965498&cjtg=bdsem_cr_pp&bd_vid=11448931900093706309点击免费下载软件自动下载的安装包不是liunx需要的,需要下......