自定义Svelte Action代码
<script>
export function fadeOnHover(node) {
const handleMouseEnter = () => {
node.style.transition = 'opacity 0.3s ease';
node.style.opacity = '0.5';
};
const handleMouseLeave = () => {
node.style.transition = 'opacity 0.3s ease';
node.style.opacity = '1';
};
node.addEventListener('mouseenter', handleMouseEnter);
node.addEventListener('mouseleave', handleMouseLeave);
return {
destroy() {
node.removeEventListener('mouseenter', handleMouseEnter);
node.removeEventListener('mouseleave', handleMouseLeave);
}
};
}
</script>
在组件中使用
<script>
import { fadeOnHover } from './fadeOnHover.js';
</script>
<div use:fadeOnHover>
鼠标悬停时透明度改变
</div>
生命周期相关操作解释
- 添加事件监听器:在自定义Action函数
fadeOnHover
内部,通过node.addEventListener
添加了mouseenter
和mouseleave
事件监听器。这是在Action初始化阶段进行的操作,用于设置元素的行为,属于“挂载”阶段的操作。
- 移除事件监听器:在返回的对象中有一个
destroy
函数,在这个函数内部通过node.removeEventListener
移除了之前添加的事件监听器。这对应于Svelte组件的“卸载”阶段,确保在元素从DOM中移除时,不会残留无效的事件监听器,避免内存泄漏等问题。