最近在做移动端项目时,需要实现一个列表页面的每一项item向左滑动时出现相应的删除按钮,本来想着直接使用zepto的touch.js插件,因为之前实现相同的功能时用过这个插件,当时还挺好用的,直接使用它的swipeLeft和swipeRight方法即可,可是今天又开始做这个功能时,却发现这两个方法在使用时毫无效果,一点反应都没有。上网查资料,又下载了最新版本的zepto和touch.js,都没有用,也不知为什么?所以就弃用了这个插件。

下面是我后来实现后的代码,其实就是用了原生js的touch事件,再结合触摸点的坐标来判断左滑和右滑,
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>js侧滑显示删除按钮</title>
<style>
*{margin:0;padding:0;}
body{font-size:.14rem;}
li{list-style:none;}
i{font-style:normal;}
a{color:#393939;text-decoration:none;}
.list{overflow:hidden;margin-top:.2rem;padding-left:.3rem;border-top:1px solid #ddd;}
.list li{overflow:hidden;width:120%;border-bottom:1px solid #ddd;}
.list li a{display:block;height:.88rem;line-height:.88rem;-webkit-transition:all 0.3s linear;transition:all 0.3s linear;}
.list li i{float:right;width:15%;text-align:center;background:#E2421B;color:#fff;}
.swipeleft{transform:translateX(-15%);-webkit-transform:translateX(-15%);}
</style>
<script>
//计算根节点HTML的字体大小
function resizeRoot(){
var deviceWidth = document.documentElement.clientWidth,
num = 750,
num1 = num / 100;
if(deviceWidth > num){
deviceWidth = num;
}
document.documentElement.style.fontSize = deviceWidth / num1 + "px";
}
//根节点HTML的字体大小初始化
resizeRoot();
window.onresize = function(){
resizeRoot();
};
</script>
</head>
<body>
<section>
<div class="list">
<ul>
<li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >侧滑显示删除按钮1<i>删除</i></a></li>
<li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >侧滑显示删除按钮2<i>删除</i></a></li>
<li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" >侧滑显示删除按钮3<i>删除</i></a></li>
</ul>
</div>
<script>
//侧滑显示删除按钮
var expansion = null; //是否存在展开的list
var container = document.querySelectorAll('.list li a');
for(var i = 0; i < container.length; i++){
var x, y, X, Y, swipeX, swipeY;
container[i].addEventListener('touchstart', function(event) {
x = event.changedTouches[0].pageX;
y = event.changedTouches[0].pageY;
swipeX = true;
swipeY = true ;
if(expansion){ //判断是否展开,如果展开则收起
expansion.className = "";
}
});
container[i].addEventListener('touchmove', function(event){
X = event.changedTouches[0].pageX;
Y = event.changedTouches[0].pageY;
// 左右滑动
if(swipeX && Math.abs(X - x) - Math.abs(Y - y) > 0){
// 阻止事件冒泡
event.stopPropagation();
if(X - x > 10){ //右滑
event.preventDefault();
this.className = ""; //右滑收起
}
if(x - X > 10){ //左滑
event.preventDefault();
this.className = "swipeleft"; //左滑展开
expansion = this;
}
swipeY = false;
}
// 上下滑动
if(swipeY && Math.abs(X - x) - Math.abs(Y - y) < 0) {
swipeX = false;
}
});
}
</script>
</body>
</html>
也许大家也注意到了,在页面最开始部分加入了原生js对移动端自适应的实现,主要为了方便移动端页面在不同尺寸屏幕上的更好的展现,也是为了在误差很小的情况下能更好的将设计稿近乎完美的呈现在不同尺寸的屏幕上,主要使用到的单位是rem。
移动端自适应js
<script>
//计算根节点HTML的字体大小
function resizeRoot(){
var deviceWidth = document.documentElement.clientWidth,
num = 750,
num1 = num / 100;
if(deviceWidth > num){
deviceWidth = num;
}
document.documentElement.style.fontSize = deviceWidth / num1 + "px";
}
//根节点HTML的字体大小初始化
resizeRoot();
window.onresize = function(){
resizeRoot();
};
</script>
原理其实很简单,就是根据不同屏幕来计算根节点html的font-size,再利用rem相对于根节点html的font-size来计算的原理来实现不同元素的大小、间距等。
也有人说其实不用这样的js来判断,直接用css3的响应式@media screen也可以,其实我认为在各种尺寸的安卓屏幕如此活跃的当下,@media screen处理起来就显得有些力不从心了。
效果图如下:
附下源码下载:
js_del_button().rar
以上所述是小编给大家介绍的基于JS实现移动端向左滑动出现删除按钮功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# js
# 向左滑动出现删除按钮
# js滑动出现删除按钮
# JS如何实现封装列表右滑动删除收藏按钮
# js仿QQ中对联系人向左滑动、滑出删除按钮的操作
# js通过更改按钮的显示样式实现按钮的滑动效果
# 原生JS实现滑动按钮效果
# 用了
# 小编
# 自适应
# 也有
# 在此
# 都没
# 屏幕上
# 这两个
# 我认为
# 给大家
# 人说
# 好用
# 相对于
# 最新版本
# 力不从心
# 来实现
# 所述
# 还挺
# 给我留言
# 时用
相关文章:
如何选择建站程序?包含哪些必备功能与类型?
建站之星logo尺寸如何设置最合适?
高端网站建设与定制开发一站式解决方案 中企动力
Python lxml的etree和ElementTree有什么区别
如何选择可靠的免备案建站服务器?
建站主机功能解析:服务器选择与快速搭建指南
,购物网站怎么盈利呢?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
如何设置并定期更换建站之星安全管理员密码?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
如何高效配置IIS服务器搭建网站?
定制建站策划方案_专业建站与网站建设方案一站式指南
如何在宝塔面板创建新站点?
宝塔面板创建网站无法访问?如何快速排查修复?
香港服务器如何优化才能显著提升网站加载速度?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
如何快速搭建虚拟主机网站?新手必看指南
如何批量查询域名的建站时间记录?
Android自定义控件实现温度旋转按钮效果
建站之星好吗?新手能否轻松上手建站?
宁波自助建站系统如何快速打造专业企业网站?
如何用IIS7快速搭建并优化网站站点?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
移民网站制作流程,怎么看加拿大移民官网?
建站之星北京办公室:智能建站系统与小程序生成方案解析
微课制作网站有哪些,微课网怎么进?
定制建站如何定义?其核心优势是什么?
如何通过商城免费建站系统源码自定义网站主题?
建站主机类型有哪些?如何正确选型
高性能网站服务器配置指南:安全稳定与高效建站核心方案
IOS倒计时设置UIButton标题title的抖动问题
高性价比服务器租赁——企业级配置与24小时运维服务
c# 在高并发下使用反射发射(Reflection.Emit)的性能
如何在腾讯云服务器上快速搭建个人网站?
想学网站制作怎么学,建立一个网站要花费多少?
建站之星如何配置系统实现高效建站?
如何访问已购建站主机并解决登录问题?
如何快速查询域名建站关键信息?
如何快速生成ASP一键建站模板并优化安全性?
建站之星如何实现网站加密操作?
北京网站制作网页,网站升级改版需要多久?
建站之星在线版空间:自助建站+智能模板一键生成方案
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
如何彻底删除建站之星生成的Banner?
昆明网站制作哪家好,昆明公租房申请网上登录入口?
如何规划企业建站流程的关键步骤?
制作网站的公司有哪些,做一个公司网站要多少钱?
*请认真填写需求信息,我们会在24小时内与您取得联系。