本文摘自PHP中文网,作者藏色散人,侵删。
javascript实现禁止缩放的方法:1、设置对应浏览器的启动参数来禁止用户缩放页面;2、设置meta来禁止用户缩放页面;3、通过js监听来禁止用户缩放页面;4、禁用“ontouchmove”事件;5、通过多点触摸手势库实现。
本文操作环境: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的自带浏览器中(例如华为,魅族,小米)第一次手动缩放时,会提示?C再次操作可强制缩放网页―;再次缩放也可以缩放;
这一现象意味着meta标签的失效。在Android的chrome中不可以用户缩放(表现正常)
直接上代码(在.html文件中的<head></head>之间添加如下语句):
1 | <meta content= "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" name= "viewport" />
|
方案三:通过js监听来禁止用户缩放页面
直接上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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();
}
})
}
|
其中的event.touches.length是获取当天有几个点击事件同时发生,简单而言,就是有几个手指同时点击了屏幕,以为一般缩放操作都是两个手指以上进行的,所以这里应该满足的条件为event.touches.length>=2。不足之处就是禁用了所有的多点触控的操作。
【推荐:javascript高级教程】
方案四:禁用“ontouchmove”事件
因为缩放屏幕必然跟随着双指的ontouchmove事件,我们在<html></html>标签内加入禁用该事件的函数event.preventDefault()即可,这招非常暴力,意味着全局无法使用使用滑动、拖动等动作,只接受点击动作。
代码如下――
1 2 3 4 5 6 7 8 9 | <!DOCTYPE html>
<html xmlns= "http://www.w3.org/1999/xhtml" ontouchmove= "event.preventDefault();" >
<head>
</head>
<body>
</body>
</html>
|
其中的event.preventDefault()函数将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作)。例如,如果 type 属性是 “submit”,在事件传播的任意阶段可以调用任意的事件句柄,通过调用该方法,可以阻止提交表单。注意,如果 Event 对象的 cancelable 属性是 fasle,那么就没有默认动作,或者不能阻止默认动作。无论哪种情况,调用该方法都没有作用。
写到这里,忽然想到,是否只禁用某个<div></div>区块的ontouchmove事件,比如:
1 | <div ontouchmove= "event.preventDefault();" ></div>
|
但这种区块禁用的方式我还没有测试,你可以说我比较懒了,自己去测试吧~~~~
然而还没有得瑟一个月,我就有了这个需求,补充如下,直接上实现代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | var singleTouchFlag;
$( "#songList" ).on( "touchstart" , function (e) {
console.log( "touchstart Entered!!!" );
if (e.cancelable) {
if (!e.defaultPrevented) {
e.preventDefault();
}
}
if (1 == parseInt(e.originalEvent.touches.length)) {
singleTouchFlag = true;
} else {
singleTouchFlag = false;
}
});
$( "#songList" ).on( "touchmove" , function (e) {
if (e.cancelable) {
if (!e.defaultPrevented) {
e.preventDefault();
}
}
if (singleTouchFlag) {
}
});
$( "#songList" ).on( "touchend" , function (e) {
console.log( "touchend Entered!!!" );
if (e.cancelable) {
if (!e.defaultPrevented) {
e.preventDefault();
}
}
if (singleTouchFlag) {
}
});
|
方案五:借助于**多点触摸手势库“hammer.js ”**解决
hammer.js 是一个多点触摸手势库,能够为网页加入Tap、Double Tap、Swipe、Hold、Pinch、Drag等多点触摸事件,免去自己监听底层touchstart、touchmove、touchend事件并且写一大堆判断逻辑的痛苦。
hammer.js 不但支持触摸屏设备的浏览器,在桌面浏览器上,也能将鼠标的点击当做触摸,方便开发人员在桌面浏览器上调试。(JS仔在自己的随手背项目里面也用了hammer.js,真心好用)
直接上代码(在.html文件中的<head></head>之间添加如下语句):
1 2 3 4 5 6 7 8 9 | <script src = "http://eightmedia.github.com/hammer.js/hammer.js" > </script>
<script>
window.onload = function () {
var hammerMusicBlock = new Hammer(document.getElementById( "musicBlock" ));
hammerMusicBlock.ontransformstart = function (ev) { ev.preventDefault(); };
hammerMusicBlock.ontransform = function (ev) { ev.preventDefault(); };
hammerMusicBlock.ontransformend = function (ev) { ev.preventDefault(); };
}
</script>
|
hammer.js 其他的使用方式简介,直接看代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <script src = "http://eightmedia.github.com/hammer.js/hammer.js" > </script>
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插件的形式调用:
<script src = "http://eightmedia.github.com/hammer.js/jquery.hammer.js" > </script>
$ ( "#element" )
. hammer ( {
} )
. bind ( "tap" , function ( ev ) {
console . log ( ev ) ;
} ) ;
|
暂时总结这五种方案,如果有其他更好的方案,请添加到评论区,谢谢。
以上就是javascript怎么实现禁止缩放的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
render函数生成图片弹窗的代码示例
详解javascript中的proxy(代理)
javascript区不区分大小写
javascript怎么去除字符串空格
javascript怎么去除空格
深入了解js中的for...of循环
javascript怎么设置渐变色
js中20个常用字符串方法及使用方式(总结)
javascript 对象可以做到的几件事
javascript中bind是什么意思
更多相关阅读请进入《javascript》频道 >>
人民邮电出版社
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者
转载请注明出处:木庄网络博客 » javascript怎么实现禁止缩放