uniapp通过监听longpress、touch事件完成长按录音、滑动取消效果

uni-app

最近有一个自己的项目需要让用户能够长按录音,
看了一下uniapp的插件市场没有合适的插件可以直接用,
遂自己写一个。

整个开发下来,核心就是longpress事件、touch事件。

首先是longpress,也就是用户长按某个view时,可以触发的事件

javascript
<view @longpress="longpress">我是按钮</view>

longpress(){
    // 如果你希望用户按的时间长一些,这里可以用settimeout包裹你的逻辑
}

然后是touch事件,主要分为start/move/end三个,均绑定在按钮上

javascript
<view @touchstart="touchStart" @touchmove="touchMove" @touchend="endRecord">我是按钮</view>

分别来说一下

javascript
touchStart(e){
    // 无论你是否绑定longpress,只要手指触摸这个view,就触发start
    // 这里我们需要记录此时的坐标
    this.startTouchData.clientX = e.changedTouches[0].clientX; //手指按下时的X坐标
    this.startTouchData.clientY = e.changedTouches[0].clientY; //手指按下时的Y坐标
}

touchMove(e){
    // 触摸后继续移动手指时,将触发这个事件
    // 这里我们根据每次移动的坐标变化判断是向上还是向下滑动
    let touchData = e.touches[0]; //滑动过程中,手指滑动的坐标信息 返回的是Objcet对象
    let moveX = touchData.clientX - this.startTouchData.clientX;
    let moveY = touchData.clientY - this.startTouchData.clientY;
    if (moveY < -50) {
        // 向上滑动
        this.recording = false;
    } else {
        // 向下滑动
        this.recording = true;
    }
}

endRecord(){
    // 最后就是松手、结束触摸
    // 这里分为两种情况
    // 也就是当已经监听到你向上滑动时,松手则取消录音
    // 当监听到没有移动、或是向下滑动时,则完成录音
    if (this.recording) {
        // 完成录音
    } else {
        // 此时松手后响应的是取消录音
    }
}

基本逻辑就是这样,剩下的就是写样式,这里就不再单独说。
开头动图里的那个已经以插件形式发布到dcloud的插件市场,
可以进行非常高自由度的定义,同时也是免费,有需要可以自取。

留言板

uniapp通过监听longpress、touch事件完成长按录音、滑动取消效果

写信给我

交个朋友

  1. Wechat

    yflowerred

    聊会儿
  2. 即刻

    抱走大柠檬

    关注我
  3. Twitter X

    hugLemon

    关注我

友情链接

  1. Free PDF Tools

    免费PDF工具集合

    查看
  2. indie hacker tools

    独立开发者工具集合

    查看
  3. Jasmine Business

    Make your business easier in China.

    查看
  4. 乘风外贸工具导航

    外贸工具导航大全

    查看
  5. inWind乘风出海

    智能外贸生态服务平台

    查看
  6. Charcoal Go

    shisha & BBQ charcoal supplies

    查看
  7. Next.js中文文档

    Next.js中文文档和资源

    查看
  8. Corey

    Corey Chiu

    查看