vue实现在页面拖拽放大缩小div并显示鼠标在div的坐标

1、功能要求:

实现在一个指定区域拖拽div,并可以放大缩小,同时显示鼠标在该div里的坐标,如图可示

缩小并拖动

2、实现

bash 复制代码
     <div class="div_content" ref="div_content">
                <div class="div_image" id="pic"
                    :style="{'zoom':zoom,'transform':'translate('+moveX+'px,'+moveY+'px)',}"
                    @mousedown.stop="mousedown($event)" @mousemove="handleMouseMove" @mouseleave="mouseout"
                   >


                </div>

                <div class="div_image_tool">
                    <img src="..." class="div_add " @click="add_img">
                    <div class="heng"></div>
                    <img src="..." class="div_add div_decrease" @click="dec_img">
                </div>
            </div>
            <div class="div_axirs">X:{{ux}} Y:{{uy}}</div>

js代码

bash 复制代码
data(){return{
                ux: 0,
                uy: 0,
                moveX: 0,//X轴移动的距离

                moveY: 0,

                startx: '',//鼠标的初始位置
                starty: '',
                endx: 0,
                endy: 0,
                zoom: 1,//放大的倍数
}
},
methods:{
    add_img() {

                this.zoom <= 10 ? this.zoom = this.zoom + 0.5 : ''
            },
            dec_img() {

                this.zoom > 0.5 ? this.zoom = this.zoom - 0.5 : ''
            },


         mousedown(e) {
                // 绑定mousemove
                this.startx = this.formatXY(e.pageX / this.zoom); this.starty = this.formatXY(e.pageY / this.zoom)
              

                
                document.onmousemove = (e) => {
                    this.moveX = this.formatXY(e.pageX / this.zoom) - this.startx + this.endx

                    this.moveY = this.formatXY(e.pageY / this.zoom) - this.starty + this.endy
                    e.preventDefault()
                };
                document.onmouseup = (e) => {
                    // 解除绑定mousemove

                    document.onmousemove = null;

                    this.endx = this.moveX

                    this.endy = this.moveY;
                }


            },
                   mouseout() {
                var that = this;
                that.ux = 0;
                that.uy = 0;
            },
  
            handleMouseMove(e) {
                this.getAxis(e)
            },
            getAxis(e) {
 
                this.ux = this.formatXY(e.offsetX / this.zoom);
                this.uy = this.formatXY(e.offsetY / this.zoom);
},
   formatXY(num) {
                return num.toFixed(0)
            },
            }

css

bash 复制代码
  .div_content {
          position: relative;
        width: 600px;
        height: 580px !important;
        margin: 0 20px;
        overflow: hidden;
        background: rgb(230, 229, 229);
    }

    .div_image {
        height: 400px;
        width: 400px;
        background: white;
        margin: 100px auto auto 100px !important;
    }
相关推荐
2401_894915531 小时前
GEO 优化源码全解析:从搜索引擎到 AI 引擎的底层改写逻辑
java·服务器·前端·数据库·人工智能·分布式·搜索引擎
Profile排查笔记7 小时前
指纹浏览器哪个好?从 Profile、代理、权限和自动化能力判断是否适合
前端·人工智能·后端·自动化
lzhdim7 小时前
12、JavaScript常见的内存泄露问题 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
denggun123457 小时前
yield
前端·数据库·python
前端snow7 小时前
ai agent -- prompt汇总
前端
muddjsv9 小时前
前端性能优化实战:从加载到渲染的全面提速指南
前端·性能优化
deli0070079 小时前
JSON 树形查看器:粘贴即解析,折叠展开一目了然
前端·数据库·json·ai编程
guanguan0_09 小时前
PageProxy:页面维度接口地图 + 一键场景切换
前端·ai编程·请求代理·proxy工具
liangshanbo121510 小时前
虚拟列表深度面试题整理
java·开发语言·前端
IT_陈寒10 小时前
Redis内存警告竟是因为这个不起眼的配置项
前端·人工智能·后端