网站须要在移动端完成适配,针对移动端H5以及web端采用的都是bluma这种flex布局解决方案css
在H5中使用的列表采用的是 react-virtualized 来绘制表格html
为了展现表格中单行数据的具体详情,一般的解决方案是采用新页面或者是弹窗来完成。react
这里采用的是弹窗的方案,点击单行数据后的数据详情用的是 bluma 的 modal-card。web
具体细节和实例能够参考: bulma.io/documentati…chrome
在点击单行数据后,弹窗显示详情数据,整个 modal-card 设置成 position:fixed;浏览器
没有 footer 部分,设置 modal-card 的高度为整个屏幕的高度:100vhbash
表现:布局
JS + CSS overflow:hiddenpost
if ($modalButtons.length > 0) {
$modalButtons.forEach(function ($el) {
$el.addEventListener('click', function () {
var target = $el.dataset.target;
openModal(target);
});
});
}
function openModal(target) {
var $target = document.getElementById(target);
rootEl.classList.add('is-clipped');
$target.classList.add('is-active');
}
复制代码
is-clipped {
overflow:hidden!important
}
复制代码
function closeModals() {
rootEl.classList.remove('is-clipped');
$modals.forEach(function ($el) {
$el.classList.remove('is-active');
});
}
复制代码
可是这种方案在应用中测试事后,发现并不能解决问题,上面的问题仍是出现测试
JS + CSS Position:fixed + scrollTop
方案思路:
弹窗以前:
const scrollTop = global.document.documentElement.scrollTop || global.pageYOffset || global.document.body.scrollTop;
global.document.documentElement.style.position = 'fixed';
this.scrollTop = scrollTop;
复制代码
关闭弹窗:
closeModalHandler = () => {
const { closeOrderHistoryModal } = this.props;
global.document.documentElement.style.position = '';
global.pageYOffset = this.scrollTop;
global.document.documentElement.scrollTop = this.scrollTop;
global.document.body.scrollTop = this.scrollTop;
closeOrderHistoryModal();
}
复制代码