当前位置:首页 > HTML

h5实现穿透

2026-03-06 12:39:14HTML

H5 实现事件穿透

在移动端 H5 开发中,事件穿透通常指点击事件穿透到下层元素。常见场景如弹窗、遮罩层需要阻止底层页面滚动或点击。

使用 CSS 属性 pointer-events

通过 CSS 的 pointer-events 属性控制元素是否响应鼠标事件:

.overlay {
  pointer-events: none; /* 允许事件穿透 */
}
.mask {
  pointer-events: auto; /* 阻止事件穿透 */
}

动态控制穿透行为

通过 JavaScript 动态切换穿透状态:

h5实现穿透

document.getElementById('mask').addEventListener('click', function() {
  this.style.pointerEvents = 'none'; 
  setTimeout(() => { this.style.pointerEvents = 'auto'; }, 300);
});

阻止默认行为

对于滚动穿透,在 touchmove 事件中阻止默认行为:

document.body.addEventListener('touchmove', function(e) {
  if (document.querySelector('.modal-open')) {
    e.preventDefault();
  }
}, { passive: false });

弹窗场景处理

弹窗出现时给 body 添加固定定位:

h5实现穿透

body.modal-open {
  position: fixed;
  width: 100%;
}

通过 JavaScript 动态切换:

function openModal() {
  document.body.classList.add('modal-open');
  document.body.style.top = `-${window.scrollY}px`;
}

function closeModal() {
  const scrollY = document.body.style.top;
  document.body.classList.remove('modal-open');
  window.scrollTo(0, parseInt(scrollY || '0') * -1);
}

第三方库解决方案

使用专门解决穿透问题的库如 body-scroll-lock

import { disableBodyScroll, enableBodyScroll } from 'body-scroll-lock';

disableBodyScroll(document.getElementById('modal'));
enableBodyScroll(document.getElementById('modal'));

分享给朋友:

相关文章

h5实现靶标

h5实现靶标

H5实现靶标的方法 使用Canvas绘制靶标 Canvas是HTML5提供的绘图API,适合绘制复杂的图形如靶标。通过JavaScript控制绘制逻辑,可以实现动态效果。 <canvas id…

h5实现一键复制

h5实现一键复制

实现一键复制的H5方法 使用HTML5和JavaScript实现一键复制功能,可以通过以下方式完成: 使用document.execCommand方法(兼容旧浏览器) 创建一个隐藏的textarea…

H5页面全景怎么实现

H5页面全景怎么实现

H5页面全景实现方法 H5页面全景效果可以通过多种技术实现,以下是几种常见的方法: 使用Three.js库 Three.js是一个基于WebGL的JavaScript库,适合创建复杂的3D全景效果。…

h5实现穿透

h5实现穿透

H5实现穿透的方法 H5实现穿透通常指的是在移动端网页中,点击事件能够穿透上层元素触发下层元素的交互。以下是几种常见的实现方式: 使用CSS属性pointer-events 通过设置上层元素的po…

h5实现透视

h5实现透视

H5实现透视效果的方法 在H5(HTML5)中实现透视效果,可以通过CSS 3D变换或WebGL技术来实现。以下是几种常见的实现方式: 使用CSS 3D变换 CSS的transform属性提供了3D…

h5实现签字

h5实现签字

H5实现签字功能的方法 使用Canvas API Canvas API是HTML5提供的绘图功能,可用于实现签字板。创建一个Canvas元素,监听触摸或鼠标事件,记录移动轨迹并绘制线条。 &…