禁用webapp滚动而不杀死javascript中的点击(点击)事件

时间:2013-04-04 09:59:27

标签: javascript ios web-applications scroll touch

这是我的第一篇文章如此恶意尝试解释清楚:

我正在开发一个Web应用程序,但重点是,我希望让我的用户感觉它是一个原生应用程序。在本机应用程序中,你不能像在iOS safari中滚动,所以我试图禁用与event.preventDefault滚动。这很好用,除了表单元素和链接不再可用。我的解决方案是这个小脚本,但如果你开始触摸其中一个转义元素,它仍会滚动。没什么大不了的,但它让我疯狂......

脚本注释:
如果isTouch是可触摸的设备,则返回true / false 如果数组包含字符串

,则.contains方法返回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);
}

0 个答案:

没有答案