Maison> interface Web> js tutoriel> le corps du texte

Comment désactiver le zoom en javascript

藏色散人
Libérer: 2023-01-07 11:41:01
original
8111 Les gens l'ont consulté

javascript实现禁止缩放的方法:1、设置对应浏览器的启动参数来禁止用户缩放页面;2、设置meta来禁止用户缩放页面;3、通过js监听来禁止用户缩放页面;4、禁用“ontouchmove”事件;5、通过多点触摸手势库实现。

Comment désactiver le zoom en javascript

本文操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

javascript怎么实现禁止缩放?

javascript浏览器禁止用户放大缩小的五种方法

方案一:设置对应浏览器的启动参数来禁止用户缩放页面

这种方案在自建平台上,自选的指定浏览器上效果是可以的,但是不推荐,比如chrome主要通过设置* { touch-acion : none }来实现禁用缩放的方法,具体方案可自行搜索,我也没有进行相关测试。

touch-acion的参数意义如下:

auto:默认值。浏览器允许一些手势(touch)操作在设置了此属性的元素上,例如:对视口(viewport)平移、缩放等操作。

none:禁止触发默认的手势操作。

pan-x:可以在父级元素(the nearest ancestor)内进行水平移动的手势操作。

pan-y:可以在父级元素内进行垂直移动的手势操作。

manipulation:允许手势水平/垂直平移或持续的缩放。任何auto属性支持的额外操作都不支持。

注:touch-action只支持具有CSS width和height属性的元素。这个限制的目的是帮助浏览器优化低延时的手势操作。对于默认不支持此属性的元素,如这种内联元素,可以给它设置display:block这样的CSS属性来支持width和height。未来W3C规范会将此API扩展到支持所有元素。

方案二:设置meta来禁止用户缩放页面

这是搜索后经常出现的方案,但是现在,这个标签在新的浏览器(比如在ios10+)中已经失效,换言之,对于老版本的浏览器可能有效。

在Android的自带浏览器中(例如华为,魅族,小米)第一次手动缩放时,会提示–再次操作可强制缩放网页—;再次缩放也可以缩放;

这一现象意味着meta标签的失效。在Android的chrome中不可以用户缩放(表现正常)

直接上代码(在.html文件中的

之间添加如下语句):

Copier après la connexion

方案三:通过js监听来禁止用户缩放页面

直接上代码:

window.onload=function(){ document.addEventListener('touchstart',function (event) { if(event.touches.length>=2){ event.preventDefault(); } }) document.addEventListener('touchmove',function (event) { if(event.touches.length>=2){ event.preventDefault(); } }) document.addEventListener('touchend',function (event) { if(event.touches.length>=2){ event.preventDefault(); } }) }
Copier après la connexion

其中的event.touches.length是获取当天有几个点击事件同时发生,简单而言,就是有几个手指同时点击了屏幕,以为一般缩放操作都是两个手指以上进行的,所以这里应该满足的条件为event.touches.length>=2。不足之处就是禁用了所有的多点触控的操作。

【推荐:javascript高级教程

方案四:禁用“ontouchmove”事件

因为缩放屏幕必然跟随着双指的ontouchmove事件,我们在标签内加入禁用该事件的函数event.preventDefault()即可,这招非常暴力,意味着全局无法使用使用滑动、拖动等动作,只接受点击动作。

代码如下——

   /****some code***/ 
/****some code***/
Copier après la connexion

其中的event.preventDefault()函数将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作)。例如,如果 type 属性是 “submit”,在事件传播的任意阶段可以调用任意的事件句柄,通过调用该方法,可以阻止提交表单。注意,如果 Event 对象的 cancelable 属性是 fasle,那么就没有默认动作,或者不能阻止默认动作。无论哪种情况,调用该方法都没有作用。

写到这里,忽然想到,是否只禁用某个

区块的ontouchmove事件,比如:

Copier après la connexion

但这种区块禁用的方式我还没有测试,你可以说我比较懒了,自己去测试吧~~~~

然而还没有得瑟一个月,我就有了这个需求,补充如下,直接上实现代码:

var singleTouchFlag; //多指触控标识符 $("#songList").on("touchstart", function (e) { //引用了jquery库,我所要多指禁止的区域id为“songList” // 判断默认行为是否可以被禁用 console.log("touchstart Entered!!!"); if (e.cancelable) { // 判断默认行为是否已经被禁用 if (!e.defaultPrevented) { e.preventDefault(); } } if (1 == parseInt(e.originalEvent.touches.length)) { singleTouchFlag = true; // do something } else { singleTouchFlag = false; } }); $("#songList").on("touchmove", function (e) { // 判断默认行为是否可以被禁用 if (e.cancelable) { // 判断默认行为是否已经被禁用 if (!e.defaultPrevented) { e.preventDefault(); } } if (singleTouchFlag) { //do something } }); $("#songList").on("touchend", function (e) { // 判断默认行为是否可以被禁用 console.log("touchend Entered!!!"); if (e.cancelable) { // 判断默认行为是否已经被禁用 if (!e.defaultPrevented) { e.preventDefault(); } } if (singleTouchFlag) { //do something } });
Copier après la connexion

方案五:借助于**多点触摸手势库“hammer.js ”**解决

hammer.js 是一个多点触摸手势库,能够为网页加入Tap、Double Tap、Swipe、Hold、Pinch、Drag等多点触摸事件,免去自己监听底层touchstart、touchmove、touchend事件并且写一大堆判断逻辑的痛苦。

hammer.js 不但支持触摸屏设备的浏览器,在桌面浏览器上,也能将鼠标的点击当做触摸,方便开发人员在桌面浏览器上调试。(JS仔在自己的随手背项目里面也用了hammer.js,真心好用)

直接上代码(在.html文件中的

之间添加如下语句):

 
Copier après la connexion

hammer.js 其他的使用方式简介,直接看代码:

 // 先要对监听的DOM进行一些初始化 var hammer = new Hammer ( document . getElementById ( "container" ) ) ; // 然后加入相应的回调函数即可 hammer . ondragstart = function ( ev ) { } ; // 开始拖动 hammer . ondrag = function ( ev ) { } ; // 拖动中 hammer . ondragend = function ( ev ) { } ; // 拖动结束 hammer . onswipe = function ( ev ) { } ; // 滑动 hammer . ontap = function ( ev ) { } ; // 单击 hammer . ondoubletap = function ( ev ) { } ; //双击 hammer . onhold = function ( ev ) { } ; // 长按 hammer . ontransformstart = function ( ev ) { } ; // 双指收张开始 hammer . ontransform = function ( ev ) { } ; // 双指收张中 hammer . ontransformend = function ( ev ) { } ; // 双指收张结束 hammer . onrelease = function ( ev ) { } ; // 手指离开屏幕 hammer.js 还支持jQuery插件的形式调用:  $ ( "#element" ) . hammer ( { // 对DOM进行一些初始化,这里可以加入一些参数 } ) . bind ( "tap" , function ( ev ) { console . log ( ev ) ; } ) ;
Copier après la connexion

暂时总结这五种方案,如果有其他更好的方案,请添加到评论区,谢谢。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!