微信小程序:左滑删除

背景

本身因为项目需求,需要实现列表左滑删除功能。因为懒,也觉得网上应该有现成的,就去百度了一波。确实有发现很不错的,例如这两篇文章:
https://segmentfault.com/a/1190000014831500
https://github.com/onlyling/some-demo/tree/master/sideslip-delete
但是第一篇文章表示列表的高度需要固定,这就满足不了我的需求。而第二篇文章对其实现感觉太过繁琐,故自己想了如何简易地实现左滑删除。

实现

我们通过使用微信小程序提供的scroll-view标签来实现左右滑动,我不知道为什么我看到的所有网上的教程都没有人用scroll-view标签,一开始我以为是用该标签无法实现,但是自己做了才发现用scroll-view标签实现会比只用view标签实现方便很多。

因为是左右滑动,所以我们需要使得scroll-view标签属性scorll-x="true",在看scroll-view标签时,发现了两个有意思的属性scroll-leftscroll-with-animation,这两个属性就是帮助我们简便快捷地实现左滑删除的必要属性。

scroll-left 即指定滚动条位置

scoll-with-animation 即允许滚动时以动画的形式过渡,什么意思呢?在我理解就是给元素一个animation动画效果,但是这个效果不是你设置的,而是微信自己内部生成的,具体是不是用animation实现我也不知道。。。

因此我们只需要根据左滑还是右滑设置滚动条距离左边的位置再配合动画的效果,就可以轻松实现左滑删除效果。

因为小程序没有自带的swipe滑动,所以我们需要自己计算左滑还是右滑。这里我们采用touchstart和touchend方法,通过获取pageX的位置来判断是左滑还是右滑。说到这,微信小程序提供的事件里还有touchmove方法,但是我尝试使用该方法发现根本触发不了,如果有知道的大神,望在下面评论里告知使用方法。

采用touchstart来捕捉,起始所在的位置。

 /**
   * 手指触摸开始
   */
    touchStart: function (e) {
      this.setData({
        touchStartPageX: e.changedTouches[0].pageX,
      })
    },

用touchend根据移动的距离来判断是左滑还是右滑,这里我对左右滑动小于10px的滑动不予生效。

/**
     * 手指触摸结束
     */
    touchEnd: function (e) {
      let touchEndPageX = e.changedTouches[0].pageX,
        offSetStartToEnd = touchEndPageX - this.data.touchStartPageX;  // 获取滑动的距离,正代表右滑,负代表左滑
      // 滑动距离小于10px则不生效
      if (offSetStartToEnd < 10 && offSetStartToEnd > -10) {
        return;
      };
      if (offSetStartToEnd > 10) {
        // 如果本身就已经是0,则不需要我们再调整位置
        if (this.data.scrollLeft === 0) {
          return;
        }
        this.setData({
          scrollLeft: 0,
        });
      };
      if (offSetStartToEnd < -10) {
        this.setData({
          scrollLeft: 100,  // 当滑动未到底时,通过设置scrollLeft最大,来让其自动到达底部
        })
      }
    }

补充:按钮点击事件的实现(7/23)

一开始我以为点击事件这一块并不需要我写,但是我发现是我太年轻了。实现按钮点击,我们需要注意的是:微信小程序事件的执行顺序是(touchstart > touchend > tap),所以因为我们之前使用了catch阻止了事件冒泡,这里如果我们在点击事件的实现上采用tap事件,并不会生效。这里我们需要一个折中的办法,使用touchend判断是点击还是滑动。
这里我们给按钮一个touchend,通过判断移动的大小,这里我们将移动小于10px的认为是点击事件。故此,一个按钮点击就已经实现了。

<view class="item-classify" wx:if="{{isNeedAddClassifyButton}}" bind:touchend="_setTouchEnd">
  <view class='iconfont icon-shanchu' style='font-size:20px;'></view>
  <text style='font-size: 12px;'>分类设置</text>
</view>
/**
 * 点击设置按钮
 */
_setTouchEnd: function (e) {
  let touchEndPageX = e.changedTouches[0].pageX,
    offSetStartToEnd = touchEndPageX - this.data.touchStartPageX;
  if (offSetStartToEnd < 10 & offSetStartToEnd > -10) {
    this.triggerEvent('set', {});
  };
  return;
}

总结

使用事件touchstart和touchend时,使用bind不知道为什么会有回弹效果,如果有需要该效果的可以修改catch为bind,这样左滑就会有回弹效果。

该文章里对于为什么scroll-left能够实现左滑描述的有点不清不楚,实在是不知道该怎么直白简便地讲解出来,没看懂的同学可以看我放在github上的源码,源码不多一看便知。

地址:https://github.com/Codedogdogdog/slide-delete

tips: 样式上的设置,因为每个人的需求肯定是不同的,如果大家在样式上有不同,可以直接自己修改。

接下来我会对该组件进行修改,为了小伙伴们在接下来使用中除了样式上的自己改动外,其它都不需要改动,可直接使用该组件。到时候将会在github上进行更新,如果感兴趣的话,在这跪求star(有点想要跳槽的想法,= =希望各位大佬给点帮助)。

实现效果

左滑删除.gif
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容