JS如何实现封装列表右滑动删除收藏按钮


Posted in Javascript onJuly 23, 2020

前言

列表右滑动展示删除和收藏按钮就类似微信或者美团饿了吗的列表,右滑动出现指定的按钮功能;

本来我是想把前几年支付宝的一个机试题拿来讲,奈何我记不太清题目,也找不到当时做的题了,所以只好将就一下那这个案例来讲解,其实解题思路大致是一样的,毕竟作为程序员最重要的不是会多少框架和会用api用的多熟练,设计思路才是最重要!

案例

JS如何实现封装列表右滑动删除收藏按钮

这个界面相信大家都非常熟悉,很多时候一些封装好的插件可以拿来用即可实现这个功能,算是比较大众化,不过为了给不了解原理的小伙伴们讲解,所以自己用dom手写了一个,思路如下:

html部分

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <meta name="viewport"
  content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
 <title>支付宝前端机试题</title>
 <link rel="stylesheet" href="css/index.css" rel="external nofollow" >
 <script src="js/index.js"></script>
</head>

<body>
 <h2 class="title">购物车</h2>
 <section class="shoppingList"></section>
</body>

</html>

JS部分

let initXY = [0,0];//记录移动的坐标
let isStop = false;//记录是否禁止滑动
let oldIndex = null;//记录旧的下标
let theIndex = null;//记录新的下标

function touchstart(event,index){
 if(event.touches.length > 1) {
  isStop = true;
  return;
 }
 oldIndex = theIndex;
 theIndex = null;
 initXY = [event.touches[0].pageX,event.touches[0].pageY];
 // console.log(initXY);
}

function touchmove(event,index){
 if(event.touches.length > 1) return;
 let moveX = event.touches[0].pageX - initXY[0];
 let moveY = event.touches[0].pageY - initXY[1];
 if(isStop || Math.abs(moveX) < 5) return;//如果禁止滑动或者滑动的距离小于5就返回
 if(Math.abs(moveY) > Math.abs(moveX)){
  isStop = true;
  return;
 }
 if(moveX<0){
  theIndex = index;
  isStop = true;
 }else if(theIndex && oldIndex === theIndex){
  oldIndex =index;
  theIndex = null;
  isStop = true;
  setTimeout(()=>{oldIndex=null;},150);//设置150毫秒延迟来凸显动画效果,实际不加也可以
 }
 // 这里用jq就不用循环了,但我懒得引,大家知道就好
 let goods = document.getElementsByClassName("goodsInfo");
 for(let i=0;i<goods.length;i++){
  theIndex === i ? goods[i].classList.add("open") : goods[i].classList.remove("open");
 };
 // console.log(moveX,moveY);
}

function touchend(){
 isStop = false;
}

总结

实现的方法无非就是判断触碰的时候移动的坐标值再加上动画,有兴趣看源代码的小伙伴可以到github下载:

https://github.com/13632756286/Sliding-menu

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
Oct 31 Javascript
JavaScript避免内存泄露及内存管理技巧
Sep 05 Javascript
JavaScript使用slice函数获取数组部分元素的方法
Apr 06 Javascript
充分发挥Node.js程序性能的一些方法介绍
Jun 23 Javascript
js获取时间精确到秒(年月日)
Mar 16 Javascript
jQuery遍历节点树方法分析
Sep 08 Javascript
值得分享的JavaScript实现图片轮播组件
Nov 21 Javascript
javascript循环链表之约瑟夫环的实现方法
Jan 16 Javascript
JavaScript原生节点操作小结
Jan 17 Javascript
AngularJs定时器$interval 和 $timeout详解
May 25 Javascript
MUI实现上拉加载和下拉刷新效果
Jun 30 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
Aug 30 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
Jul 23 #Javascript
JS前后端实现身份证号验证代码解析
Jul 23 #Javascript
vue实现用户长时间不操作自动退出登录功能的实现代码
Jul 23 #Javascript
在vue中封装的弹窗组件使用队列模式实现方法
Jul 23 #Javascript
基于JS实现计算24点算法代码实例解析
Jul 23 #Javascript
javascript递归函数定义和用法示例分析
Jul 22 #Javascript
简单了解vue 插值表达式Mustache
Jul 22 #Javascript
You might like
PHP.vs.JAVA
2016/04/29 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
javascript函数定义的几种区别小结
2014/01/06 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
2015/01/02 Javascript
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
详解Bootstrap插件
2016/04/25 Javascript
Javascript OOP之面向对象
2016/07/31 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
[01:32]TI奖金增速竟因它再创新高!DOTA2勇士令状不朽珍藏Ⅰ饰品欣赏
2018/05/18 DOTA
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
使用Python对MySQL数据操作
2017/04/06 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
django反向解析和正向解析的方式
2018/06/05 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
2020/02/28 Python
python新手学习可变和不可变对象
2020/06/11 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
信息管理专业学生自荐信格式
2013/09/22 职场文书
工程班组长岗位职责
2013/12/30 职场文书
社区志愿者心得体会
2014/01/03 职场文书
12月红领巾广播稿
2014/02/13 职场文书
创先争优活动承诺书
2014/08/30 职场文书
2014教师“四风问题”对照检查材料思想汇报
2014/09/16 职场文书
2019销售早会主持词
2019/06/27 职场文书
Java 泛型详解(超详细的java泛型方法解析)
2021/07/02 Java/Android
JAVA API 实用类 String详解
2021/10/05 Java/Android
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server
Elasticsearch 索引操作和增删改查
2022/04/19 Python