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 相关文章推荐
跨浏览器的设置innerHTML方法
Sep 18 Javascript
可实现多表单提交的javascript函数
Aug 01 Javascript
javascript中input中readonly和disabled区别介绍
Oct 23 Javascript
javascript刷新父页面的各种方法汇总
Sep 03 Javascript
node.js中的fs.openSync方法使用说明
Dec 17 Javascript
使用RequireJS优化JavaScript引用代码的方法
Jul 01 Javascript
Javascript实现单例模式
Jan 24 Javascript
jquery基础知识第一讲之认识jquery
Mar 17 Javascript
javascript类型系统_正则表达式RegExp类型详解
Jun 24 Javascript
使用JS 插件qrcode.js生成二维码功能
Feb 20 Javascript
详解处理bootstrap4不支持远程静态框问题
Jul 20 Javascript
JavaScript装饰者模式原理与用法实例详解
Mar 09 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
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
PHP.vs.JAVA
2016/04/29 PHP
php 根据自增id创建唯一编号类
2017/04/06 PHP
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
判断浏览器的javascript版本的代码
2010/09/03 Javascript
JavaScript中的isXX系列是否继续使用的分析
2011/04/16 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
2017/06/09 jQuery
深入理解Vue-cli搭建项目后的目录结构探秘
2017/07/13 Javascript
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
python中偏函数partial用法实例分析
2015/07/08 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
python制作填词游戏步骤详解
2019/05/05 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
python3图片文件批量重命名处理
2019/10/31 Python
Python在字符串中处理html和xml的方法
2020/07/31 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
教师师德反思材料
2014/02/15 职场文书
产品售后服务承诺书
2014/05/21 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
初婚未育证明样本
2015/06/18 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
小学语文新课改心得体会
2016/01/22 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL
Python实现抖音热搜定时爬取功能
2022/03/16 Python
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python