禁止body滚动允许div滚动防微信露底

最近遇到一个需求,页面中只有一个div允许滚动,其他内容不允许滚动。

正常来讲加上

body{height:100%;overflow: hidden;}

应该就阻止页面滚动了。可是很悲催的是手机端并不能很好的执行,而且还有弹性效果。
所以只能对默认的滚动进行干涉。
首先禁止body

document.body.ontouchmove = function (e) {
      e.preventDefault();
};

然后取得触摸点的坐标

    var startX = 0, startY = 0;
    //touchstart事件
    function touchSatrtFunc(evt) {
        try
        {
            //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等  

            var touch = evt.touches[0]; //获取第一个触点
            var x = Number(touch.pageX); //页面触点X坐标
            var y = Number(touch.pageY); //页面触点Y坐标
            //记录触点初始位置
            startX = x;
            startY = y;

        } catch (e) {
            alert(‘touchSatrtFunc:‘ + e.message);
        }
    }
    document.addEventListener(‘touchstart‘, touchSatrtFunc, false);

然后对允许滚动的div进行判断

    var _ss = document.getElementById("div的id");
    _ss.ontouchmove = function (ev) {
        var _point = ev.touches[0],
                _top = _ss.scrollTop;
        // 什么时候到底部
        var _bottomFaVal = _ss.scrollHeight - _ss.offsetHeight;
        // 到达顶端
        if (_top === 0) {
            // 阻止向下滑动
            if (_point.clientY > startY) {
                ev.preventDefault();
            } else {
                // 阻止冒泡
                // 正常执行
                ev.stopPropagation();
            }
        } else if (_top === _bottomFaVal) {
            // 到达底部
            // 阻止向上滑动
            if (_point.clientY < startY) {
                ev.preventDefault();
            } else {
                // 阻止冒泡
                // 正常执行
                ev.stopPropagation();
            }
        } else if (_top > 0 && _top < _bottomFaVal) {
            ev.stopPropagation();
        } else {
            ev.preventDefault();
        }
    };

这样处理完后,就只能指定的div滚动了。
变通一下,就可以实现微信防露底

最近做移动端,总是遇到很蛋疼的问题, 决定把一些黑魔法记下来, 微信浏览器中想必会有很多事情让我大前端小伙伴头疼,23333终于皇天不负有心人, 在网上找到了一个可以防页面滚动滑到顶端或底部的时候, 漏出微信丑丑的灰色底[/偷笑]原文网址:https://blog.ghostry.cn/program/702.html我的核心代码:prevent:function () {    var startX = 0, startY = 0;    //touchstart事件    function touchSatrtFunc(evt) {        try        {            //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等

            var touch = evt.touches[0]; //获取第一个触点            var x = Number(touch.pageX); //页面触点X坐标            var y = Number(touch.pageY); //页面触点Y坐标            //记录触点初始位置            startX = x;            startY = y;

        } catch (e) {            alert(‘touchSatrtFunc:‘ + e.message);        }    }    document.addEventListener(‘touchstart‘, touchSatrtFunc, false);    var _ss = document.getElementById("contain");    _ss.ontouchmove = function (ev) {        var _point = ev.touches[0],            _top = _ss.scrollTop;        // 什么时候到底部        var _bottomFaVal = _ss.scrollHeight - _ss.offsetHeight;        // 到达顶端        if (_top === 0) {            // 阻止向下滑动            if (_point.clientY > startY) {                ev.preventDefault();            } else {                // 阻止冒泡                // 正常执行                ev.stopPropagation();            }        } else if (_top === _bottomFaVal) {            // 到达底部            // 阻止向上滑动            if (_point.clientY < startY) {                ev.preventDefault();            } else {                // 阻止冒泡                // 正常执行                ev.stopPropagation();            }        } else if (_top > 0 && _top < _bottomFaVal) {            ev.stopPropagation();        } else {            ev.preventDefault();        }    };}
时间: 2024-10-08 13:40:18

禁止body滚动允许div滚动防微信露底的相关文章

跟随滚动条滚动的div代码实例

跟随滚动条滚动的div代码实例:有时候我们希望当滚动网页滚动条的时候,div能够随着滚动条而滚动,这样就能够基本保持处于它相对于窗口所在的位置,下面是一段代码实例,基本实现了此功能,不过还是有不足之处,就是当拖动滚动条的时候,具有抖动的情况,也算差强人意吧.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author&quo

div滚动效果

废话不多说,直接贴代码,将代码复制到文件中直接用浏览器打开即可看到效果: 高度或宽度,以及内容数量都会对结果产生影响,请仔细调整.<br> <!-- ######################################### --> <br>向上滚动效果: <div id="div_up_1" style="overflow:hidden; height:60px; width:120px;"> <div

JS 实现DIV 滚动至顶部后固定

<!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <title>DIV滚动至顶部后固定</title> </head> <body style="height:2000px;"> <div style="height: 200px"></div> <div id=&q

JavaScript实现页面滚动到div区域div以动画方式出现

用JavaScript实现页面滚动到div区域div以动画方式出现CSS动画 页面滚动到一块区域,改区域以动画方式出现实现这个效果需要二点:一我们要先写好一个css动画,二:用js的监听页面滑动的距离在给div添加动画 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style> img { width: 1

WEB前端:05_scroll滚动(图片/文字滚动)

scroll滚动(图片/文字滚动) 网站常用效果之一,以下为简化版,用于学习javascript基础知识. 效果图: scroll滚动(图片/文字滚动)- 纯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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 5

jquery 文字滚动大全 scroll 支持文字或图片 单行滚动 多行滚动 带按钮控制滚动

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

Android防微信首页左右滑动切换

大家看到微信首页切换效果有没有觉得很炫,滑动切换,点击底部bar瞬间切换,滑动切换渐变效果,线上效果图: 之前也在博客上看到别人的实现,再次基础上,我做了些优化.首先说下实现原理,大神略过,o(╯□╰)o 页面上看到的三个页面是三个Fragment, 左右滑动使用viewpager,相信大家也都是这么再用,那么底部用的是什么技术呢,底部渐变其实就是重写了ImageView,以及在左右滑动时,改变了TextView的颜色值,是不是很简单...下面我们一步一步的来: 1.自定义ImageView:

js点击左右滚动+默认自动滚动类

js点击左右滚动+默认自动滚动类 点击下载

移动端内滚动与外滚动

概述 在做移动端开发的时候,经常会遇到内滚动与外滚动的问题,下面我对这方面好好的总结了一下,供以后开发时参考,相信对其他人也有用. 参考资料:关于height.offsetheight.clientheight.scrollheight.innerheight.outerheight的区别一览 内滚动与外滚动 关于移动端的内滚动和外滚动,有如下结论: 如果如果内滚动是外滚动的一部分(比如正常页面里面有一个可以滚动的容器),那么内滚动在滚动时,不会触发外滚动,只有在滚动到顶部或者底部的时候,才会触