<body>
<div
id
=
"app"
>
<!-- 自定义的指令在使用时需添加v-前缀 -->
<div
v-drag
=
"123"
id
=
"box"
>
helloworld
</div>
<p
v-drag
>
段落
</p>
</div>
</body>
<script
src
=
"vue.js"
></script>
<script>
// Vue.directive,用于全局注册一个指令,第一个参数是指令名字,第二个参数是指令的配置对象
Vue
.
directive
(
"drag"
,{
// 指令配置对象中inserted方法,当指令被插入到元素中时指令,一般用于设置指令的具体功能。
// inserted函数中,第一个参数是指令所在的元素对象,第二个参数是指令信息。
inserted
(
el
,
dir
){
// console.log(el);
el
.
style
.
position
=
"relative"
;
el
.
style
.
left
=
"0px"
;
el
.
style
.
top
=
"0px"
;
// console.log("指令被识别了");
function
mv
(
e
){
let
offX
=
e
.
pageX
-
prevX
;
let
offY
=
e
.
pageY
-
prevY
;
el
.
style
.
left
=
parseInt
(
el
.
style
.
left
)
+
offX
+
"px"
;
el
.
style
.
top
=
parseInt
(
el
.
style
.
top
)
+
offY
+
"px"
;
prevX
=
e
.
pageX
;
prevY
=
e
.
pageY
;
}
let
prevX
=
0
;
let
prevY
=
0
;
el
.
addEventListener
(
"mousedown"
,
function
(
e
){
prevX
=
e
.
pageX
;
prevY
=
e
.
pageY
;
document
.
addEventListener
(
"mousemove"
,
mv
)
})
document
.
addEventListener
(
"mouseup"
,
function
(){
document
.
removeEventListener
(
"mousemove"
,
mv
);
});
}
})
new
Vue
({
el:
"#app"
,
data:
{
}
})
<
/script>