最近在做移动端项目时,需要实现一个列表页面的每一项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实现滑动按钮效果
# 用了
# 小编
# 自适应
# 也有
# 在此
# 都没
# 屏幕上
# 这两个
# 我认为
# 给大家
# 人说
# 好用
# 相对于
# 最新版本
# 力不从心
# 来实现
# 所述
# 还挺
# 给我留言
# 时用
相关文章:
在线制作视频的网站有哪些,电脑如何制作视频短片?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
C++时间戳转换成日期时间的步骤和示例代码
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星后台密码如何安全设置与找回?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
建站之星Pro快速搭建教程:模板选择与功能配置指南
网站制作新手教程,新手建设一个网站需要注意些什么?
如何快速搭建高效简练网站?
高端建站如何打造兼具美学与转化的品牌官网?
c# await 一个已经完成的Task会发生什么
网站制作说明怎么写,简述网页设计的流程并说明原因?
建站之星免费模板:自助建站系统与智能响应式一键生成
山东云建站价格为何差异显著?
制作农业网站的软件,比较好的农业网站推荐一下?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
javascript中的try catch异常捕获机制用法分析
高防服务器租用如何选择配置与防御等级?
如何选择高效可靠的多用户建站源码资源?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
简历在线制作网站免费,免费下载个人简历的网站是哪些?
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
建站主机选择指南:服务器配置与SEO优化实战技巧
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
济南网站制作的价格,历城一职专官方网站?
如何通过.red域名打造高辨识度品牌网站?
如何在腾讯云服务器上快速搭建个人网站?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
网站制作网站,深圳做网站哪家比较好?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
宝塔新建站点为何无法访问?如何排查?
如何选择靠谱的建站公司加盟品牌?
北京专业网站制作设计师招聘,北京白云观官方网站?
网站设计制作企业有哪些,抖音官网主页怎么设置?
如何选择香港主机高效搭建外贸独立站?
小程序网站制作需要准备什么资料,如何制作小程序?
安徽网站建设与外贸建站服务专业定制方案
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
大连网站设计制作招聘信息,大连投诉网站有哪些?
网站制作难吗安全吗,做一个网站需要多久时间?
如何在自有机房高效搭建专业网站?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
北京企业网站设计制作公司,北京铁路集团官方网站?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
*请认真填写需求信息,我们会在24小时内与您取得联系。