这是我的第一篇文章如此恶意尝试解释清楚:
我正在开发一个Web应用程序,但重点是,我希望让我的用户感觉它是一个原生应用程序。在本机应用程序中,你不能像在iOS safari中滚动,所以我试图禁用与event.preventDefault滚动。这很好用,除了表单元素和链接不再可用。我的解决方案是这个小脚本,但如果你开始触摸其中一个转义元素,它仍会滚动。没什么大不了的,但它让我疯狂......
脚本注释:
如果isTouch是可触摸的设备,则返回true / false
如果数组包含字符串
if (isTouch) {
window.addEventListener("touchstart", function (evt) {
var target = evt.touches[0].target;
var tags = 'a input textarea button'.split(' ');
if ( tags.contains(target.tagName) === false ) {
evt.preventDefault();
}
}, false);
}
修改 我的主要问题是,是否有解决方案在没有touchmove事件的情况下触发tap事件以允许滚动
编辑2
我解决了这个问题。我的解决方案是,模拟交互元素上的事件:
var eventFire = function (el, etype) {
if (el.fireEvent) {
(el.fireEvent('on' + etype));
}
else {
var evObj = document.createEvent('Events');
evObj.initEvent(etype, true, false);
el.dispatchEvent(evObj);
}
}
if (isTouch) {
window.addEventListener("touchstart", function (evt) {
var target = evt.touches[0].target;
var foc = 'input textarea'.split(' ');
var clck = 'a button'.split(' ');
if ( foc.contains(target.tagName) ) {
target.focus();
eventFire(target,'click');
evt.preventDefault();
}
else {
evt.preventDefault();
}
}, false);
}