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 相关文章推荐
JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
Dec 10 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
Sep 02 Javascript
javascript实现日历控件(年月日关闭按钮)
Dec 12 Javascript
js之事件冒泡和事件捕获详细介绍
Oct 28 Javascript
JavaScript中的alert()函数使用技巧详解
Dec 29 Javascript
DOM基础教程之使用DOM控制表单
Jan 20 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
Jan 04 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
Mar 30 Javascript
webpack踩坑之路图片的路径与打包
Sep 05 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
Dec 02 Javascript
JavaScript find()方法及返回数据实例
Apr 30 Javascript
vue在响应头response中获取自定义headers操作
Jul 24 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+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
php数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
PHP中将网页导出为Word文档的代码
2012/05/25 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
JavaScript 表单处理实现代码
2015/04/13 Javascript
在JavaScript中处理字符串之fontcolor()方法的使用
2015/06/08 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
NodeJs下的测试框架Mocha的简单介绍
2017/02/22 NodeJs
基于js中this和event 的区别(详解)
2017/10/24 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
webpack构建的详细流程探底
2018/01/08 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
jQuery实现雪花飘落效果
2020/08/02 jQuery
微信小程序实现点赞业务
2021/02/10 Javascript
Python解析nginx日志文件
2015/05/11 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
Python存取XML的常见方法实例分析
2017/03/21 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
python如何获取列表中每个元素的下标位置
2019/07/01 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
在python3中实现更新界面
2020/02/21 Python
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
日语求职信范文
2013/12/17 职场文书
生产车间主管岗位职责
2013/12/28 职场文书
妈妈的账单教学反思
2014/02/06 职场文书
贷款委托书范本
2014/04/08 职场文书
项目经理任命书
2014/06/04 职场文书
python 中[0]*2与0*2的区别说明
2021/05/10 Python
MySQL中一条SQL查询语句是如何执行的
2022/04/08 MySQL