<template> <div class="drag"> <div ref="element" class="content" v-drag draggable="false"> <p>文字網頁</p> </div> <div style="height:2000px;width:100%"></div> </div> </template> <script > export default { data(){ return { dd:"", inout:"" } }, directives: { drag(el){ let oDiv = el; //當前元素 let self = this; //上下文 //禁止選擇網頁上的文字 document.onselectstart = function() { return false; }; oDiv.onmousedown = function(e){ //鼠標按下,計算當前元素距離可視區的距離 let disX = e.clientX - oDiv.offsetLeft; let disY = e.clientY - oDiv.offsetTop; document.onmousemove = function(e){ //通過事件委托,計算移動的距離 let l = e.clientX - disX; let t = e.clientY - disY; //移動當前元素 oDiv.style.left = l + "px"; oDiv.style.top = t + "px"; } document.onmouseup = function(e){ document.onmousemove = null; document.onmouseup = null; }; //return false不加的話可能導致黏連,就是拖到一個地方時div粘在鼠標上不下來,相當於onmouseup失效 return false; }; } } } </script> <style> .drag{ position: relative; } /* position:absolute;這個還是要設的,不然拖動塊定不了位置 */ .content{ position:absolute; height:100px; width:100px; background-color: #67C23A; cursor: pointer; } </style>