//禁用手机默认的触屏滚动行为
document.addEventListener('touchmove', function(event) {
event.preventDefault()
}, false)
//touchstart事件
function touchSatrtFunc(evt) {
try {
//evt.preventDefault() //阻止触摸时浏览器的缩放、滚动条滚动等
var touch = evt.touches[0] //获取第一个触点
var x = Number(touch.pageX) //页面触点X坐标
var y = Number(touch.pageY) //页面触点Y坐标
//记录触点初始位置
startX = x
startY = y
} catch (e) {
alert('touchSatrtFunc:' + e.message)
}
}
//touchmove事件,这个事件无法获取坐标
function touchMoveFunc(evt) {
try {
//evt.preventDefault() //阻止触摸时浏览器的缩放、滚动条滚动等
var touch = evt.touches[0] //获取第一个触点
var x = Number(touch.pageX) //页面触点X坐标
var y = Number(touch.pageY) //页面触点Y坐标
//document.getElementById("version").innerHTML = "原:"+startY+" "+"现:"+y
//判断滑动方向
if (y - startY > 100) {
swipeDown()
} else if(y - startY < -100){
swipeUp()
}
} catch (e) {
alert('touchMoveFunc:' + e.message)
}
}
//touchend事件
function touchEndFunc(evt) {
try {
//evt.preventDefault() //阻止触摸时浏览器的缩放、滚动条滚动等
} catch (e) {
alert('touchEndFunc:' + e.message)
}
}
//绑定事件
function bindEvent() {
document.addEventListener('touchstart', touchSatrtFunc, false)
document.addEventListener('touchmove', touchMoveFunc, false)
document.addEventListener('touchend', touchEndFunc, false)
}
//判断是否支持触摸事件
function isTouchDevice() {
//document.getElementById("version").innerHTML = navigator.appVersion
try {
document.createEvent("TouchEvent")
//alert("支持TouchEvent事件!")
bindEvent() //绑定事件
} catch (e) {
alert("不支持TouchEvent事件!" + e.message)
}
}
在头部加上这个,防止双击的时候浏览器放大
当手指放在屏幕上触发。
当手指在屏幕上滑动时,连续地触发。
当手指从屏幕上离开时触发。
当系统停止跟踪时触发,系统什么时候取消,
由于触摸会导致屏幕动来动去,所以可以会在这些事件的事件处理函数内使用 event.preventDefault()
,来阻止屏幕的默认滚动。
touches:表示当前跟踪的触摸操作的touch对象的数组。
当一个手指在触屏上时,event.touches.length=1,
当两个手指在触屏上时,event.touches.length=2,以此类推。
targetTouches:特定于事件目标的touch对象数组。
因为touch事件是会冒泡的,所以利用这个属性指出目标对象。
changedTouches:表示自上次触摸以来发生了什么改变的touch对象的数组。
每个touch对象都包含下列几个属性:
clientX:触摸目标在视口中的x坐标。
clientY:触摸目标在视口中的y坐标。
identifier:标识触摸的唯一ID。
pageX:触摸目标在页面中的x坐标。
pageY:触摸目标在页面中的y坐标。
screenX:触摸目标在屏幕中的x坐标。
screenY:触摸目标在屏幕中的y坐标。
target:触摸的DOM节点目标。
先说下实现的思路:
1 页面布局,一堆等待滚动选择的列表 先实现一个竖排的列表,触屏能滚动,也就是说先不考虑选择的问题 写一个固定高度的盒子 把一堆待选择的列表放里面 触屏滚动大概就实现了 简单代码:
<div style="height:300px" id=“box”>
<li style="height:100px"></li>
<li style="height:100px"></li>
...
</div>
2: 滚动选择 第一步监控触屏滚动 onmousedown onmousemove onmouseup 监控鼠标触屏在box里的上下移动距离 也就是说滚动屏幕了多远 然后box scrollTop定位的减去移动的距离也就可以算出当前box距离顶部的距离 例如 mousemove -300px 原来的scrollTop为0 那现在0-(-300)=300px 那么每个li 100px 然后定位当前选中的 li标签 300/100 = 3 当前为选中了 列表中的第三个
3 以上只是提供了一个简单的实现思路 下面是别人的案例你可以看下 大体上就是这种思路实现的
网页链接