移动端的touch事件
来源:互联网 发布:ntfs for mac 知乎 编辑:程序博客网 时间:2024/05/16 11:33
简单总结一下移动端的touch事件应该如何使用。
一般情况下,touch事件用于ul列表,通过手指触屏滑动来移动列表。
主要通过js中的touchstart,touchmove以及touchend事件来实现。
附上简单的左右滑动实现示例代码:
html代码:
// 样式注意 <style> .top{ height: 7.8rem; width: 100%; overflow: hidden; // ul的父盒子一定要设置超出部分隐藏 } .top ul{ width: 200%; // ul的宽度要足够大,可以容纳所有的li标签内容 height: 7.8rem; position: absolute; top: 0; left: 0; } .top ul li{ float: left; //li标签一定要浮动 } </style> <div class="top"> <ul> <li></li> <li></li> </ul> </div>
Js代码:
// 要移动的ul标签 var moveUl = document.querySelector('.top ul'); // 手机屏幕的宽度 var width = document.body.offsetWidth; // ul标签初始状态下距离屏幕左边的距离 var leftX = 0; // 滑动起始值 var startX = 0; // 滑动的距离 var moveX = 0; moveUl.addEventListener('touchstart',function(event){ // 记录起始值 starX = event.touches[0].clientX; starY = event.touches[0].clientY; // 获取滑动之前ul标签距离左边的距离 leftX = moveUl.offsetLeft; // 关闭过渡,让ul标签随手指滑动 moveUl.style.transition = 'none'; }) moveUl.addEventListener('touchmove',function(event){ event.preventDefault(); //阻止浏览器的默认事件 // 计算移动的距离 moveX = event.touches[0].clientX - starX; moveY = event.touches[0].clientY - starY; // 移动UL,移动值为滑动前距离屏幕左边的距离加上手指移动的距离 moveUl.style.left = (moveX + leftX)+'px'; }) moveUl.addEventListener('touchend',function(event){ // 滑动结束后ul距离屏幕左边的距离 var currentLeft = moveUl.offsetLeft; // 如果滑动的距离大于屏幕宽度的1/6,则将ul向左或向右移动整个屏幕的宽度 if(Math.abs(moveX) > width / 6){ if(moveX > 0){ // 开启过渡,向右滑动 moveUl.style.transition = 'all 0.5s'; moveUl.style.left = '0px'; }else{ // 开启过渡,向左滑动 moveUl.style.transition = 'all 0.5s'; moveUl.style.left = -width+'px'; } }else{ // 滑动距离过小,ul触屏结束后还原初始状态 moveUl.style.transition = 'all 0.5s'; moveUl.style.left = '0px'; } })
注:一般情况下, 是在touchstart中添加event.preventDefault()方法,阻止浏览器的默认行为,这样的话,在手指左右滑动的时候,页面是不会上下滑动的。
但是,如果页面中存在click点击事件的话,会发现这样做导致了页面中的click事件无法触发。此时正确的做法是将event.preventDefault()方法,放在touchmove中,click事件就可以正常触发了。
如果你的页面还有上下滚动的需求,那么很有可能此时页面又不能滚动了,所以最好在touchmove中加上方向判断,可以加上下面这段代码(自己的代码,根据需要修改):
var w = starX<0?starX*-1:starX; //x轴的滑动值var h = starY<0?starY*-1:starY; //y轴的滑动值if(w>h){ //如果是在x轴中滑动 event.preventDefault();}
就是在touchmove中判断x轴和y轴的移动值,判断当前是往哪个方向滑动,如果是在x轴上滑动(左右),就调用event.preventDefault()方法,如果是在y轴上滑动(上下),就不调用event.preventDefault()。
阅读全文
0 0
- 移动端的touch事件
- 移动端touch事件
- 详解移动端的Touch事件
- 移动端的touch事件(二)
- 移动端touch事件影响click事件的相关解决方法
- 移动端touch事件和click事件的区别
- 移动端touch事件和click事件的区别
- 移动web 移动端Touch事件
- 移动端touch事件影响click事件
- 2.移动端基础事件---touch事件
- touch gesture 事件在移动端的简单实现
- 移动端冒泡的touch 事件挡也挡不住
- 移动端touch事件获取clientX, clientY
- 移动端开发 原生touch事件使用
- 移动端基本touch事件实现
- 深入理解移动端touch事件
- html5移动端触摸事件touch
- 移动端web开发---Touch事件详解
- Maven Archetypes Part 3: 怎样构建一个多模块工程?
- 自己救赎之路--Java(Execl导入)
- Integer==陷阱
- AngularJS Select(选择框)
- 用java中DefaultTableModel类实现对表格的增删操作
- 移动端的touch事件
- Mac中如何卸载pkg包
- unique函数的使用方法(STL库函数)
- c库函数
- Java中常见的5种WEB服务器介绍
- Snort搭建
- (三)php参考手册----Math函数
- 异形滚动
- HDU 6043 KazaQ's Socks 找规律