蒙层穿透

Mask-Scroll

> 原码地址*

蒙层防穿透问题

> 蒙层穿透就是,当你用fixed 布局让蒙层显示的时候, 手指滑动屏幕会出现底部内容也滑动的现象. 如图:

fixed

当蒙层出现的时候,你滚动屏幕,底部内容也一起跟着滚动。 这就是蒙层穿透, 也可以叫 ‘滚动穿透’. 当然出现这种情况, 用户体验当然是不好的了。 所以作为一个有点追求的工程师当然是不允许这种情况的发生了(手动狗头…)

狗头保命

解决方案

这种要分情况,

  • 当蒙层没有滚动条的时候。

  • 当蒙层出现滚动条的时候

1. 当弹窗没有滚动条的时候。

直接监听 catch:touchmove 方法, 然后直接返回就可以了。

代码可以去看 fixed 目录下的文件

主要代码:

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
*// wxml*

<view

​ class="fixed-mask"

​ bind:tap="hideMsak"

​ wx:if="{{isShowMask}}"

​ catch:touchmove="stopMove">

​ <view class="mask-container" >

​ <view class="mask__item">

​ I am {{dogName}}

​ </view>

​ </view>

</view>

*// css*

.fixed-mask {

position: fixed;

left: 0;

top: 0;

height: 100vh;

width: 100vw;

background: #333;

opacity: 0.8;

z-index: 2;

}

.mask-container {

position: absolute;

top: 50%;

left: 50%;

transform: translate(-50%, -50%);

}

.mask__item {

margin: 0 auto;

background-color: #ff0015;

text-align: center;

width: 500rpx;

height: 500rpx;

line-height: 500rpx;

margin-bottom: 20rpx;

}

*// js*

stopMove () {

​ return;

}

效果如下:

scroll

上面是当弹窗没有滚动条的情况, 当弹窗出现滚动条的时候。

哦豁, 完蛋, 弹窗不能滚动了。

2. 当弹窗有滚动条的时候

方法一:

动态给底部滚动的元素 添加固定定位。也就是当出现弹窗的时候添加一个 class 样式类

效果如图:

scroll3

代码在 scroll1 文件夹。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
*//  css* 

.bottom-fixed {

position: fixed;

left: 0;

top: 0;

overflow: hidden;

}

*// wxml*

<view class="dog-container {{isShowMask ? 'bottom-fixed' : ''}}"></view>

大家可以看到 因为底部元素给固定到页面顶部了, 而不是你点击弹窗时出现的位置。目前自己还没有找到解决方法。 如果大佬有会的, 不吝赐教。。

\方法二:**

> scroll-view 设置高度 以及纵向滚动方向。

不过scroll-view 会有一些bug

详情查看

代码在 scrooll 文件夹

效果如下图:

scroll4

[完]

【作者简介:】 Mars 芦苇科技web前端开发工程师 喜欢 看电影 ,撸铁 还有学习。擅长 微信小程序开发, 系统管理后台。访问 www.talkmoney.cn 了解更多

作者主页:

github

segmentfault

Mars wechat
订阅给大嘴巴子
教练我想吃辣条