Vue3实战笔记(64)—Vue 3自定义指令的艺术:实战中的最佳实践

文章目录


前言

书接上文,在Vue3中,自定义指令是一种强大的工具,允许我们扩展HTML元素的功能。通过自定义指令,我们可以创建可重用的行为,并将它们绑定到任何元素上。下面,本文备份一些简单的Vue3自定义指令超实用案例,并解释其实际应用场景。:


一、一些简单的Vue3自定义指令超实用案例

v-focus - 自动聚焦输入框

javascript 复制代码
const app = Vue.createApp({
  data() {
    return {
      // ...
    }
  }
});

app.directive('focus', {
  mounted(el) {
    el.focus();
  }
});

使用方式:

javascript 复制代码
<input v-focus />

v-tooltip - 显示工具提示

javascript 复制代码
app.directive('tooltip', {
  mounted(el, binding) {
    el.title = binding.value;
  },
  updated(el, binding) {
    el.title = binding.value;
  }
});

使用方式:

javascript 复制代码
<span v-tooltip=" '这是一个提示信息' ">鼠标悬停</span>

v-click-outside - 点击元素外部时触发事件

javascript 复制代码
app.directive('click-outside', {
  mounted(el, binding) {
    el.clickOutsideEvent = event => {
      if (!(el == event.target || el.contains(event.target))) {
        binding.value(event, el);
      }
    };
    document.body.addEventListener('click', el.clickOutsideEvent);
  },
  unmounted(el) {
    document.body.removeEventListener('click', el.clickOutsideEvent);
  }
});

使用方式:

javascript 复制代码
<div v-click-outside="closeDropdown">
  <!-- ... -->
</div>

v-draggable - 使元素可拖拽

javascript 复制代码
app.directive('draggable', {
  mounted(el) {
    el.style.cursor = 'move';
    el.style.position = 'fixed';
    let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
    el.onmousedown = dragMouseDown;

    function dragMouseDown(e) {
      e = e || window.event;
      e.preventDefault();
      pos3 = e.clientX;
      pos4 = e.clientY;
      document.onmouseup = closeDragElement;
      document.onmousemove = elementDrag;
    }

    function elementDrag(e) {
      e = e || window.event;
      e.preventDefault();
      pos1 = pos3 - e.clientX;
      pos2 = pos4 - e.clientY;
      pos3 = e.clientX;
      pos4 = e.clientY;
      el.style.top = (el.offsetTop - pos2) + 'px';
      el.style.left = (el.offsetLeft - pos1) + 'px';
    }

    function closeDragElement() {
      document.onmouseup = null;
      document.onmousemove = null;
    }
  }
});

使用方式:

javascript 复制代码
<div v-draggable>
  拖拽我
</div>

v-scroll - 监听元素的滚动事件

javascript 复制代码
app.directive('scroll', {
  mounted(el, binding) {
    el.addEventListener('scroll', binding.value);
  },
  unmounted(el, binding) {
    el.removeEventListener('scroll', binding.value);
  }
});

使用方式:

javascript 复制代码
<div v-scroll="handleScroll">
  <!-- 内容 -->
</div>

这些自定义指令可以大大提高开发效率,帮助开发者实现一些常见且实用的功能。在实际开发中,你可以根据具体需求来定制自己的指令。


总结

在平凡的日子里,种下梦想的种子,静候花开。

相关推荐
QT 小鲜肉9 小时前
【Linux命令大全】001.文件管理之mmove命令(实操篇)
linux·服务器·前端·chrome·笔记
不会学习?10 小时前
markdown笔记分享
经验分享·笔记
前端开发爱好者10 小时前
VSCode 重磅更新!要收费了?
前端·javascript·visual studio code
QT 小鲜肉10 小时前
【Linux命令大全】001.文件管理之mdel命令(实操篇)
linux·运维·服务器·chrome·笔记
wuhen_n10 小时前
LeetCode -- 1:两数之和(简单)
javascript·算法·leetcode·职场和发展
假装我不帅11 小时前
jquery.nicescroll使用
前端·javascript·jquery
安_11 小时前
js 数组splice跟slice
开发语言·前端·javascript
叫我阿柒啊11 小时前
从Java全栈到前端框架:一场真实的技术面试对话
java·vue.js·spring boot·微服务·typescript·前端开发·后端开发
lkbhua莱克瓦2412 小时前
基础-函数
开发语言·数据库·笔记·sql·mysql·函数
yuxb7312 小时前
Kubernetes核心组件详解与实践:Service
笔记·kubernetes