小程序自定义侧滑删除组件

小程序提供了一个可移动视图容器movable-view;下面我来给大家介绍一个通过movable-view和movable-area组合编写的一个侧滑删除自定义组件。
先查看一下效果图:
5.gif
下面看一下布局:
slide-slip.wxml

<movable-area class="_sideslip" style="width: {{width}}rpx; height: {{height}}rpx;">
  <movable-view direction="horizontal" class="_sideslip--movable" out-of-bounds="{{out}}" damping="20" x="{{x}}" style="width: {{width + slideWidth}}rpx; height: {{height}}rpx;" inertia bindchange="bindchange">
    <view class="slideslip-left" style="width: {{width}}rpx">
      <slot name="left"></slot>
    </view>
    <view class="slideslip-right" >
      <slot name="right"></slot>
    </view>
  </movable-view>
</movable-area>

movable-areaz主要用来限制可视区域大小;movable-view整个滑动的view大小,
侧滑左边的默认展示内容区域

    <view class="slideslip-left" style="width: {{width}}rpx">
      <slot name="left"></slot>
    </view>

侧滑右边的默认隐藏区域

  <view class="slideslip-right" >
      <slot name="right"></slot>
    </view>

slide-slip.js

Component({
  options: {
    multipleSlots: true
  },
  properties: {
    //  组件显示区域的宽度 (rpx)
    width: {
      type: Number,
      value: 750 // 750rpx 即整屏宽
    },
    //  组件显示区域的高度 (rpx),必填项
    height: {
      type: Number,
      value: 0
    },
    //  组件滑动显示区域的宽度 (rpx)
    slideWidth: {
      type: Number,
      value: 0
    },
    // 是否允许惯性越界
    out: {
      type: Boolean,
      value: true
    },
    
  },

  data: {
    x:0,
  },

  ready() {
    const info = wx.getSystemInfoSync()
    let rate = info.screenWidth / 750;
    let params = {}
    const query = wx.createSelectorQuery().in(this)
    query
      .select('.slideslip-right')
      .boundingClientRect(res => {
        this.setData({
          slideWidth: res.width / rate
        });
      })
      .exec()
  },

  pageLifetimes: {
    // 组件所在页面的生命周期函数
    show: function () {
      this.setData({
        x: 0,
      });
     },

  },
  methods: {
    
    bindchange(e) {
      // if (this.data.x==0){
      //   this.setData({
      //     x: 1,
      //   });
      // }
    }
  }
})

这里主要是计算手机像素和小程序rpx的换算率,然后重新设置左边整个可移动的视图的大小

slide-slip.wxss

._sideslip {
  overflow: hidden;
}

._sideslip--movable {
  display: flex;
  flex-direction: row;
  overflow: hidden;
  justify-content: flex-start;
  align-items: flex-start;
  box-sizing: border-box;
}


.slideslip-left{
  flex-shrink: 0;
}


.slideslip-right {
  display: flex;
  flex-shrink: 0;
  flex-direction: row;
  justify-content: flex-start;
  align-items: flex-start;
  box-sizing: border-box;
}

使用:

<slide-slip height="150" show="{{false}}">
  <view slot="left" class="sideslip-content">
    <view class="container" data-item="{{item}}" bindtap="onClickItem">
      <view class="title">{{item.title}}</view>
      <view class="bottom_container">
        <view class="number">共{{item.count}}条留言</view>
        <view class="number">{{item.look}}浏览</view>
        <button hover-class="none" data-item="{{item}}" open-type="share" catchtap="onClicShare">
          <image class="share" src="{{'/images/icon_share.png'}}" data-item="{{item}}"></image>
        </button>
      </view>
    </view>
  </view>
  <view slot="right" class="sideslip-oprate">
    <view class='sideslip-red' data-item="{{item}}" bindtap="onClickDelete">删除</view>
    <view class='sideslip-blue' data-item="{{item}}" bindtap="onClickEdit">编辑</view>
  </view>
</slide-slip>
<view class="line_10" wx:if="{{showLine}}"></view>

代码详细地址:https://github.com/fuxingkai/frankui-weapp

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序-wepy-侧滑删除组件,支持自定义内容区在最近的微信小程序开发过程中需要用到侧滑删除的功能,微信小程序官方是没有提供这样的组件,再加上我们的微信小程序使用的是wepy组件开发框架开发的,wepy也没有提供这样的组件,之前也在github上搜索这方面的组件,没有发现合适的,当时只发现了一个开源的:https://github.com/GeoffZhu/wepy-swipe-delete 只不过该组件功能单一已经被作者废弃了,无奈自己动手撸了一个侧滑删除组件,现在把它开源出来吧。Requirementswepy: "^1.7.3"支持功能和特点自定义内容区域:支持之定义内容区域,组件内使用 slot占位。自定义滚动高度:可以自定义scroll-view的高度,默认为屏幕的高度。自定义menu :如果默认的menu样式不喜欢可以自定义,也可以显示或者隐藏指定的menu。左右滑动:支持左右滑动也可以设置只左右或者右滑。效果如下:       如何使用目前支持两种使用模式:1.page页面模式优点:可定制化高,扩展性强。 缺点:集成复杂,代码复用性差。2.component 组件模式优点:集成简单,代码复用性强,减少包的大小。 缺点:可定制到低。不建议使用page页面模式,下面详细介绍component 组件模式的使用如何使用// 导入组件import SwipeDeleteView from '@/components/wepy-swipe-delete-view'// 声明组件  components = {       swipeDelete: SwipeDeleteView     }       // 引用组件   <template>   <swipeDelete :list.sync="list">       <view class="item">{{item.userName}}</view>     </swipeDelete>   </template>配置如下:<swipeDelete   :list.sync="list"                :scrollHeight="scrollHeight"                @deleteTap.user="deleteTap"                @deleteLongTap.user="deleteLongTap"                @editTap.user="editTap"                @editLongTap.user="editLongTap"                @addTap.user="addTap"                @addLongTap.user="addLongTap"                @markTap.user="markTap"                @markLongTap.user="markLongTap">属性属性说明备注list要显示的列表的原始数据,最好是加上.sync这样可以异步传值必传scrollHeight设置scroll-view的高度,默认为屏幕高度选传deleteTap.user删除menu单击事件回调必要时传deleteLongTap.user删除menu长按事件回调必要时传editTap.user编辑menu单击事件回调必要时传editLongTap.user编辑menu长按事件回调必要时传addTap.user添加menu单击事件回调必要时传addLongTap.user添加menu长按事件回调必要时传markTap.user标记menu单击事件回调必要时传markLongTap.user标记menu长按事件回调必要时传每个点击事件或者长按事件都会返回两个参数methods = {       deleteTap(view, item) {         console.log(item)         view.deleteItem()       },       deleteLongTap(view, item) {         console.log(item)         wx.showModal({           title: '提示',           content: '确定要删除吗?',           success: function (res) {             if (res.confirm) {               view.deleteItem()             } else {               view.closeItem()             }           }         })       }    }view :view 是SwipeDeleteView对象的本身,可以通过view来做一些其他操作,如:删除当前的itemitem : item 就是当前操作的原始数据,可以通过item获取真正需要的数据当前SwipeDeleteView对外暴露的函数有:函数名称函数说明参数deleteItem删除当前操作的item(原始数据 view)都会被删除不需要参数closeItem关闭当前操作的item,原始数据不变不需要参数网络异步加载更新如果使用的网络异步加载完成以后,还需要更新下组件,不然会出现无法侧滑的情况。导致原因:原始数据更新以后组件内部无法监听到,这样就不能获取到左右menu的宽度,所以不能侧滑解决办法:this.$invoke('swipeDelete', 'update'); swipeDelete必须和 components = {swipeDelete: SwipeDeleteView} 同名。代码如下:// 模拟网络加载延迟2秒钟    let that = this      setTimeout(function () {        for (let i = 0; i < 20; i ) {          let msg = {}          msg.userName = ''   '用户'   (i   1)          msg.msgText = '您有新的消息'          msg.color = that.buildRandomColor()          msg.height = that.buildRandomHeight()          msg.headerImg = options.avatarUrl          that.list.push(msg)        }        wx.hideLoading()        // 更新组件        that.$invoke('swipeDelete', 'update')        that.$apply()      }, 2000)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值