允许在启用 event.preventDefault 时使用 touchstart 进行垂直滚动
Allow vertical scrolling with touchstart when event.preventDefault enabled
我目前在启用event.preventdefault时允许垂直滚动时遇到问题。
我正在尝试向我的移动页面添加滑动功能,我已经尝试了锤子.js、滑动等框架.js所有这些都需要启用 event.preventDefault 来检测左右滑动。
启用 event.preventDefault 后,滑动会完美检测,但是当您在该元素上时,您将失去垂直滚动的能力。 即,当您的手指从滑动元素开始时,您无法在移动设备上上下移动屏幕。
我尝试构建自己的小脚本,效果很好,但再次存在垂直滚动的问题,这是一个问题。
var el = document.getElementById('navigation');
el.ontouchstart = function(e){
e.preventDefault();
el.innerHTML = "touch start";
};
el.ontouchend = function(e){
el.innerHTML = "touch end";
};
el.ontouchmove = function(e){
el.innerHTML = "touch moved";
};
el.ontouchcancel = function(e){
el.innerHTML = "touch cancel";
};
有什么想法吗???
常见的问题,您希望本机浏览器行为与人们期望从触摸屏设备获得的交互行为一起工作。
如果你想使用一个库,你可能需要破解它,因为你需要阻止默认值,以防止页面在使用触摸事件时到处跳转,但在其他时候你想省略它,因为你想防止页面保持在静态位置, 遮盖其他内容。
理想情况下,您希望向处理程序添加一个子句,指示处理程序是否阻止浏览器在收到事件时执行的默认行为。
例如,滑动是一种应该在短时间内发生的行为(例如,如果你花一整秒钟将手指从一个区域移动到另一个区域,而不是,比如说,120毫秒,你实际上不是滑动,而是拖动。考虑时间框架可能会在这里对您有所帮助,例如:
var threshold = 150, interactionStart;
el.ontouchstart = function( e )
{
// store timestamp of interaction start
interactionStart = +new Date;
};
el.touchmove = function( e )
{
// get elapsed time in ms since start
var delta = +new Date - interactionStart;
if ( delta > threshold )
{
e.preventDefault();
}
else {
// super cool magic here
}
};
150 毫秒是否是所需的阈值取决于操作,因为您会看到您的问题没有固定的答案,因为实际实现取决于您的应用程序在触摸交互方面的需求。
当用户沿垂直轴滚动更多时,您还可以考虑不阻止事件默认值(即比较事件 Y 偏移量的增量位置(相对于起始 Y 偏移量(是否大于事件 X 偏移量(相对于起始 X 偏移量(,以检测用户是向左还是向右或向上或向下移动(例如,如果您有可以水平滑动的轮播(其中默认行为被阻止,因此页面在水平滚动期间不会向上/向下移动(,但当用户明显在垂直轴之间拖动页面时,希望页面垂直滚动(。
库 jquery.touchSwipe 解决了这个问题。
图书馆:https://github.com/mattbryson/TouchSwipe-Jquery-Plugin
将滑动和滚动组合在一起的示例页面:http://labs.rampinteractive.co.uk/touchSwipe/demos/Page_scrolling.html
- 幻灯片滚动javascript不起作用
- 将视口底部滚动到元素底部
- jQuery Lazy加载动画滚动
- 设置滑块分区上的滚动
- 结合jQuery和jetpack无限滚动
- 单击顶部导航时如何进行向下滚动效果(向下滑动).
- 滚动到容器中的下一个元素-几乎到了
- 只覆盖箭头键滚动事件
- Javascript如何找到滚动事件的来源
- Image赢得't隐藏在滚动jQuery上
- Safari(Mac OS)上的jQuery平滑滚动问题
- CSS-若窗口太小,滚动条会出现在“表格”单元格上
- 禁用(而不是隐藏)浏览器滚动条
- JavaScript上下滚动不可预测
- 滚动和表格
- 允许在启用 event.preventDefault 时使用 touchstart 进行垂直滚动
- 在phonegap中使用touchstart和touchend事件旁边的滚动
- Touchstart事件在滚动后停止工作
- Android - JavaScript :在缩放或滚动页面之前不会触发 touchstart 事件
- 如何防止滚动,但不链接跟随时,触发touchstart事件超过标签