触摸屏阻止网页放大缩小的终极解决方法(大型商场引导屏,多媒体触摸屏幕)

2,037 阅读1分钟

对于禁止网页的放大缩小,在手机上通过meta标签就可以解决了,但是放到电脑触摸屏上就完全没有效果。触摸屏的系统是windows系统,应用在大型商场的引导屏幕或多媒体触摸屏。

先列举一些网上无效的常见操作

无效操作1

<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />

无效操作2

document.addEventListener('gesturestart', function(event) {
    event.preventDefault()
})

无效操作3

document.addEventListener('touchstart', function(event) {
    if (event.touches.length > 1) {
        event.preventDefault()
    }
});

还看过通过css解决的(无效)

*{ touch-action: pan-y; } 

按照操作3,浏览器会报一段错误,大概意思是不能直接调用preventDefault,接下来的解决方法是根据操作3来改

终极解决方法(亲测有效)

document.addEventListener('touchstart', function(event) {
    if (event.touches.length > 1) {
        event.preventDefault()
    }
}, { passive: false, capture: false });

这就是基于操作3的改造,多了一句代码{ passive: false, capture: false }
passive 的意思是“顺从的”,表示它不会对事件的默认行为说 no,浏览器知道了一个监听器是 passive 的,它就可以在两个线程里同时执行监听器中的 JavaScript 代码和浏览器的默认行为了。

对于passive的更详细解释,参考:https://www.cnblogs.com/ziyunfei/p/5545439.html