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.validate的使用说明介绍
Nov 12 Javascript
jQuery中的height innerHeight outerHeight区别示例介绍
Jun 15 Javascript
JavaScript中的console.group()函数详细介绍
Dec 29 Javascript
百度地图自定义控件分享
Mar 04 Javascript
JavaScript实现经典排序算法之插入排序
Dec 28 Javascript
jQuery EasyUI ProgressBar进度条组件
Feb 28 Javascript
node.js读取Excel数据(下载图片)的方法示例
Aug 02 Javascript
微信小程序wxml列表渲染原理解析
Nov 27 Javascript
Vue实现返回顶部按钮实例代码
Oct 21 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
Dec 15 Vue.js
three.js如何实现3D动态文字效果
Mar 03 Javascript
【js设计模式】SOLID五大设计原则
Mar 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程序员面试 切忌急功近利(更需要注重以后的发展)
2010/09/01 PHP
php模拟js函数unescape的函数代码
2012/10/20 PHP
基于jquery的用鼠标画出可移动的div
2012/09/06 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
关于删除时的提示处理(确定删除吗)
2013/11/03 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
微信小程序  简单实例(阅读器)的实例开发
2016/09/29 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
带你快速理解javascript中的事件模型
2017/08/14 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
js最简单的双向绑定实例讲解
2018/01/02 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
Vue中nprogress页面加载进度条的方法实现
2020/11/13 Javascript
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
常见的在Python中实现单例模式的三种方法
2015/04/08 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
使用Python为中秋节绘制一块美味的月饼
2019/09/11 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
python中数据库like模糊查询方式
2020/03/02 Python
Python中zip函数如何使用
2020/06/04 Python
python实现图像外边界跟踪操作
2020/07/13 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
CSS3自定义滚动条样式的示例代码
2017/08/21 HTML / CSS
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
经典演讲稿范文
2013/12/30 职场文书
任命书格式
2014/06/05 职场文书
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript