You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Readymag中使用Eraser.js时滚动与擦除功能冲突的问题求助

Readymag中使用Eraser.js时滚动与擦除功能冲突的问题求助

嗨,我完全懂你现在的困扰——要让擦除功能正常运行,就得让顶层的图片能接收鼠标事件,但这样又会把下面页面的滚动给挡住;加了pointer-events: none后滚动是正常了,可擦除功能直接罢工,简直是两难!

其实核心矛盾就是顶层图片的事件拦截:默认情况下,z-index:99的#img2会把所有鼠标事件都截下来,下面的页面根本拿不到滚动信号;而pointer-events: none会让图片彻底忽略所有鼠标事件,Eraser.js自然没法捕捉擦除操作了。

给你个动态切换的解决方案——默认让图片不拦截事件(允许滚动),只有当用户开始擦除(按住鼠标/触摸屏幕)时,才临时开启事件接收,擦完再切回去:

修改后的CSS

.wrapper {
  position: relative;
  min-height: 100vh; /* 确保容器至少覆盖视口高度,避免布局错位 */
}

#img2 {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100vh;
  object-fit: cover;
  z-index: 99;
  pointer-events: none; /* 默认状态下不拦截事件,允许页面滚动 */
}

修改后的完整代码

<div class="wrapper">
  <img id="img2" src="https://freight.cargo.site/t/original/i/Z2283582099087810873620708068841/stelline-rettangolo.svg">
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://freight.cargo.site/m/K2262565859332669963966899162601/jquery.eraser.js"></script>
<script type="text/javascript">
  $('#img2')
    .eraser({ size: 200 })
    // 当用户开始擦除操作时,开启图片的事件接收
    .on('mousedown touchstart', function() {
      $(this).css('pointer-events', 'auto');
    })
    // 当用户结束擦除(松开鼠标/离开图片/触摸结束),恢复不拦截状态
    .on('mouseup mouseleave touchend touchcancel', function() {
      $(this).css('pointer-events', 'none');
    });
</script>

这个方案的效果是:平时页面可以正常滚动;当你按住鼠标(或触摸屏幕)在图片上擦除时,图片会临时接收鼠标事件,让Eraser.js正常工作;松开鼠标或者移开后,又会回到允许滚动的状态,完美解决冲突~

如果在Readymag里还是有问题,可以检查一下Readymag自带的页面容器有没有额外的事件拦截,或者尝试把这个.wrapper容器放在Readymag页面的最外层,确保层级和事件传递都正常。

备注:内容来源于stack exchange,提问作者Gaia Taverriti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 20:18:10