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 相关文章推荐
制作高质量的JQuery Plugin 插件的方法
Apr 20 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
May 23 Javascript
js限制文本框只能输入数字方法小结
Jun 16 Javascript
node.js中的fs.realpathSync方法使用说明
Dec 16 Javascript
jQuery中has()方法用法实例
Jan 06 Javascript
Node.js 学习笔记之简介、安装及配置
Mar 03 Javascript
jQuery实现时尚漂亮的弹出式对话框实例
Aug 07 Javascript
利用JS实现页面删除并重新排序功能
Dec 09 Javascript
JavaScript实现二维坐标点排序效果
Jul 18 Javascript
Vue的Class与Style绑定的方法
Sep 01 Javascript
在vue中封装可复用的组件方法
Mar 01 Javascript
Vue单页及多页应用全局配置404页面实践记录
May 22 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
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
解析数组非数字键名引号的必要性
2013/08/09 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
php使用正则验证中文
2016/04/06 PHP
php数组遍历类与用法示例
2019/05/24 PHP
JavaScript 无符号右移赋值操作
2009/04/17 Javascript
javascript appendChild,innerHTML,join性能比较代码
2009/08/29 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
axios对请求各种异常情况处理的封装方法
2018/09/25 Javascript
关于在LayUI中使用AJAX提交巨坑记录
2019/10/25 Javascript
35个Python编程小技巧
2014/04/01 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
TensorFlow高效读取数据的方法示例
2018/02/06 Python
学习和使用python的13个理由
2019/07/30 Python
通过css3动画和opacity透明度实现呼吸灯效果
2019/08/09 HTML / CSS
canvas学习笔记之绘制简单路径
2019/01/28 HTML / CSS
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
小学语文教学反思
2014/02/10 职场文书
实验教师岗位职责
2014/02/13 职场文书
暑期社会实践先进个人主要事迹
2014/05/22 职场文书
电力培训心得体会
2014/09/02 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2014年化验员工作总结
2014/11/18 职场文书
教师求职信怎么写
2015/03/20 职场文书
辩护词格式
2015/05/22 职场文书
生日寿星公答谢词
2015/09/29 职场文书