vue 快速给图片添加,点击旋转、放大、缩小、拖动的效果




可以看到现在的图片,已经具备放大缩小及旋转的功能了,但是这个方法会造成图片的遮挡,所以还需要做一个拖动图片的功能
在main.js里面全局定义一个拖动指令,也可在局部定义。

//自定义拖动
Vue.directive('drag',
     function (el, binding) {
        let oDiv = el;   //当前元素
         oDiv.onmousedown = function (e) {
            e.preventDefault();
            let bw = document.body.clientWidth;
            let bh = document.body.clientHeight;
            //鼠标按下,计算当前元素距离可视区的距离
             let disX = e.clientX - oDiv.offsetLeft;
             let disY = e.clientY - oDiv.offsetTop;
             // 计算两边坐标
             document.onmousemove = function (e) {
                 let l = 0, t = 0;
                 // 拖动边界
                 if (e.clientX >= bw) {
                     l = bw - disX;
                 } else if (e.clientX <= 0) {
                     {
                         l = 0- disX;
                     }
                 } else {
                     l = e.clientX - disX;
                 }
                 if (e.clientY >= bh) {
                     t = bh - disY;
                 }else if(e.clientY <= 0) {
                     t = 0- disY;
                 }
                 else {
                     t = e.clientY - disY;
                 }
                 //移动当前元素
                 oDiv.style.left = l + 'px';
                 oDiv.style.top = t + 'px';
             };
             // 鼠标停止移动时,事件移除
             document.onmouseup = function (e) {
                 document.onmousemove = null;
                 document.onmouseup = null;
             };
         };
     }
 );

最后给当前图片的元素加上v-drag,以及position: absolute;的样式,图片就能正常的拖动了

   

你可能感兴趣的:(vue 快速给图片添加,点击旋转、放大、缩小、拖动的效果)