vue下的自定义图片拖拽

Vue.directive('drag',   //自定义指令 
    {bind:function (el, binding) {
            let oDiv = el;   //当前元素
            let self = this;  //上下文
            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';
                     //将此时的位置传出去
                    binding.value({x:e.pageX,y:e.pageY})
                };
                document.onmouseup = function (e) {               
                    document.onmousemove = null;
                    document.onmouseup = null;
                };
            };

            function onMouseWheel(ev) {/*当鼠标滚轮事件发生时,执行一些操作*/
                var ev = ev || window.event;
                var down = true; // 定义一个标志,当滚轮向下滚时,执行一些操作
                    down = ev.wheelDelta?ev.wheelDelta<0:ev.detail>0;
                if(down){
                    oDiv.style.width = oDiv.offsetWidth-20+'px';
                }else{
                    oDiv.style.width = oDiv.offsetWidth+20+'px';
                }
                if(ev.preventDefault){/*FF 和 Chrome*/
                    ev.preventDefault();// 阻止默认事件
                }
                return false;
            }
            addEvent(oDiv,'mousewheel',onMouseWheel);
            addEvent(oDiv,'DOMMouseScroll',onMouseWheel);
            function addEvent(obj,xEvent,fn) {
                if(obj.attachEvent){
                    obj.attachEvent('on'+xEvent,fn);
                }else{
                    obj.addEventListener(xEvent,fn,false);
                }
            }
        }
    }
);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值