Vue 自定义指令(拖拽,右键菜单)

本文介绍了Vue2.0中自定义指令的使用,用于实现对纯DOM元素的底层操作。文章重点讲解了拖拽和自定义右键菜单的指令封装,强调在使用自定义指令时,应尽量减少直接操作DOM,优先考虑数据驱动的方式来实现功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单搬运下基本概念:

在 Vue2.0 里面,代码复用的主要形式和抽象是组件——然而,有的情况下,你仍然需要对纯 DOM 元素进行底层操作,这时候就会用到自定义指令

基本用法:

// 注册一个全局自定义指令 v-focus
Vue.directive('focus', {
  // 当绑定元素插入到 DOM 中。
  inserted: function (el) {
    // 聚焦元素
    el.focus()
  }
})

钩子函数:

  • bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。
  • inserted:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。
  • update:被绑定元素所在的模板更新时调用,而不论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新(详细的钩子函数参数见下)。
  • componentUpdated: 被绑定元素所在模板完成一次更新周期时调用。

搬运完毕。下面是我用到的对拖拽右键菜单的指令封装。

拖拽

Vue.directive('drag',{
    inserted:  function(target){
        target.onmousedown = function(ev){
            var disX = ev.clientX - target.offsetLeft;
            var disY = ev.clientY - target.offsetTop;
            document.onmousemove = function(eve){
                target.style.left = eve.clientX - disX + 'px';
                target.style.top = eve.clientY - disY + 'px';
                //Data.configData.dragData[_index].x = (eve.clientX - disX)/showWidth*100;
                //Data.configData.dragData[_index].y = (eve.clientY - disY)/showHeight*100;
            }
            document.onmouseup = function(){
                document.onmousemove = null;
                document.onmouseup = null;
            }
            return false;
        }
    }
})

自定义右键菜单

Vue.directive('menu',{
    inserted: function(target){
        target.oncontextmenu = function(){
            //do something......
            //Data.configData.dragData[_index].menu = true;
            return false;
        }
    }
})

值得注意的是:尽管需要对纯 DOM 元素进行底层操作,但还是要尽量减少直接对DOM的操作,尽量用数据去驱动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值