博主信息
Sky
博文
291
粉丝
0
评论
0
访问量
7496
积分:0
P豆:617

【前端】如何在手机上禁止浏览器的网页滚动

2021年10月11日 19:30:16阅读数:29博客 / Sky

怎么写javascript和html才能禁止网页的上下,左右滚动啊,是在手机浏览器上,onmousewheel=“return false”在PC上有用,但在手机上没用,,用jquery mobile写可以吗?。。急求~~来个实际操作过的大神啊~~

回答

html>head

   <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
   <meta name="apple-mobile-web-app-capable" content="yes" />

viewport可以控制用户在手机上两个手指缩放的行为范围,这行代码的意思是宽度为设备宽度,初始缩放为1,最大缩放也是1倍,用户不能缩放。

apple这行是告诉iOS这是个应用,就不会像网页一样可以滚动到顶部回弹一下的效果,就是可以看到苹果默认背景灰色部分的那个效果。如果你不需要可以删掉这行。

这里有个算是例子吧,一个简单的时钟,是离线的http://www.tychio.net/opportunity/

阻止默认
$("body").on("touchmove",function(event){
event.preventDefault;
}, false)

然后点击取消或者确定时再取消body上的绑定
$("body").off("touchmove");

你找的是這個嗎?

CSS

overflow: hidden

一种方法:

html头部添加

<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">

然后将页面body的高度设为window的高度

$("body").height( $(window).height() );

其他方法

页面高度超过设备可见高度时,阻止掉touchmove事件。

document.body.addEventListener('touchmove', function (event) {
   event.preventDefault();
}, false);

1,var move = window.document.ontouchmove;//保存默认触摸事件

2,//禁止触摸

window.document.ontouchmove = function (e) {

   e.preventDefault();

};
3,//恢复触摸

window.document.ontouchmove = move;

我们都用这个overflow:hidden

加监听事件touchmove,touchstart

头部:

<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">

CSS:

html,body{height:100%;overflow:hidden;}
document.addEventListener('touchmove', function(event) {    if(event.target.type == 'range') return;
   event.preventDefault();
})

有个问题,就是使用

document.body.addEventListener(‘touchmove’, function (event) {
event.preventDefault(); }, false);
怎么取消?就算使用了移除事件,或者返回 真,都没办法再让页面滚动…QQ号码买卖平台地图有点郁闷.- –
都怪自己太笨…想了下,在阻止默认事件里面加个多条件

javascriptdocument.addEventListener('touchmove', function(event) {            //判断条件,条件成立才阻止背景页面滚动,其他情况不会再影响到页面滚动
           if(!$(".mask-photo").is(":hidden")){
               event.preventDefault();
           }
       })

document.body.addEventListener(‘touchmove’……

为什么要给body呢?给弹出层就好了

用$(“body”).bind(“touchmove”,function(event){event.preventDefault;//code});取消了body的拖动事件。

恢复这个拖动事件只要$(“body”).unbind(“touchmove”);

非常实用。

这样也不行啊!页面还是会被拖拽

document.addEventListener('touchmove', function (e) {    if (e.target.nodeName == '#document') {
       e.preventDefault();
   } else {
       e.stopPropagation();
   }
})
document.ontouchstart = function(){                        return false;   // true 允许滚动  
                   };


版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论