javascript - 防止在滚动模态框内容时滚动背景 div

标签 javascript jquery html css

我有一个用于移动网站(ios 设备)的模态框,其中包含可滚动的内容。最初的问题是,在模式内滚动内容时,即使背景页面也是可滚动的。为了解决这个问题,我在打开模态框时向 body 标记添加了一个“position: fixed”属性,并在模态框关闭时将其删除。

虽然这修复了初始滚动问题,但它会导致页面在将“固定属性:”添加到 body 标记时滚动到顶部,并且一旦模式框关闭,页面就会滚动到初始位置。

想要一个解决方案来避免在将固定属性添加到正文时页面滚动到顶部。

最佳答案

实现此目的的一种方法是监视触摸和滚轮事件,并在您知道它们将滚动错误的元素时对其调用 preventDefault。主要思想如下:

element.addEventListener('touchstart', onTouchStart);
element.addEventListener('touchmove', onTouchMove, { passive: false });
element.addEventListener('wheel', onWheel, { passive: false });

onWheel(event) {
  // Walk up the DOM tree from target element until the 
  // topmost element you want to isolate scroll with
  // i.e. your modal and check if any of the elements
  // can be scrolled in the wheel direction (event.deltaY).
  // If there are no such elements, call event.preventDefault().
}

onTouchStart(event) {
  // Store initial touch coordinates to determine direction later
}

onTouchMove(event) {
  // Using initial touch coordinates determine direction of the move
  // and do the similar thing as with the wheel event — call
  // event.preventDefault() if you know that resulting scroll will happen
  // outside of your modal
}

关于javascript - 防止在滚动模态框内容时滚动背景 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55237579/

相关文章:

javascript - 触发自定义事件 Vanilla JS,在 Vue 实例上检测。

jquery - jQuery removeClass 时希望背景色逐渐过渡

javascript - 使 best_in_place 输入看起来像 Bootstrap 输入

html - 如何更新保存在 Python/Flask Web 应用程序静态文件夹下的 CSS 样式表?

html - float DIV 在 Firefox 中工作正常,但在 IE9 和 Chrome 中不正确

javascript - 如何获取 @html.Checkbox 来更新 @html.dropdownList

javascript - 如何让一个 div 随着窗口大小的调整而移动,而不会将其他 div 推开?

javascript - 如何正确定义 jQuery 函数

jquery - 从值列表中选中复选框

javascript - 基于 CSS/Javascript 的下拉菜单。 onclick 事件的问题