javascript怎么实现禁止缩放


本文摘自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>

    /****some code***/

  </head>

  <body>

    /****some code***/

  </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) {  //引用了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

         

    }

});

方案五:借助于**多点触摸手势库“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(); }; // double fingers touchstart

            hammerMusicBlock.ontransform = function (ev) { ev.preventDefault(); }; // double fingers touchmove

            hammerMusicBlock.ontransformend = function (ev) { ev.preventDefault(); }; // double fingers touchend

        }

    </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>

  

// 先要对监听的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插件的形式调用:

<script src = "http://eightmedia.github.com/hammer.js/jquery.hammer.js" > </script>

  

$ ( "#element" )

   . hammer ( {

         // 对DOM进行一些初始化,这里可以加入一些参数

   } )

   . bind ( "tap" , function ( ev ) {

         console . log ( ev ) ;

   } ) ;

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

以上就是javascript怎么实现禁止缩放的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

render函数生成图片弹窗的代码示例

详解javascript中的proxy(代理)

javascript区不区分大小写

javascript怎么去除字符串空格

javascript怎么去除空格

深入了解js中的for...of循环

javascript怎么设置渐变色

js中20个常用字符串方法及使用方式(总结)

javascript 对象可以做到的几件事

javascript中bind是什么意思

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...