weex列表侧滑删除

weex列表侧滑删除

设计图:

这个页面是前段时间一个weex项目中的需求,最近比较闲,复盘一下。

第一个需要注意的地方是:

<list> 标签内部使用<cell>标签的时候,在<cell>标签内部 margin属性设置值无效!(以下截取自官方文档)


所以,我们需要对<list>标签设置margin-left属性,让其居中展示,(在Vue里面,所有的手机屏宽都是750px,所以我们可以直接把宽度写死)

第一版效果:


有了上面这个效果,接下来,我们需要考虑几个东西:

1,条目的真实宽度是多少?

​ 这里我们采用最简单的方法,把每个Item的宽度都加宽一个删除按钮的宽度,默认显示的时候放在条目最右边的屏幕之外;

2,如何让条目知道我们触摸的方向,并响应?

​ 查看weex官方文档关于手势事件的解决方案(https://weex.apache.org/zh/docs/events/gesture.html#手势类型)发现最好的处理方式是使用Swipe来处理我们的左右滑动事件。

3,如何响应我们监听到的手势事件,使条目显示出设计图上的删除效果?

​ 其实这里左滑出现删除,就是捕获到手势事件之后,判断为左滑就让当前条目向左做平移动画,反之同理。

下面是效果图:


压缩之后导致画质不佳!!

以下代码可以直接copy运行,注意,运行此代码必须在weex开发环境下!

<template>

   <div style="flex:1;width: 750px; background-color: #F7F7F7">

       <div style="height: 100px; width: 750px; background-color: #0094ff; justify-content: center">

           <text style="font-size: 40px;color: cornsilk; margin-left: 30px">侧滑deom</text>

       </div>

       <list style="flex: 1; width: 710px; margin-left: 20px;">

           <cell v-for="(item,index) in data">

               <div style="margin-top: 20px; margin-bottom: 20px; width: 710px; height: 160px; border-radius: 10px; background-color: #ffffff">

                   <div style="flex-direction: row; width: 870px" ref="itemDev" @swipe="handleSwipe($event,index)">

                       <div style="justify-content: center; width: 710px; height: 160px; background-color: #ffffff">

                           <text style="color: #666666; font-size: 30px">{{item}}</text>

                       </div>

                       <div style="background-color: #ff0000; width: 160px; height: 160px; justify-content: center; align-items: center" @click="removeItem(index)">

                           <text style="font-size: 30px; color:#ffffff">删除</text>

                       </div>

                   </div>

               </div>

           </cell>

       </list>

   </div>

</template>

<script>

   const animation = weex.requireModule('animation');

   // var modal = weex.requireModule("modal");

   export default {

       data() {

           return {

               data:["你好sad海东卡活动IQ我和我去换我前后二环企鹅号前后去武汉",

               "时候带合适的话我二哈和和好违和偶尔后期无痕求合区后求问候【美秋无痕哦环球网【偶尔会去【 哦环球网【西偶尔会去【owing",

               "时候带合适的话我二哈和和好违和偶尔后期无痕求合区后求问候偶尔会去【 哦环球网【西偶尔会去【owing",

               "时候带合适的话我二哈和和好违和偶尔后期无痕求合区后求问候【美秋无痕哦环球网【偶尔会去【 哦环球网【西偶尔会去【啊是的气候都请我喝",

               "时候带合适的话我二哈和和好违和偶尔后",

               "你好sad海东卡活动IQ我和我去换我前后二环企鹅号前后去武汉",

               "时候带合适的话我二哈和和好违和偶尔后期无痕求合区后求问候【美秋无痕哦环球网【偶尔会去【 哦环球网【西偶尔会去【owing",

               "时候带合适的话我二哈和和好违和偶尔后期无痕求合区后求问候偶尔会去【 哦环球网【西偶尔会去【owing",

               "时候带合适的话我二哈和和好违和偶尔后期无痕求合区后求问候【美秋无痕哦环球网【偶尔会去【 哦环球网【西偶尔会去【啊是的气候都请我喝",

               "时候带合适的话我二哈和和好违和偶尔后",

               ],

               //记录当前左滑出来的条目下标

               currentIndex:-1,

           }

       },

       methods: {

           handleSwipe (e , index) {

               if (e.direction == "left") {

                   this.goLeft(index);

               } else if (e.direction == "right"){

                   this.goRight(index);

               }

               // modal.toast({message:"==" + e.direction + "==" + index, duration:1});

           },

           goLeft(index){

               let itemEl = this.$refs.itemDev[index];

               //第二左滑条目与前一次左滑条目相同时,不处理

               if (index == this.currentIndex){

                   return;

               }

               //当前有划出的条目的时候,左滑其他条目,当前的条目归位,

               if (this.currentIndex != -1){

                   this.goRight(this.currentIndex);

               }

               //左滑当前条目

               if (this.currentIndex != index){

                   animation.transition(itemEl,{

                       styles: {

                           transform: 'translate(-160px, 0px)',

                           transformOrigin: 'center center'

                       },

                       duration: 200, //ms

                       timingFunction: 'linear',

                       delay: 0 //ms

                   },function () {

                   });

                   this.currentIndex = index;

               }

           },

           //time是动画时间,给个默认值 200毫秒,不传就表明这个值为200毫秒

           goRight(index,time = 200){

               let itemEl = this.$refs.itemDev[index];

               animation.transition(itemEl,{

                   styles: {

                       transform: 'translate(0px, 0px)',

                       transformOrigin: 'center center'

                   },

                   duration: time, //动画时间

                   timingFunction: 'linear',//线性运动

                   delay: 0 //ms

               },function () {

               });

               this.currentIndex = -1;

           },

           //点击删除

           removeItem(index){

               this.goRight(index,0);

               this.data.splice(index, 1);

           }

       }

   }

</script>

<style space>

</style>

以上demo容易出现的几个坑点:

1,注意有一个<div>宽度设置为870px的,这个870px的宽度必须写死,不然存在滑出来的时候,右边的删除按钮不显示的情况。(目前的解决办法是写死宽度,如有更好的方法,可以下方留言)

2,使用 ref="itemDev" 的时候,在下面的方法中获取对象的时候,如果ref绑定的是单个对象,那么this.$refs.itemDev返回的就是单个对象,如果<div>中使用ref绑定的对象,是通过for循环重复创建的,那么这里的this.refs.itemDev方法返回的就是一个对象集合,此时就可以像以上代码一样使用。

由于本人不是专业前端,所以Vue代码有很多地方不规范的,其实很多Style可以写在下面的<style space></style>内部的。

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

推荐阅读更多精彩内容

  •  本篇将节操满满的安利Weex(˶‾᷄ ⁻̫ ‾᷅˵),不一样的角度推荐你入坑,官网有的我们不拖泥,这里将给你补充...
    恋猫月亮阅读 26,269评论 50 91
  • 1.向量介绍 计算机程序主要运行在内存中,而内存在逻辑上可以被看做是连续的地址。为了充分利用这一特性,在主流的编程...
    废弃的root阅读 572评论 0 0
  • 首先上效果图: 以上的布局一定很常见,在原生中很好实现,但是在weex里面,这个布局并没有那么好实现, 其实这个布...
    码个蛋阅读 2,095评论 1 0
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,582评论 0 7
  • 俗话说,“男大当婚,女大当嫁”,男女结婚举办婚礼是现实社会中很正常也很让人高兴的事情。婚礼是每个人一生中最...
    天涯侠仙_3209阅读 457评论 0 0