安装组件
  "vue-touch": "^2.0.0-beta.4",
main.js引入
  import VueTouch from 'vue-touch'
  Vue.use(VueTouch, {name: 'v-touch'})
1.页面代码
<template>
<div class="share">
<headall :appMenuName="$t('pay_attention_to_people')" :iconRight="iconRight" :backUrl="backUrl" @backOperate="backOperate"></headall>
<scroll class="scroll" :data='listData' v-if='listData'>
<div class="in-ul">
<div class="item" v-for='(item,index) in listData' :key="index">
<v-touch v-on:swipeleft="swiperleft(index)" v-on:swiperight="swiperright(index)" class="wrapper">
<div class="itemSwipe" :class="{swipeleft:itemTitleLeft&&(nowControlIndex==index&&(nowControlIndex>-1)),swipeleftNo:!itemTitleLeft}">
<div class="content">
<span class="userNameAccount">{{ item.userName }}({{item.account}})</span>
<span class="deptName">{{ item.deptName||''}}</span>
</div>
<div class="btnL del" @click="delUser(item)">删除</div>
<div class="btnL markEle">标记</div>
<div class="btnL move">移动</div>
</div>
</v-touch>
</div>
</div>
</scroll>
<router-view @getRefresh="getRefresh"></router-view>
</div>
</template> <script>
import Vue from 'vue'
import headall from 'base/head/headAll'
import {
mixins
} from 'assets/js/mixins'
import scroll from 'base/scroll/scroll'
import i18n from 'assets/js/vi18n/i18n.js'
export default {
mixins: [mixins],
i18n,
data() {
return {
searchVal:'',
listData: [],
selectItemData: null,
nowControlIndex:-1,
itemTitleLeft:false,
backUrl:'/me/person',
iconRight:'icon-tianjia',
}
},
components: {
headall,
scroll,
},
methods: {
getRefresh(){
this.getSelectedUser();
},
backOperate(){
this.$router.push({
path: `/me/person/attention/add`
});
//清除滑动效果
this.itemTitleLeft = false;
this.nowControlIndex = -1;
},
swiperleft(index) {
//左滑
console.log('left');
this.nowControlIndex = index;
this.itemTitleLeft = true;
},
swiperright(index) {
//右滑
console.log('right');
this.itemTitleLeft = false;
this.nowControlIndex = -1;
},
getSelectedUser() {
/*获取邮件接收人以前的设置*/
let vm = this;
let getUserUrl = '/user/focusUsers';
this.ajaxSend(getUserUrl, {}).then(function (data) {
if (data.code === '00000000') {
vm.listData = data.payload.results.users;
}
});
},
delUser(item) {
/*列表中删除关注人*/
let vm = this;
let result = [];
let arr = vm.listData;
for (let i = 0; i < arr.length; i++) {
if (arr[i] != item) {
result.push(arr[i]);
}
}
vm.listData = result;
vm.saveSelectedUser();
//清除滑动效果
vm.itemTitleLeft = false;
vm.nowControlIndex = -1;
},
saveSelectedUser() {
//保存设置
let vm = this;
let arr = vm.listData;
let checkedId = [];
for (let i = 0; i < arr.length; i++) {
checkedId.push(arr[i].id);
}
let getUserUrl = '/user/saveFocusUser';
let params = {
focusUserIds: checkedId
};
this.ajaxSend(getUserUrl, params).then(function (data) {
if (data.code === '00000000') {
}
});
},
},
created() {
this.getSelectedUser();
},
}
</script> <style scoped lang="stylus">
@import '~assets/stylus/veriable.styl'
@import "~assets/stylus/mixin.styl"
.share{
position absolute
top 0
bottom 0
left 0
right 0
z-index 15
background #f3f3f3
.scroll{
position absolute
overflow hidden
width 100%
top 3.2rem
bottom 0
background #fff
.in-ul{
width 100%
.item{
width 146%
overflow hidden
.itemSwipe{
display flex
flex 1
font-size .875rem
height 3rem
line-height 3rem
background #fff
border-bottom 1px solid #dedfe0
div{
background #fff
}
.content{
width 100%
display flex
flex-direction column
margin .25rem .25rem .25rem .5rem
line-height 1.5rem
font-size $font-size12
.userNameAccount{
font-size $font-size13
}
.deptName{
font-size $font-size12
color #999
} }
.btnL{
padding 1rem 0;
line-height 1rem
width 15%
text-align center
color #fff
}
.del{
background #ff3b30
}
.markEle{
background #ff9c00
}
.move{
background #c7c7cc
}
}
.swipeleft{
transform:translateX(-31%);
-webkit-transform:translateX(-31%);
-webkit-transition:all 0.3s;transition:all 0.3s;
}
.swipeleftNo{
-webkit-transition:all 0.3s;transition:all 0.3s;
}
}
}
}
} </style>
组件headAll
<template>
<div class="header">
<span class="iconfont" :class="iconLeft" @click="back"></span>
<span class="name" slot="appMenuName">{{appMenuName}}</span>
<span class="iconfont" :class="iconRight" @click="search"></span>
</div>
</template>
<script>
export default {
props:{
appMenuName:{
type:String,
default:'',
},
backUrl:{
type:String,
default:'',
},
iconLeft:{
type:String,
default:'icon-fanhui1',
},
iconRight:{
type:String,
default:'icon-soushuo',
},
typeVal:{
type:Number,
default: 0,
},
},
methods: {
back(){
this.$router.push({
path: `${this.backUrl}`
});
},
search(){
this.$emit('backOperate',this.typeVal);
}
}
}
</script> <style scoped lang='stylus'>
@import '~assets/stylus/veriable.styl'
@import '~assets/stylus/mixin.styl'
.header{
headStyle()
justify-content space-between
.name{
font-size $font-size15
}
.iconfont{
padding 0.625rem
width 3rem
color #bfbfbf
font-size .875rem
font-weight normal
}
} </style>
组件scroll
<template>
<div ref="wrapper">
<slot></slot>
</div>
</template> <script>
import BScroll from 'better-scroll' export default {
props:{
/* probeType的作用。
1 滚动的时候会派发scroll事件,会截流,就是不会实时的派发。
2 滚动的时候会实时派发scroll事件,不会被截流。
3 在重击的情况下仍然能实时派发scroll的事件。
*/
probeType:{
type:Number,
default:3
},
click:{
// 占击滚动的列表是否派发click事件。
type:Boolean,
default:true
},
scrollX:{
// 是否派发横向滚动事件。
type:Boolean,
default:false
},
listenScroll:{
// 是否派发滚动事件。
type:Boolean,
default:true
},
data:{
type:Array,
default:null //这里null其实是表明这个是一个任意类型。
},
pullup:{
// 是否派发滚动到底部的事件,用于上拉加载
type:Boolean,
default:false
},
pulldown:{
// 是否派发顶部下拉的事件,用于下拉刷新。
type:Boolean,
default:false
},
beforeScroll:{
// 是否派发列表滚动开始时的事件。
type:Boolean,
default:false
},
refreshDelay:{
// 当数据更新后刷新scroll的延时。
type:Number,
default:20
},
scrollEndx:{
type:Boolean,
default:false
}
},
methods:{
_initScroll(){
if(!this.$refs.wrapper){
return
}
// 初始化better-scroll
this.scroll=new BScroll(this.$refs.wrapper,{
probeType:this.probeType,
click:this.click,
scrollX:this.scrollX
})
// 是否派发滚动事件。
if(this.listenScroll){
this.scroll.on('scroll',(pos)=>{
this.$emit('scroll',pos);
})
}
// 是否派发滚动到底部的事件,用于上拉加载。
if(this.pullup){
this.scroll.on('scrollEnd',()=>{
if(this.scroll.y<=(this.scroll.maxScrollY+50)){
this.$emit('scrollEnd');
}
})
} // 是否派发顶部下拉事件,用下下拉刷新。
if(this.pulldown){
this.scroll.on('touchend',(pos)=>{
if(pos.y>50){
this.$emit('pulldown')
}
})
} // 是否派发列表滚动开始的事件。
if(this.beforeScroll){
this.scroll.on('beforeScrollStart',()=>{
this.$emit('beforeScroll')
})
} // 新增一个事件的判断,滚动结束时也会触发事件scrollEnd
if(this.scrollEndx){
this.scroll.on('scrollEnd',(pos)=>{
this.$emit("scrollEnd",pos);
})
}
},
refresh(){
this.scroll && this.scroll.refresh();
},
scrollTo(){
this.scroll && this.scroll.scrollTo.apply(this.scroll,arguments);
},
scrollToElement(){
this.scroll && this.scroll.scrollToElement.apply(this.scroll,arguments);
}
},
watch:{
data(){
setTimeout(() => {
this.refresh();
}, this.refreshDelay);
}
},
mounted () {
// mouted全部挂载完成后,调用初始化BScroll;
setTimeout(() => {
this._initScroll();
}, 20);
}
}
</script> <style scoped lang="stylus" rel="stylesheet/stylus"> </style>

vue滚动+滑动删除标记(移动端)仿qq/微信的更多相关文章

  1. 史上最简单,一步集成侧滑(删除)菜单,高仿QQ、IOS。

    重要的话 开头说,not for the RecyclerView or ListView, for the Any ViewGroup. 本控件不依赖任何父布局,不是针对 RecyclerView. ...

  2. Android 仿QQ微信开场导航以及登陆界面

    相信大家对于微信等社交应用的UI界面已经都很熟悉了,该UI最值得借鉴的莫过于第一次使用的时候一些列产品介绍的图片,可以左右滑动浏览,最后进入应 用,这一效果适用于多种项目中,相信今后开发应用一定会用得 ...

  3. Android仿QQ微信开场导航以及登陆界面

    相信大家对于微信等社交应用的UI界面已经都很熟悉了,该UI最值得借鉴的莫过于第一次使用的时候一些列产品介绍的图片,可以左右滑动浏览,最后 进入应用,这一效果适用于多种项目中,相信今后开发应用一定会用得 ...

  4. JS 点击弹出图片/ 仿QQ商城点击左右滚动幻灯片/ 相册模块,点击弹出图片,并左右滚动幻灯片

    1, 点击弹出图片 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  5. iOS天气动画、高仿QQ菜单、放京东APP、高仿微信、推送消息等源码

    iOS精选源码 TYCyclePagerView iOS上的一个无限循环轮播图组件 iOS高仿微信完整项目源码 想要更简单的推送消息,看本文就对了 ScrollView嵌套ScrolloView解决方 ...

  6. 仿知乎安卓client滑动删除撤销ListView

    标签(空格分隔): Android 新版的知乎安卓client有一个有趣的功能,就是在一个item里.向右滑动时整个item会越来越透明,滑动到一半时,整个item就不见了.放开手指就是删除.删除后还 ...

  7. 干货--手把手撸vue移动UI框架: 滑动删除

    前言 前几天因为项目需要,用jquery写了一个swiperOut组件,然后我就随便把这个组件翻译成基于Vue的了,有兴趣的朋友可以看下.Github源码(不麻烦的话帮忙start,请各位大爷赏个星星 ...

  8. 安卓listView实现下拉刷新上拉加载滑动仿QQ的删除功能

    大家对这些功能都是看的多了,然后对上拉刷新和下拉加载的原理都是非常清楚的,所以实现这功能其实也就是为了让大家能够从众多的同行们来进行比较学习而已,虽然即使是这样,但是面试的时候面试官还是会问你上拉和下 ...

  9. [转]ANDROID仿IOS微信滑动删除_SWIPELISTVIEW左滑删除例子

    转载:http://dwtedx.sinaapp.com/itshare_290.html 本例子实现了滑动删除ListView的Itemdemo的效果.大家都知道.这种创意是来源于IOS的.左滑删除 ...

随机推荐

  1. jmeter 执行python脚本的方法 。(亲测ok)

    jmeter 执行python脚本   jmeter 可以通过Jython 执:行python代码 1.下载Jython jar包:http://www.jython.org/downloads.ht ...

  2. Java泛型(11):潜在类型机制

    泛型的目标之一就是能够编写尽可能广泛应用的代码. 为了实现这一点,我们需要各种途径来放松对我们的代码将要作用的类型所做的限制,同时不丢失静态类型检查的好处.即写出更加泛化的代码. Java泛型看起来是 ...

  3. linux之反向代理,反向代理实例,负载均衡实例

    目录 nginx反向代理 1. 概述 2. 反向代理服务器的工作原理 (1)作为内容服务器的替身 (2)作为内容服务器的负载均衡器 二. nginx反向代理实例 1.前期准备 2.代理服务器配置 3. ...

  4. uni-app 使用本地打包配置安卓原生插件

    在使用 uni-app 开发的时候,遇到了一个很棘手的问题.即获取设备参数的时候 uni-app 并没有相关方法,而安卓开发是可以做到的,因为接的是三方推广,所以功能必须实现,所以求助了安卓的大佬帮我 ...

  5. 并查集 --以cogs259为例

    题目链接:http://cogs.pro:8081/cogs/problem/problem.php?pid=pySmxSVgP [问题描述]     或许你并不知道,你的某个朋友是你的亲戚.他可能是 ...

  6. win系统常用命令

    windows常用命令 net user 用户名 密码 /add (建立用户) net localgroup administrators 用户名 /add (将用户加到管理员,使其拥有管理权限) n ...

  7. USACO 1.1 Your Ride Is Here

    直接模拟 #include<cstdio> #include<cstring> using namespace std; #define MAXN 10 #define MOD ...

  8. mysql数据库之函数、流程控制

    函数 注意与存储过程的区别,mysql内置的函数只能在sql语句中使用! 参考博客:http://www.cnblogs.com/linhaifeng/articles/7495918.html#_l ...

  9. C++调用windowsAPI

    1.需要#include <windows.h>http://zhidao.baidu.com/link?url=yOeEGkhe3-kVI6rCqyNp14IjTyXBkQhLeNt-X ...

  10. linux文件权限更改命令chmod及数字权限实践总结

     改变权限属性命令chmod chmod 是用来改变文件或目录权限的命令,但只有文件的属主和超级用户root才有这种权限.通过chmod来改变文件或目录的权限有两种方法:一种是通过权限字母和操作符表达 ...