VUE实现缩放 通过自定义指令


    // 自定义指令
    directives:{
        zoom(el,binding,vnode) { 
            let that = vnode.context
            el.onmousedown = function (e) {  
                e.preventDefault()  
                console.log("缩放点击事件")
                let currentKey = binding.value.index//当前操作的数组下标
                let parentId = "a_particle" + binding.value.index + that.currentId//组件ID  
                delete window.zoomEcharts
                that.JsonData[currentKey].canDrag = false   
                
                let parent = document.getElementById('dragDiv'+that.currentId) 
                
                let parentWidth = parent.offsetWidth  // 父元素宽度
                // 父级元素 距离 视口 左侧及顶部的距离
                let wisdomTop = parent.getBoundingClientRect().top   
                let wisdomLeft = parent.getBoundingClientRect().left   
                
                // 开始移动
                document.onmousemove = function (e) {  
                        let dom = document.getElementById(parentId)    
                        let ph = dom.offsetHeight// 当前高度 
                        let pw = dom.offsetWidth // 当前宽度  
                        console.log("缩放事件触发")
                        document.getElementById(parentId).style.border='1px dashed'
                        // 当前鼠标位置
                        let pageX = e.clientX + (dom && dom.scrollLeft  || 0) - (dom && dom.clientLeft  || 0);
                        let pageY = e.clientY + (dom && dom.scrollTop || 0) -  (dom && dom.clientTop || 0 );
 
                        if(
                            (pageX-wisdomLeft-dom.offsetLeft) < that.prillingConfig.minW || //最小宽度限制
                            (pageY-wisdomTop-dom.offsetTop) < that.prillingConfig.minH || //最小高度限制
                            pageX > (parentWidth + wisdomLeft) //最大宽度
                        ){
                            return
                        }

                        // 求宽
                        dom.style.width = (pageX-wisdomLeft-dom.offsetLeft)/parentWidth*100+'%' 
                        let height = pageY-wisdomTop-dom.offsetTop
                        // 设置高度
                        if(that.JsonData[currentKey].style.heightA){
                            that.JsonData[currentKey].style.heightB = ''
                            dom.style.height= height+'px'
                            that.JsonData[currentKey].style.heightA= height 
                        }else{
                            that.JsonData[currentKey].style.heightA = '' 
                            height = height/document.getElementById("dragDiv"+that.currentId).offsetHeight*100
                            dom.style.height=height+'%'
                            that.JsonData[currentKey].style.heightB= height 
                        }
                        // 设置宽度
                        that.JsonData[currentKey].style.widthB = (pageX-wisdomLeft-dom.offsetLeft)/parentWidth*100
                   
                        // 设置是否缩放后需要进行resize事件
                        if(that.typeOfEcharts.includes(that.JsonData[currentKey].strAtomCode.toString())){ 
                            if(window.zoomEcharts)return;
                            window.zoomEcharts = setTimeout(()=>{ 
                                window.zoomEcharts = false
                                console.log("asssssss")
                                try{  
                                    window.myEcharts[that.JsonData[currentKey].id].resize() 
                                }catch(err){}
                            },150)
                        }

                }
                // 鼠标拖拽结束
                document.onmouseup = function (e) {
                    that.JsonData[currentKey].canDrag = true
                    document.onmousemove = null; 
                    document.onmouseup = null;
                    document.getElementById(parentId).style.border='' 
                    delete window.zoomEcharts  
                }
            }
        },

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Web_Lys

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值