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定时关闭窗口的实例
May 22 Javascript
选择器中含有空格在使用示例及注意事项
Jul 31 Javascript
JS解决ie6下png透明的方法实例
Aug 02 Javascript
jquery实现瀑布流效果分享
Mar 26 Javascript
JavaScript中的无阻塞加载性能优化方案
Oct 10 Javascript
Javascript window对象详解
Nov 12 Javascript
详解JavaScript的内置对象
Dec 07 Javascript
JavaScript数据结构中串的表示与应用实例
Apr 12 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
Nov 30 Javascript
JS函数基本定义与用法示例
Jan 15 Javascript
JS数组Reduce方法功能与用法实例详解
Apr 29 Javascript
js实现菜单跳转效果
Dec 11 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/10/09 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
2011/06/10 PHP
windows下配置php5.5开发环境及开发扩展
2014/12/25 PHP
Javascript中的var_dump函数实现代码
2009/09/07 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
JS(JQuery)操作Array的相关方法介绍
2014/02/11 Javascript
Eclipse去除js(JavaScript)验证错误
2014/02/11 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
2016/02/14 Javascript
JavaScript实现阿拉伯数字和中文数字互相转换
2016/06/12 Javascript
Js 获取当前函数参数对象的实现代码
2016/06/20 Javascript
在html中引入外部js文件,并调用带参函数的方法
2016/10/31 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
angular6的响应式表单的实现
2018/10/10 Javascript
vue - vue.config.js中devServer配置方式
2019/10/30 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
[20:46]Ti4循环赛第三日VG vs DK
2014/07/12 DOTA
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
解决webdriver.Chrome()报错:Message:'chromedriver' executable needs to be in Path
2019/06/12 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
Python object类中的特殊方法代码讲解
2020/03/06 Python
Python面向对象实现方法总结
2020/08/12 Python
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
使用PDF.JS插件在HTML中预览PDF文件的方法
2018/08/29 HTML / CSS
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
大二自我鉴定范文
2013/10/05 职场文书
考试不及格的检讨书
2014/01/22 职场文书
活动总结的格式
2014/05/07 职场文书
小组口号霸气押韵
2015/12/24 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android