javascript - 如何防止触摸除使用 JavaScript 的元素之外的所有元素?
问题描述
我有一个弹出窗口,我想在它打开时防止在后台滚动。使用 CSS 为桌面执行此操作很容易:
body { overflow: hidden; }
然而,IOS 不遵守此规则,并且仍然允许在用户实际滚动弹出框时滚动背景。
禁用对包含页面上除弹出框之外的所有内容的包装元素的触摸不起作用:
document.querySelector('.wrapper').addEventListener('touchstart touchmove touchend', function (e) {
e.preventDefault();
});
然而,到处禁用触摸确实有效:
$('*').bind('touchstart touchmove touchend', false);
除了 popover 元素,我怎样才能在任何地方禁用它?
更新
弹出框 CSS:
.popover {
background: rgba(255,255,255,.5);
background: white;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 100000;
}
解决方案
另一种方法是将弹出框创建为单个整页 div,用于“阻止”事件到达正文。将弹出框放在此 div 前面。
您可以使用 JS 来阻止事件,也可以使用 JS 来element {point-events:none}
“撤消”它element {pointer-events:auto}
推荐阅读
- hazelcast-jet - Hazelcast Jet - 将列表排到流中
- node.js - 如何将 JSON 值输入到我的 postgresql 数据库?
- c++ - 使用递归计算一个函数中的高度和大小?
- excel - Excel 将 "FALSE" 和空白单元格评估为相等
- c# - 在 WPF XAML 中使用 ENUM 作为数组索引
- telerik - 有没有办法改变 RadChart 图例文本颜色?
- xamarin.forms - Xamarins 在缩放显示上形成 UWP 应用图像
- sql - 查找具有特定条件的最小日期,然后取差值
- ruby - 用另一个相同的类调用一个私有类方法
- android - 如何更新旧项目的 Gradle 文件中的依赖项?