自定义指令 (pc端拖拽+表单自动获焦)

1.1什么是自定义指令?

  简单的来说就是自己定义的指令

  作用:操作底层dom

1.2自定义指令有两种

  全局自定义指令 : vue.directive:{"",{}}

  局部自定义指令:directives:{指令名:{钩子函数}}

1.3有五个钩子函数

  bind(){} 只调用一次,指令第一次绑定到元素时调用  

   unbind(){}只调用一次, 指令与元素解绑时调用

    inserted(){} 被绑定元素插入父节点时调用

  update :所在组件的 VNode 更新时调⽤,但是可能发⽣在其⼦VNode 更新之前。

 componentUpdated :指令所在组件的 VNode 及其⼦ VNode 全部更新后调⽤

1.4参数有4个

el:所绑定的元素,直接操作dom

binding:一个对象,包含原型

vnode:将vue编写生成的虚拟jiedian

oldvnode:上一个虚拟节点,仅在update和componentUpdated中使用

1.5使用场景

1自定义拖拽,2表单自动获取焦点

1.1在局部指令中定义   注意:directives与methodds写法同级

       directives:{
            drag:{//自定义指令名
                inserted(el){//钩子
                   el.onmousedown=e=>{//鼠标按下
                       console.log(e)
                       var left = e.x - el.offsetLeft
                       var top = e.y - el.offsetTop
                    document.onmousemove=e=>{//鼠标移动
                        el.style.left=e.x-left+'px'
                        el.style.top=e.y-top+'px'
                    }   
                    document.onmouseup=()=>{//鼠标离开,清除移动
                        document.onmousemove=null
                    }
                   }
                }
            }
        },

2.在标签中通过v-drag 来使用 

    <div class="box">
       <div class="item" v-drag>
          内容
       </div>
    </div>

3.style样式中必须把要拖动的元素设置相对定位

<style lang="scss" scoped>
.box{
    width: 100%;
    height: 100%;
    position: relative;
    .item{
        position: absolute;
        padding: 100px 200px;
        border: 1px solid black;

    }
}
</style>

2 表单自动获取焦点

 2.1:1.在局部指令中定义 注意:directives与methodds写法同级

      directives:{
             focus:{//指令名
                inserted(el){//钩子
                    el.focus()//聚焦
                }
            }
        }

2.2:在template中通过v-focus 指令名获取

<input type="text" placeholder="搜索" v-focus>

上一篇:VUe 方法加载顺序


下一篇:浅析为什么推荐使用唯一不变的 id 作为 key、使用index作为key会导致的问题(复用错误、组件类型propsData触发重新渲染、文本node触发重新渲染等问题)