首先,在拖动 div 时,判断当前容器 div 是否有滚动条,如果没有,则禁止整个 div 拖动,例:
1 2 3 4 5 6 |
const list_dom: any = document.querySelector(".list"); list_dom.addEventListener("touchmove",(ev) => { if (list_dom.scrollHeight <= list_dom.clientHeight &&list_dom.offsetHeight <= list_dom.clientHeight) { ev.preventDefault(); } },{ passive: false }); |
注:上述方法仅适用于 div 内没有其他内容滚动情形!如果内层有其他 div 滚动,则需要监听当前滑动区域是否在内层滚动 div 上,如果在对应滚动 div 上,则不调用 ev.preventDefault() 方法,否则则调用。
在配置上述方法同时,对相应存在滚动的 div 设置 css 属性:
1 |
overscroll-behavior: none; |
使临近滚动区域不受到滚动链影响,滚动到边界后不会带动外层滚动。