Vueを使用して簡単なカスタムドラッグ機能を実現
3833 ワード
Document
<span style="color:#000000;">
Vue.directive(</span>"drag",(el,{modifiers,value})=><span style="color:#000000;">{
el.style.position </span>= "absolute"<span style="color:#000000;">;
let {x,y} </span>=<span style="color:#000000;"> modifiers;
el.addEventListener(</span>"mousedown"<span style="color:#000000;">,donw);
</span><span style="color:#0000ff;">var</span><span style="color:#000000;"> disX,disY;
</span><span style="color:#0000ff;">function</span><span style="color:#000000;"> donw(e){
disX </span>=<span style="color:#000000;"> e.offsetX;
disY </span>=<span style="color:#000000;"> e.offsetY;
document.addEventListener(</span>"mousemove"<span style="color:#000000;">,move);
document.addEventListener(</span>"mouseup"<span style="color:#000000;">,up)
}
</span><span style="color:#0000ff;">function</span><span style="color:#000000;"> move(e){
</span><span style="color:#0000ff;">var</span> l = e.clientX -<span style="color:#000000;"> disX;
</span><span style="color:#0000ff;">var</span> t = e.clientY -<span style="color:#000000;"> disY;
</span><span style="color:#0000ff;">if</span><span style="color:#000000;">(value){
</span><span style="color:#0000ff;">if</span><span style="color:#000000;">(x){
el.style.left </span>= l + 'px'<span style="color:#000000;">;
}
</span><span style="color:#0000ff;">if</span><span style="color:#000000;">(y){
el.style.top </span>= t + 'px'<span style="color:#000000;">;
}
</span><span style="color:#0000ff;">if</span>(x&&y || (!x&&!<span style="color:#000000;">y)){
el.style.left </span>= l + 'px'<span style="color:#000000;">;
el.style.top </span>= t + 'px'<span style="color:#000000;">;
}
}
}
</span><span style="color:#0000ff;">function</span><span style="color:#000000;"> up(e){
document.removeEventListener(</span>"mousemove"<span style="color:#000000;">,move);
document.removeEventListener(</span>"mouseup"<span style="color:#000000;">,up);
}
})
</span><span style="color:#0000ff;">new</span><span style="color:#000000;"> Vue({
el:</span>"#app"<span style="color:#000000;">,
data:{
flag:</span><span style="color:#0000ff;">true</span><span style="color:#000000;">,
msg:</span>"123"<span style="color:#000000;">
}
})
</span>
転載先:https://www.cnblogs.com/r-mp/p/11224156.html