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 相关文章推荐
JsRender for object语法简介
Oct 31 Javascript
jQuery中click事件的定义和用法
Dec 20 Javascript
JavaScript实现LI列表数据绑定的方法
Aug 04 Javascript
js实现商城星星评分的效果
Dec 29 Javascript
使用JQuery实现智能表单验证功能
Mar 08 Javascript
php基于redis处理session的方法
Mar 14 Javascript
AngularJS应用开发思维之依赖注入3
Aug 19 Javascript
bootstrap日历插件datetimepicker使用方法
Dec 14 Javascript
Bootstrap中datetimepicker使用小结
Dec 28 Javascript
Jquery获取radio选中的值
May 05 jQuery
JS实现小球的弹性碰撞效果
Nov 11 Javascript
vue+webpack实现异步组件加载的方法
Feb 03 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的面试题集
2006/11/19 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
解决jquery .ajax 在IE下卡死问题的解决方法
2009/10/26 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
基于jquery实现省市联动特效
2015/12/17 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
2017/10/20 Javascript
浅谈Vue数据响应思路之数组
2018/11/06 Javascript
jQuery 同时获取多个标签的指定内容并储存为数组
2018/11/20 jQuery
使用webpack4编译并压缩ES6代码的方法示例
2019/04/24 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
vant-ui框架的一个bug(解决切换后onload不触发)
2020/11/11 Javascript
python对html过滤处理的方法
2018/10/21 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
英国家用电器购物网站:Hughes
2018/02/23 全球购物
JSF如何进行表格处理及取值
2012/08/06 面试题
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
工业学校毕业生自荐信范文
2014/01/03 职场文书
综合实践活动总结
2014/05/05 职场文书
软件研发工程师岗位职责
2014/09/30 职场文书
护理自荐信
2019/05/14 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
导游词之安徽巢湖
2019/12/26 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书