精华内容
下载资源
问答
  • 》》》什么是事件 事件是视图层到逻辑层的通讯方式。 事件可以将用户的行为反馈到逻辑层进行处理。 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。 事件对象可以...

    》》》什么是事件

    • 事件是视图层到逻辑层的通讯方式。

    • 事件可以将用户的行为反馈到逻辑层进行处理。

    • 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。

    • 事件对象可以携带额外信息,如id, dataset, touches。

    》》》事件分类

    • touchstart 手指触摸

    • touchmove 手指触摸后移动

    • touchcancel 手指触摸动作被打断,如弹窗和来电提醒

    • touchend 手指触摸动作结束

    • tap 手指触摸后离开

    • longtap 手指触摸后后,超过350ms离开

    》》》事件绑定

    事件绑定的写法同组件的属性,以 key、value 的形式。

    • key 以bind或catch开头,然后跟上事件的类型,如bindtap, catchtouchstart

    • value 是一个字符串,需要在对应的 Page 中定义同名的函数。不然当触发事件的时候会报错。 bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。

    上面简单介绍了小程序事件基础,是时候彰显"事件"的威力:

    • 单击(tap)

    • 双击(dbtap)

    • 长按(longtap)

    • 滑动

    • 多点触控

    1.单击

    单击事件由touchstart、touchend组成,touchend后触发tap事件。

    <view>
      <button type="primary" bindtouchstart="mytouchstart" bindtouchend="mytouchend" bindtap="mytap">点我吧</button>
    </view>
    mytouchstart: function(e){    console.log(e.timeStamp + '- touch start')
    },mytouchend: function(e){    console.log(e.timeStamp + '- touch end')
    },mytap: function(e){    console.log(e.timeStamp + '- tap')
    }

    2.双击

    双击事件由两个单击事件组成,两次间隔时间小于300ms认为是双击;微信官方文档没有双击事件,需要开发者自己定义处理。

    <view>
      <button type="primary" bindtap="mytap">点我吧</button>
    </view>

     

     

    3.长按

    长按事件手指触摸后,超过350ms再离开。

    <view>
      <button type="primary" bindtouchstart="mytouchstart" bindlongtap="mylongtap" 
        bindtouchend="mytouchend" bindtap="mytap">点我吧</button>
    </view>
    mytouchstart: function(e){    console.log(e.timeStamp + '- touch start')
    },//长按事件mylongtap: function(e){    console.log(e.timeStamp + '- long tap')
      },mytouchend: function(e){    console.log(e.timeStamp + '- touch end')
    },mytap: function(e){    console.log(e.timeStamp + '- tap')
    }

    单击、双击、长按属于点触事件,会触发touchstart、touchend、tap事件,touchcancel事件只能在真机模拟,不多说了。

    事件触发顺序
    单击touchstart → touchend → tap
    双击touchstart → touchend → tap → touchstart → touchend → tap
    长按touchstart → longtap → touchend → tap

    4.滑动

    手指触摸屏幕并移动,为了简化起见,下面以水平滑动和垂直滑动为例。 滑动事件由touchstart、touchmove、touchend组成

    坐标图: 

    1. 以屏幕左上角为原点建立直角坐标系。第四象限为手机屏幕,Y轴越往下坐标值越大(注意跟数学象限的区别)。

    2. 假设A点为touchstart事件触摸点,坐标为A(ax,ay),然后手指向上滑动到点B(bx,by),就满足条件by < ay;

    3. 同理,向右滑动到C(cx,cy),满足cx > ax;向下滑动到D(dx,dy),满足dy > ay;向左移动到E(ex,ey)满足ex < ax.

    4. 计算线段AB在Y轴上投影长度为m,在X轴上的投影长度为n

    5. 计算r = m/n,如果r > 1,视为向上滑动。

    6. 同理计算线段AC,AD,AE在Y轴投影长度与X轴的投影长度之比,得出向右向下向左的滑动。

    以上没考虑r为1的情况。

    <view>
      <button type="primary"  bindtouchstart="mytouchstart" bindtouchmove="mytouchmove">点我吧</button>
    </view>

    5.多点触控

    由于模拟器尚不支持多点触控,内测开放后,继续补充。

    转载于:https://www.cnblogs.com/nosqlcoco/p/5954453.html

    展开全文
  • 什么是事件事件是视图层到逻辑层的通讯方式。事件可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。事件对象可以携带额外信息,如id, dataset, ...

    什么是事件

    事件是视图层到逻辑层的通讯方式。

    事件可以将用户的行为反馈到逻辑层进行处理。

    事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。

    事件对象可以携带额外信息,如id, dataset, touches。

    事件的使用方式

    在组件中绑定一个事件处理函数。

    如bindtap,当用户点击该组件的时候会在该页面对应的Page中找到相应的事件处理函数。

    Click me!

    在相应的Page定义中写上相应的事件处理函数,参数是event。

    Page({

    tapName: function(event){

    console.log(event)

    }

    })

    可以看到log出来的信息大致如下

    {

    "type": "tap",

    "timeStamp":895,

    "target": {

    "id": "tapTest",

    "dataset": {

    "hi": "WeChat"

    }

    },

    "currentTarget": {

    "id": "tapTest",

    "dataset": {

    "hi": "WeChat"

    }

    },

    "detail": {"x":53,"y":14

    },

    "touches": [{

    "identifier":0,

    "pageX":53,

    "pageY":14,

    "clientX":53,

    "clientY":14,

    }],

    "changedTouches": [{"identifier":0,

    "pageX":53,"pageY":14,"clientX":53,"clientY":14,}],

    }

    事件详解

    事件分类

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

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

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

    WXML的冒泡事件列表:

    类型

    触发条件

    touchstart

    手指触摸动作开始

    touchmove

    手指触摸后移动

    touchcancel

    手指触摸动作被打断,如来电提醒,弹窗

    touchend

    手指触摸动作结束

    tap

    手指触摸后马上离开

    longtap

    手指触摸后,超过350ms再离开

    注:除上表之外的其他组件自定义事件都是非冒泡事件,如

    的submit事件,的input事件,的scroll事件,(详见各个组件)

    事件绑定

    事件绑定的写法同组件的属性,以key、value的形式。

    key以bind或catch开头,然后跟上事件的类型,如bindtap, catchtouchstart

    value是一个字符串,需要在对应的Page中定义同名的函数。不然当触发事件的时候会报错。

    bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。

    如在下边这个例子中,点击inner view会先后触发handleTap3和handleTap2(因为tap事件会冒泡到middle view,而middle view阻止了tap事件冒泡,不再向父节点传递),点击middle view会触发handleTap2,点击outter view会触发handleTap1。

    outer view

    middle view

    inner view

    事件对象

    如无特殊说明,当组件触发事件时,逻辑层绑定该事件的处理函数会收到一个事件对象。

    BaseEvent基础事件对象属性列表:

    属性

    类型

    说明

    type

    String

    事件类型

    timeStamp

    Integer

    事件生成时的时间戳

    target

    Object

    触发事件的组件的一些属性值集合

    currentTarget

    Object

    当前组件的一些属性值集合

    CustomEvent 自定义事件对象属性列表(继承 BaseEvent):

    属性

    类型

    说明

    detail

    Object

    额外的信息

    TouchEvent 触摸事件对象属性列表(继承 BaseEvent):

    属性

    类型

    说明

    touches

    Array

    触摸事件,当前停留在屏幕中的触摸点信息的数组

    changedTouches

    Array

    触摸事件,当前变化的触摸点信息的数组

    特殊事件:中的触摸事件不可冒泡,所以没有 currentTarget。

    type

    通用事件类型

    timeStamp

    该页面打开到触发事件所经过的毫秒数。

    target

    触发事件的源组件。

    属性

    类型

    说明

    id

    String

    事件源组件的id

    tagName

    String

    当前组件的类型

    dataset

    Object

    事件源组件上由data-开头的自定义属性组成的集合

    currentTarget

    事件绑定的当前组件。

    属性

    类型

    说明

    id

    String

    当前组件的id

    tagName

    String

    当前组件的类型

    dataset

    Object

    当前组件上由data-开头的自定义属性组成的集合

    说明: target 和 currentTarget 可以参考上例中,点击 inner view 时,handleTap3 收到的事件对象 target 和 currentTarget 都是 inner,而 handleTap2 收到的事件对象 target 就是 inner,currentTarget 就是 middle。

    dataset

    在组件中可以定义数据,这些数据将会通过事件传递给 SERVICE。书写方式:以data-开头,多个单词由连字符-链接,不能有大写(大写会自动转成小写)如data-element-type,最终在 event.target.dataset 中会将连字符转成驼峰elementType。

    示例:

    DataSet Test

    Page({

    bindViewTap:function(event){

    event.target.dataset.alphaBeta === 1 // - 会转为驼峰写法

    event.target.dataset.alphabeta === 2 // 大写会转为小写

    }

    })

    touches

    touches 是一个数组,每个元素为一个 Touch 对象(canvas 触摸事件中携带的 touches 是 CanvasTouch 数组)。 表示当前停留在屏幕上的触摸点。

    Touch 对象

    属性

    类型

    说明

    identifier

    Number

    触摸点的标识符

    pageX, pageY

    Number

    距离文档左上角的距离,文档的左上角为原点 ,横向为X轴,纵向为Y轴

    clientX, clientY

    Number

    距离页面可显示区域(屏幕除去导航条)左上角距离,横向为X轴,纵向为Y轴

    CanvasTouch 对象

    属性

    类型

    说明

    特殊说明

    identifier

    Number

    触摸点的标识符

    x, y

    Number

    距离 Canvas 左上角的距离,Canvas 的左上角为原点 ,横向为X轴,纵向为Y轴

    changedTouches

    changedTouches 数据格式同 touches。表示有变化的触摸点,如从无变有(touchstart),位置变化(touchmove),从有变无(touchend、touchcancel)。

    detail

    自定义事件所携带的数据,如表单组件的提交事件会携带用户的输入,媒体的错误事件会携带错误信息,详见组件定义中各个事件的定义。

    点击事件的detail 带有的 x, y 同 pageX, pageY 代表距离文档左上角的距离。

    更多微信小程序开发教程,可以关注hi小程序。

    展开全文
  • 小程序事件分为冒泡事件和非冒泡事件: 冒泡事件: 当一个组件上的事件被触发后,该事件会向父节点传递。 非冒泡事件: 当一个组件上的事件被触发后,该事件不会向父节点传递。 WXML的冒泡事件列表: touchstart ...

    小程序事件分为冒泡事件和非冒泡事件:

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

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

    普通事件绑定: bindtap
    绑定并阻止事件冒泡:catchtap
    与 bind 不同, catch 会阻止事件向上冒泡。

    <view id="outer" bindtap="handleTap1">
          outer view
        <view id="middle" bindtap="handleTap2">
            middle view
          <view id="inner" bindtouchstart="handleTap3">
            inner view
          </view>
        </view>
      </view>
    <script>
     handleTap1:function(){console.log('outer')},
      handleTap2:function(){console.log('middle')},
      handleTap3:function(){console.log('innder')},
    </script>
    

    当点击inner view的时候会依次触发父节点的绑定事件
    控制台输出

    // innder
    // middle
    // outer
    

    如果不想触发冒泡事件 请使用catch 绑定事件

    <view id="outer" catchtap="handleTap1">
        outer view
       <view id="middle" catchtap="handleTap2">
           middle view
         <view id="inner" catchtap="handleTap3">
           inner view
         </view>
       </view>
     </view>
    

    除 bind 和 catch 外,还可以使用 mut-bind 来绑定事件。一个 mut-bind 触发后,如果事件冒泡到其他节点上,其他节点上的 mut-bind 绑定函数不会被触发,但 bind 绑定函数和 catch 绑定函数依旧会被触发。
    所有 mut-bind 是“互斥”的,只会有其中一个绑定函数被触发。同时,它完全不影响 bind 和 catch 的绑定效果。

    事件的捕获阶段
    自基础库版本 1.5.0 起,触摸类事件支持捕获阶段。捕获阶段位于冒泡阶段之前,且在捕获阶段中,事件到达节点的顺序与冒泡阶段恰好相反。需要在捕获阶段监听事件时,可以采用capture-bind、capture-catch关键字,后者将中断捕获阶段和取消冒泡阶段。

    在下面的代码中,点击 inner view 会先后调用handleTap2、handleTap4、handleTap3、handleTap1。

    <view id="outer" bind:touchstart="handleTap1" capture-bind:touchstart="handleTap2">
      outer view
      <view id="inner" bind:touchstart="handleTap3" capture-bind:touchstart="handleTap4">
        inner view
      </view>
    </view>
    

    如果将上面代码中的第一个capture-bind改为capture-catch,将只触发handleTap2。

    小程序的事件对象

     <view id="inner" data-index="handleTap3" data-id="666" bindtouchstart="handleTap3">
       inner view
     </view>
    <script>
      handleTap3:function(event){console.log('innder',event)},
    </script>
    

    执行结果
    在这里插入图片描述
    这里传递参数的时候,可以改成在组件是绑定 data-xxx,绑定的值在event事件中通过
    event.target.dataset.xxx来获取

    小程序事件官方的说明文档:
    https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html

    展开全文
  • body { height: 2000px; } .backtop { /* 固定定位 */ position: fixed; right: 20px; bottom: 20px; width: 45px; height: 45px; li...
              body {
                height: 2000px;
                }
            
            .backtop {
                /* 固定定位 */
                position: fixed;
                right: 20px;
                bottom: 20px;
                width: 45px;
                height: 45px;
                line-height: 45px;
                text-align: center;
                background-color: rgba(0, 0, 0, 0.6);
                border-radius: 50%;
                color: #fff;
                font-size: 30px;
                /* 去除高亮 */
                -webkit-tap-highlight-color: transparent;
                /*transform: translate3d(x, y, 0); 会开启GPU加速,从而提高效率即动画的性能较高*/
            }

    <a href="#" id="backtop" class="backtop">&uarr;</a>

    <script>
            function drag(el, options) {
                // 判断x和y是否在外面传值,如果传值就使用传入的options.x和options.y,否则就使用默认值
                options.x = typeof options.x !== 'undefined' ? options.x : true;
                options.y = typeof options.y !== 'undefined' ? options.y : false;
    
                //如果禁止了x和y轴的拖动,也就没有必要再向下进行了,就在此返回
                if (!options.x && !options.y) return;
    
                //记录当前的坐标,起到实时更新作用
                var curPoint = {
                    x: 0,
                    y: 0
                };
    
                //记录手指头刚刚摁下时的坐标
                var startPoint = {};
    
                //
                var isTouchMove = false;
    
                //绑定事件
                el.addEventListener('touchstart', handleStart, false);
                el.addEventListener('touchmove', handleMove, false);
                el.addEventListener('touchend', handleEnd, false);
    
                function handleStart(ev) {
                    //获取手指
                    var touch = ev.changedTouches[0];
    
                    //记录刚开始的x和y的坐标
                    startPoint.x = touch.pageX;
                    startPoint.y = touch.pageY;
                }
    
                function handleMove(ev) {
                    // 阻止滚动条的默认行为
                    ev.preventDefault();
    
                    isTouchMove = true;
    
                    //获取手指
                    var touch = ev.changedTouches[0];
    
                    //记录和刚开始的x和y坐标之差
                    var diffPoint = {};
    
                    //记录x和y分别到底移动了多少距离,便于传递给move()函数
                    var movePoint = {
                        x: 0,
                        y: 0
                    };
    
                    // 计算差值
                    diffPoint.x = touch.pageX - startPoint.x;
                    diffPoint.y = touch.pageY - startPoint.y;
    
                    // 如果允许x和y轴拖动
                    if (options.x) {
                        movePoint.x = diffPoint.x + curPoint.x;
                    }
                    if (options.y) {
                        movePoint.y = diffPoint.y + curPoint.y;
                    }
    
                    // 调用
                    move(el, movePoint.x, movePoint.y);
                }
    
                function handleEnd(ev) {
                    // 如果没有移动
                    if (!isTouchMove) return;
    
                    var touch = ev.changedTouches[0];
    
                    // 更新当前坐标
                    curPoint.x += touch.pageX - startPoint.x;
                    curPoint.y += touch.pageY - startPoint.y;
    
                    isTouchMove = false;
                }
    
                function move(el, x, y) {
                    x = x || 0;
                    y = y || 0;
    
                    el.style.transform = 'translate3d(' + x + 'px, ' + y + 'px, 0)';
                }
            }
        </script>
        <script>
            var backtop = document.getElementById('backtop');
            drag(backtop, {
                x: true,
                y: true
                    // y: true
            });
        </script>

     

     

     

     

     

     

    展开全文
  • 微信小程序事件绑定 1.事件类型(常用) tap:点击事件; longtap:长按事件; touchstart:触摸开始; touchend:触摸结束; touchcansce:取消触摸; 2.事件绑定类型 bind绑定; catch绑定;(能阻止事件冒泡) 实例...
  • 而由于这个录制语音的事件是touchStart,touchEnd,用button的disabled是禁用不掉的,我就想着把这个事件给解绑了,后来发现用本来控制disabled的变量来控制这个touch方法就好了,如果不想触发,直接用if条件给return ...
  • 小程序-事件调用

    2021-11-04 11:07:03
    事件 | 微信开放文档 (qq.com) 类型 触发条件 最低版本 touchstart 手指触摸动作开始 ... 手指触摸后,超过350ms再离开,如果指定了事件回调函数并触发了这个事件,tap事件将不被触发 .
  • 在开发中需要监听手指在页面的滑动事件来来实现操作需求,这里找到了一个解决方案虽然不知道是不是最佳但是满足了需求,所以分享给大家,希望在大家需要的时候能够起到作用,如有不足之处还望指出,谢谢!...
  • 微信小程序的左右滑动触屏事件,主要有三个事件:touchstart,touchmove,touchend。 这三个事件最重要的属性是startX和startY,表示X,Y坐标。 touchstart在触摸开始时触发事件; touchend在触摸结束时触发事件; 1...
  • 在做一个小球跟随手指移动的效果时候,由于在touchmove事件中频繁调用setData改变小球的位移实现,在开发工具和IOS平台还算流畅,但在安卓机下手机预览出现极其卡顿的交互,简直是不堪入目。 可微信web开发者工具...
  • 先上结论删除其中:catchtap : 捕获事件,组织冒泡hover-stop-propagation :指定是否阻止本节点的祖先节点出现点击态原因呢,可以参考微信小程序的文档事件什么是事件事件是视图层到逻辑层的通讯方式。事件可以将...
  • 微信小程序事件

    2021-10-28 10:42:57
    touchstart 手指触摸动作开始 ... 手指触摸后,超过350ms再离开,如果指定了事件回调函数并触发了这个事件,tap事件将不被触发 1.5.0 longtap 手指触摸后,超过350ms再离开(推荐使用lo...
  • 微信小程序 触控事件:微信小程序的"事件"挺有意思。看了说明文档后发现它的功能很全,事件可以向父节点传递,而且打印这个事件的信息很透明,调试起来应该非常方便。接下来把文档copy过来...
  • touch开发文档:http://www.wetouch.net/touchwx_doc/ 微信开发者工具安装 下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 开发工具下载 进入官网进行下载。Visual Studio ...
  • any-touch一个手势库, 支持微信小程序 / 鼠标 / touch / vue安装npm i -S any-touchCDNunpkg.com/any-touch/dist/AnyTouch.umd.min.js快速开始import AnyTouch from "any-touch";const el = doucument....
  • 移动端touch事件判断滑屏手势的方向 方法一 当开始一个touchstart事件的时候,获取此刻手指的横坐标startX和纵坐标startY; 当触发touchmove事件时,在获取此时手指的横坐标moveEndX和纵坐标moveEndY;最后,通过这...
  • 对于小程序而言,逻辑层就是.js脚本文件的集合,由JavaScript编写的。 1、页面数据 (1)页面JS文件page函数中第一项为data属性,在data中定义本页面逻辑处理需要的数据,其中很大一部分数据将用于WXML文件的数据...
  • 1.微信小程序中的事件,以及为什么要用 data- 来绑定属性 原因:因为微信小程序中不能直接使用函数传参,就是用data-来绑定一个属性,进行传参 <!-- 通过 bindtap 给元素绑定事件 --> <view bindtap=...
  • 在微信小程序开发中,用touchstart,touchmove 来实现触摸移动。一开始,mytouchStart:function(e){console.log(e)} 打印出来的 e 一直是空的,也不知道是怎么回事,所以就一直获取不到 pageX 和 pageY,后面重新建...
  • WXS(WeiXin Script) 是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。 WXSS(WeiXin Style Sheet) 用于描述页面的样式。 组件(Component)是视图的基本组成单元。 四、WXML语法 1.wxml概述及作用 WXM.
  • 什么是事件、相关Touch事件的方法、拥有上述事件的类、ViewGroup、View、事件分发流程、方法的简单用途解析。
  • 在ec-canvas中添加 force-use-old-canvas=“true”
  • 在swiper-item上添加方法catchtouchmove 代码如下: //wxml <swiper-item catchtouchmove='catchTouchMove'> //js catchTouchMove:function(){ return false }
  • 触摸事件是如何触发并传递到view的? 触摸事件来源的大致流程: 事件来源: 手指触摸屏幕时,即产生了触摸信息。这个触摸信息由屏幕这个硬件...当viewRootImpl接收到触摸信息时,也正是应用程序进程事件分发的开始。
  • 就搁置了,不过有大半年没写小程序了也没去关注,今天就去看了下官方文档,发觉更新了点好东西就一直抖动这个问题,官方更新了一下出现bug的原因,没有具体阐述怎么去解决,但是总体说也给出了一个方案,大家可以去...
  • 监听touch事件,平移布局显示和隐藏删除按钮(列表每一项中有一个isTouchMove属性,通过监听touch改变该属性给列表不同的样式将隐藏的按钮显示出来) 代码 <view class="list-page"> <view class="list-...
  • 微信小程序canvas实现签名功能 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的...
  • 微信小程序轮播图

    2020-12-20 13:47:52
    微信小程序轮播图实现,比Android 轮播图来说,显得轻松多了。微信小程序提供swiper组件,官网api提供的swiper滑块视图容器。属性名类型默认值说明autoplayBooleanfalse是否自动切换currentNumber0当前所在页面的 ...
  • opacity: '0.8', }) } function touchmove(event, ins) { var touch = event.touches[0] || event.changedTouches[0] var pageX = touch.pageX var pageY = touch.pageY startX = pageX startY = ...
  • 微信小程序左右滑动删除事件 效果图 <scroll-view scroll-y enable-back-to-top style="height:{{ scrollHeight }}px" > <view> <block wx:for="{{ list }}" wx:for-item="item" wx:for-index=...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,816
精华内容 41,526
关键字:

小程序touch事件