好吧,你的代码对我来说确实有效......
<script>
const handleWheel = e => {
console.log(e);
e.preventDefault();
};
</script>
<svelte:window on:wheel={handleWheel} />
请参阅REPL。
也许是你的浏览器,但我想它也可能是 REPL 本身(如果你正在使用的话)可能有一些<svelte:window />
事件问题,并显示过时的日志......
实际上,您的解决方案会与您想要的相反,并导致警告:
window.addEventListener("wheel", handleWheel, { passive: true });
来自MDN:
被动的
一个布尔值,如果为真,则表明侦听器指定的函数将永远不会调用 preventDefault()。如果被动侦听器确实调用了 preventDefault(),用户代理除了生成控制台警告之外什么都不做。
除此之外,Svelte 向事件侦听器添加选项的方法是使用修饰符。
例如:
<svelte:window on:wheel|preventDefault={handleWheel} />
<svelte:window on:wheel|passive={handleWheel} />
它们是可组合的,但preventDefault
不能passive
很好地组合在一起,所以让我们使用另一个:
<svelte:window on:wheel|preventDefault|once={handleWheel} />
有关可用修饰符和详细信息,请参阅 Svelte 的事件文档:
可以使用以下修饰符:
preventDefault — 在运行处理程序之前调用 event.preventDefault()
stopPropagation — 调用 event.stopPropagation(),防止事件到达下一个元素
被动 - 提高触摸/滚轮事件的滚动性能(Svelte 会在安全的地方自动添加它)
capture — 在捕获阶段而不是冒泡阶段触发处理程序
一次——在它第一次运行后移除处理程序
修饰符可以链接在一起,例如on:click|once|capture={...}
.