今天做移动端菜单适配,小屏幕时利用媒体查询,将菜单缩成一个icon,点击icon弹出侧边栏菜单
先添加一个遮罩层,然后添加菜单,菜单的zindex高于遮罩层,菜单icon的zindex高于菜单,定位固定在右上角,这样点击icon菜单滑进滑出,icon的位置不需要额外调整。
/*菜单icon*/
.navbar-icon {
width: 30px;
display: none;
position: absolute;
top: 20px;
right: 20px;
z-index: 101;
cursor: pointer;
}
/*菜单列表弹层*/
.navbar-phone {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: 100;
font-size: 14px;
background-color: #fff;
overflow: hidden;
-webkit-transform: translateX(40%);
transform: translateX(40%);
}
/*半透明遮罩*/
.shadePage {
width: 100%;
background: #ddd;
position: fixed;
top: 0;
right: 0;
left: 0;
bottom: 0;
opacity: 0.7;
z-index: 99;
}
基本功能做好了,但是发现弹出菜单页后,整个遮罩和菜单内容是可以随下面的页面滚动的,这显然是不符合我们需求的,原本的思路是让这个遮罩层的高度只等于屏幕高度,于是在这个坑上最走越远,查了不少资料,有的是用js动态算出屏幕高度赋值给遮罩的,有说给html,body所有父容器增加height:100%,然后容器height:100%的,但是即使遮罩高度固定,屏幕仍然可以滚动。这时候发现让遮罩充满整个屏幕的思路是错的,于是搜到了遮罩层去除滚动的。
因为项目引用了elementUI,有人说可以直接调用element提供的loading组件,调用了下,loading组件确实可以整个屏幕全屏,无滚动,但是有两个痛点,一个是有一个一直存在的loading动画,一个是遮罩的zindex是根据当前容器里元素最高的zindex动态生成的,本来遮罩的zindex是2000,我想让弹出层盖在遮罩上,设置了zindex:2004,结果页面上遮罩的zindex变成了2005。看来eleme的loading主要是用于页面过渡的,不大适合做通用的遮罩。
还有通过js阻止浏览器默认事件的,但是这样一棒子打死,弹出层若想添加滚动的内容就实现不了了。
这时候找到一篇最完美的解决方案,点击弹出的时候,给body添加overflow:hidden的样式,关闭遮罩的时候重新打开,同时打开的时候记录下当前页面滚动的位置,关闭的时候需要回归当前位置。
全局添加样式:
body.dialog-open {
position: fixed;
width: 100%;
}
//用overflow:hidden效果应该相同
添加全局方法:
export const OpenShade = ((bodyCls) => {
let scrollTop; return {
afterOpen: function () {
scrollTop = document.scrollingElement.scrollTop;
document.body.classList.add(bodyCls);
document.body.style.top = -scrollTop + 'px';
},
beforeClose: function () {
document.body.classList.remove(bodyCls); // scrollTop lost after set position:fixed, restore it back.
document.scrollingElement.scrollTop = scrollTop;
}
};
})('dialog-open');
然后监听一下控制弹出层显示的变量,调用添加和消除样式:
watch: { phoneMenu:function(val) { if (!!val){
ModalHelper.afterOpen();
} else {
ModalHelper.beforeClose();
}
}
}
大功告成
原网址: 访问
创建于: 2018-10-13 19:45:02
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论