svelte动作(Action)

1、use 指令

动作(Action),其本质是元素上的生命周期函数。它们可用于譬如以下几个方面:

  • 与第三方库对接
  • 延迟加载图片
  • 工具提示(tooltips)
  • 添加自定义事件处理程序

我们模拟先做一个第三方库,要使第三方库适配 Svelte 的 Action 十分简单,实际上,Action 只是一个普通的函数,它接收一个参数,就是当前元素的 DOM 节点对象。

我们自制的“第三方”库的功能假设是一个让任意元素支持移动的 JS 库,它的框架大概是这样:

movable.js

export function movable(node) {
  // ... 第三方库的代码

  return {
    destroy() {
      // ... destroy 函数会在元素被清除时调用,
      // 我们可以在此做一些清理工作
    }
  }
}

这个函数返回一个包含了 destroy 方法的对象,destroy 函数在元素被移除时自动被调用。

让任意元素支持移动,我们需要监听一些事件:

movable.js

export default function movable(node) {
  let moving = false
  let x, y, left, top
	
  function handleMove(e) {
    if (moving) {
      node.style.left = (e.clientX - x + left) + 'px'
      node.style.top = (e.clientY - y + top) + 'px'
    }
  }
	
  function startMove(e) {
    moving = true
		
    x = e.clientX
    y = e.clientY
    left = parseInt(node.style.left) || 0
    top = parseInt(node.style.top) || 0
  }
	
  function endMove() { moving = false }
	
  window.addEventListener('mousemove', handleMove)
  window.addEventListener('mouseup', endMove)
  node.addEventListener('mousedown', startMove)
	
  return {
    destroy() {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值